我试图使用libav将MP4文件转换为MP3文件。基本上是为了实现ffmpeg -i filename.mp4 filename.mp3所做的事情。我找到了这官方的例子。但是,当我使用一个输入MP4和一个输出MP3运行它时,我会得到一个错误:
无效音频流。完全需要一个MP3音频流。
我对这个库一点也不熟悉,但我想我已经把问题缩小到了这行:
ret = avcodec_parameters_copy(out_stream->codecpar, in_codecpar);它似乎复制一个视频文件的所有流,但我们只需要一个MP3文件?我不确定。似乎没有一个函数只复制与音频相关的参数。我检查了源代码,avcodec_parameters_copy做了一个简单的memcpy。
问题:
发布于 2020-06-04 16:49:03
您可以在mp4文件中有多个音频轨道,但是在一个mp3文件中只能有一个这样的音轨。返工示例最简单的修复方法是替换第101-103行:
if (in_codecpar->codec_type != AVMEDIA_TYPE_AUDIO ||
stream_index != 0) {当然,只有当输出是mp3时,这才是相关的。
PS,确保输入mp4使用MP3音频编解码器。如果它没有(现在大多数都有AAC或AC3 ),仅仅重新修改文件是不够的,您还需要对音频流进行解码和重新编码。
https://stackoverflow.com/questions/62195218
复制相似问题