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

use*_*898 3 c++ mp3 mp4 converter

我如何以编程方式转换(提取音频通道)从mp4视频文件格式?
因为使用c ++,我在网上找不到任何东西.
我动态链接外部引擎,我可以通过c ++获取mp4文件并将其转换为mp3文件.
并且不将命令行参数传递给LAME或MPLAYER或FFMPEG?

pra*_*411 8

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

  1. init ffmpeg使用av_register_all();

  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猜测outformat(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编写预告片.

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