我正试图使用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
.
问题:
你可以在mp4文件中有多个音轨,但在mp3文件中只有一个这样的音轨。最简单的解决方法是 重合 例子是替换第101-103行。
if (in_codecpar->codec_type != AVMEDIA_TYPE_AUDIO ||
stream_index != 0) {
当然,只有当输出是... mp3
.
PS,确保你的输入 mp4
使用MP3音频编解码器。如果它没有(现在大多数都有AAC或AC3),光是重塑文件还不够,你还需要对音频流进行解码和重新编码。