Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 复制avcodec参数_C++_Audio_Ffmpeg_Libav - Fatal编程技术网

C++ 复制avcodec参数

C++ 复制avcodec参数,c++,audio,ffmpeg,libav,C++,Audio,Ffmpeg,Libav,我正在尝试使用libav将MP4文件转换为MP3文件。基本上尝试实现ffmpeg-i filename.mp4 filename.mp3的功能。我找到了官方的例子。但当我用输入MP4和输出MP3运行它时,我得到一个错误: 无效的音频流。只需要一个MP3音频流 我对这个图书馆一点也不熟悉,但我想我已经把问题缩小到以下几行: 它似乎复制了一个视频文件的所有流,但我们只需要一个MP3文件?我不确定。似乎没有只复制与音频相关的参数的功能。我检查了源代码,avcodec\u parameters\u co

我正在尝试使用libav将MP4文件转换为MP3文件。基本上尝试实现
ffmpeg-i filename.mp4 filename.mp3
的功能。我找到了官方的例子。但当我用输入MP4和输出MP3运行它时,我得到一个错误:

无效的音频流。只需要一个MP3音频流

我对这个图书馆一点也不熟悉,但我想我已经把问题缩小到以下几行:

它似乎复制了一个视频文件的所有流,但我们只需要一个MP3文件?我不确定。似乎没有只复制与音频相关的参数的功能。我检查了源代码,
avcodec\u parameters\u copy
执行一个简单的
memcpy

问题:

  • 这是实际问题吗
  • 我如何解决它
  • 我是否正确地实现了从视频文件中提取音频的目标?我在这里看到了这个问题(以及其他类似的问题,如和),但似乎没有一个完整的代码示例。这个库的C API文档也有点缺乏
    在mp4文件中可以有多个音频曲目,但在mp3文件中只能有一个这样的曲目。本例中最简单的修复方法是替换第101-103行:

    if (in_codecpar->codec_type != AVMEDIA_TYPE_AUDIO ||
        stream_index != 0) {
    
    当然,这仅在输出为
    mp3
    时才相关


    PS,确保您的输入
    mp4
    使用MP3音频编解码器。如果没有(现在大多数都有AAC或AC3),则仅重新复制文件是不够的,您还需要对音频流进行解码和重新编码。

    mp4是否包含mp3曲目?或者该曲目使用的是不同的编解码器?@szatmary在任何MP4的一般情况下都可以实现吗?而不是使用您发布的代码。为了支持任何编解码器,您进行了解码和重新编码。@szatmary相同的GitHub存储库似乎有解码和编码音频的示例。这些是我需要调查的吗?如果没有,你能给我指点一下在哪里可以找到它是如何完成的例子吗?就像任何编码项目一样,它需要分解成几个步骤。在线查找ffmpeg/libav教程,仅从解码步骤开始。我找不到任何关于解码/重新编码的最新教程。关于这个图书馆的每一篇教程(包括官方教程)似乎都非常过时。如何对音频流进行解码/重新编码?
    if (in_codecpar->codec_type != AVMEDIA_TYPE_AUDIO ||
        stream_index != 0) {