复制avcodec参数

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

我正试图使用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.

问题:

  1. 这是实际问题吗?
  2. 我该如何解决它?
  3. 我是否走在正确的轨道上,以实现从视频文件中提取音频的目标?我已经看到 这个 问题(以及其他类似问题,如 这个这个)上,但似乎都没有完整的代码示例。这个库的C API文档也有点缺乏。
c++ audio ffmpeg libav
1个回答
2
投票

你可以在mp4文件中有多个音轨,但在mp3文件中只有一个这样的音轨。最简单的解决方法是 重合 例子是替换第101-103行。

if (in_codecpar->codec_type != AVMEDIA_TYPE_AUDIO ||
    stream_index != 0) {

当然,只有当输出是... mp3.

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

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