首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制avcodec参数

复制avcodec参数
EN

Stack Overflow用户
提问于 2020-06-04 12:59:38
回答 1查看 741关注 0票数 1

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

无效音频流。完全需要一个MP3音频流。

我对这个库一点也不熟悉,但我想我已经把问题缩小到了行:

代码语言:javascript
复制
ret = avcodec_parameters_copy(out_stream->codecpar, in_codecpar);

它似乎复制一个视频文件的所有流,但我们只需要一个MP3文件?我不确定。似乎没有一个函数只复制与音频相关的参数。我检查了源代码,avcodec_parameters_copy做了一个简单的memcpy

问题:

  1. 这是真正的问题吗?
  2. 我该怎么解决呢?
  3. 我是否在正确的轨道上实现从视频文件中提取音频的目标?我在这里看到过问题(以及其他类似的问题,如),但似乎没有一个完整的代码示例。这个库的C文档也有点缺乏。
EN

回答 1

Stack Overflow用户

发布于 2020-06-04 16:49:03

您可以在mp4文件中有多个音频轨道,但是在一个mp3文件中只能有一个这样的音轨。返工示例最简单的修复方法是替换第101-103行:

代码语言:javascript
复制
if (in_codecpar->codec_type != AVMEDIA_TYPE_AUDIO ||
    stream_index != 0) {

当然,只有当输出是mp3时,这才是相关的。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62195218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档