使用C ++从mp4提取音频到mp3(不使用args执行ffmpeg)

问题描述 投票:3回答:1

我如何以编程方式从mp4视频文件格式转换(提取音频通道)?我只是在网上找不到任何使用C ++的东西。

不能将命令行参数传递给LAME或MPLAYER或FFMPEG。

c++ mp3 mp4 converters
1个回答
9
投票

您可以尝试使用ffmpeg在c或c ++中执行此操作。这是正常的步骤流程。

  1. 使用av_register_all()初始化ffmpeg;

  2. 使用avformat_open_input(&informat,sourcefile,0,0))打开输入文件。

  3. 使用avformat_find_stream_info(informat,0))查找流信息。

  4. 通过遍历流并将codec_type与AVMEDIA_TYPE_AUDIO进行比较来找到音频流。] >>

  5. 一旦您输入了音频流,就可以找到音频解码器并打开解码器。使用avcodec_find_decoder(in_aud_strm-> codec-> codec_id)和avcodec_open2(in_aud_codec_ctx,in_aud_codec,NULL)。

  6. 现在输出文件可以使用av_guess_format(NULL,(const char *)outfile,NULL)来猜测格式。

  7. 分配上下文以节省格式。

  8. 使用avcodec_find_encoder(outfmt-> audio_codec)查找输出音频编码器。

  9. 添加新的流音频流avformat_new_stream(outformat,out_aud_codec)。

  10. 用所需的采样率,采样fmt,通道等填充输出编解码器上下文

  11. 使用avio_open()打开输出文件。

  12. 使用avformat_write_header(outformat,NULL)写输出标题。

  13. 现在while循环开始读取数据包,仅对音频数据包进行解码,然后对其进行编码,然后将其写入打开的输出文件中。您可以使用av_read_frame(informat,&pkt),avcodec_decode_audio4(in_aud_codec_ctx,pframeT,&got_vid_pkt,&pkt),avcodec_encode_audio2()和av_write_frame()。

  14. 最后使用av_write_trailer编写预告片。

  15. 您可以查看ffmpeg示例中提供的demuxing.c和muxing.c。

© www.soinside.com 2019 - 2024. All rights reserved.