FFMpeg-Tourist(三)

使用FFMpeg抽取多媒体文件中音频数据

#include<libavutil/avutil.h>
#include<libavformat/avformat.h>
#include<stdio.h>


int main(int argc, char *argv[]){

	int ret;
	int audio_index;
	int length;
	AVFormatContext *fmt_ctx = NULL;
	char *src = argv[1];
	char *dst = argv[2];
	AVPacket pkt;
	FILE *dst_fd = NULL;




	av_log_set_level(AV_LOG_INFO);
	//注册api
	av_register_all();

	//输入流
	if(argc < 3) {
		av_log(NULL, AV_LOG_ERROR, "the count of params should be more than three!\n");
		return -1;
	}

//	src = argv[1];
//	dst = argv[2];

	ret = avformat_open_input(&fmt_ctx, src, NULL, NULL);
	if(ret < 0 ){
		av_log(NULL, AV_LOG_ERROR, "Can't open file: %s\n",av_err2str(ret));
		return -1;
	}
	av_dump_format(fmt_ctx, 0, src, 0);

	ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, NULL, 0);
	if(ret < 0 ){
		av_log(NULL, AV_LOG_ERROR, "Can't find best stream!\n");
		
		avformat_close_input(&fmt_ctx);
		return -1;
	}

	dst_fd = fopen(dst, "wb");
	if(!dst_fd){
		av_log(NULL, AV_LOG_ERROR, "Can't open out file!\n");
		return -1;
	}
		
	audio_index = ret;
	av_init_packet(&pkt);
	while(av_read_frame(fmt_ctx, &pkt) >= 0 ){
		if(pkt.stream_index == audio_index){
			length = fwrite(pkt.data, 1, pkt.size, dst_fd);
			if(length != pkt.size){
				av_log(NULL, AV_LOG_WARNING, "Warning, write data of length is not equal to pkt size\n");
			}
		}
		av_packet_unref(&pkt);
	}
	if(dst_fd){
		fclose(dst_fd);
	}

	avformat_close_input(&fmt_ctx);

	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值