如何更改 libavformat 中的流索引

2023-12-23

我是 ffmpeg 的新手。当某些媒体具有多个音频流时,我遇到问题。 假设在MKV文件中,它有三个音频流(MP3、WMA和WMAPro)

使用以下命令进行解复用时如何更改流索引:

AVPacket inputPacket;
ret = av_read_frame(avInputFmtCtx, &inputPacket)

所以我正在搜索类似change_stream_index(int streamindex)的东西,当我调用该函数时(假设change_stream_index(2)),对av_read_frame的下一次调用将解复用WMAPro帧而不是MP3。

多谢你们!


我今天遇到了同样的问题,在我的例子中,我处理一个包含 80 个曲目的 mp4 文件,显然,如果您只需要解复用单个曲目,您不希望每次处理单个曲目时跳过最多 79 个数据包来自选定流的数据包。

我的解决方案是设置discard我不感兴趣的所有流的属性AVDISCARD_ALL。例如,为了仅选择索引为 71 的单个流,您可以执行以下操作:

int32_t stream_index = 71;
for(int32_t i = 0; i<pFormatContext->nb_streams; i++)
{
  if(stream_index != i) pFormatContext->streams[i]->discard = AVDISCARD_ALL;
}

之后你可以打电话av_seek_frame or av_read_frame并且只处理第 71 条磁道。

仅供参考,以下是所有可用丢弃类型的列表:

AVDISCARD_NONE    =-16, ///< discard nothing
AVDISCARD_DEFAULT =  0, ///< discard useless packets like 0 size packets in avi
AVDISCARD_NONREF  =  8, ///< discard all non reference
AVDISCARD_BIDIR   = 16, ///< discard all bidirectional frames
AVDISCARD_NONINTRA= 24, ///< discard all non intra frames
AVDISCARD_NONKEY  = 32, ///< discard all frames except keyframes
AVDISCARD_ALL     = 48, ///< discard all
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何更改 libavformat 中的流索引 的相关文章

随机推荐

  • 正则表达式:如果包含特定字符串则不匹配

    我有两个字符串 Some Stuff S00E00 HDTV x264 2HD mp4 Some Stuff S00E00 720p HDTV X264 这个正则表达式 ome tuff mp4 HDTV x264 我需要的是只匹配第一个
  • Spring Batch - java 配置与 xml

    我已经使用 Spring Batch 的 Xml 配置一段时间了 感觉它更简单 简洁 然而 如今 人们建议使用 javaconfig 而不是 xml 我用谷歌搜索了这个话题 这个网站告诉我们为什么 javaconfig 更好https bl
  • TortoiseSVN 需要打开哪些端口来进行身份验证(明文)和提交?

    TortoiseSVN 需要打开哪些端口进行身份验证 基本 才能提交 我知道这不是一件好事 但我相信用户名和密码现在是清楚的 让我尽可能多地描述一下我所知道的设置以及似乎正在发生的事情 我是一名承包商 帮助一个州部署和修改 大部分 公共领域
  • PC 到 Macbook Pro 的过渡 - 开始(重新)开始?

    我现在正在学习第二门计算机科学课程 到目前为止 我很喜欢编程 但实际上只是勉强度日 除了必修的课堂作业之外 我没有做过太多编程 出于类似的原因 我从未真正投资过下载 学习软件来帮助我编程 IDE 编辑器 编译器等 我知道这听起来很乏味 但我
  • 如何将 UIWebView 内运行的 HTML 事件发送到本机 Objective-C 代码?

    我想在 iOS 应用程序中集成一个完整的 HTML 框架 即 HTML CSS JavaScript 并使 UIWebView 负责运行 HTML 内容 从而能够与本机 Objective C 源代码的其余部分进行通信 方向 1 从 Obj
  • 如何在 Java 8 中以相反顺序从列表中获取有序流

    是否有一种明智的方法可以从列表 特别是数组列表 但这不重要 中获取有序流 该流以与原始列表中的相反的方式流式传输元素 我正在寻找一种不涉及缓冲任何内容 收集器 另一个列表 数组等 因为它们复制浪费的容器 中的数据的解决方案 或者使用Coll
  • AsyncHttpClient 是否知道为所有 HTTP 请求分配多少个线程

    我正在评估异步Http客户端 https github com AsyncHttpClient async http client对于大负载 1M HTTP 请求 对于每个请求 我想使用 AsyncCompletionHandler 调用回
  • 将设备旋转到横向时 UICollectionViewFlowLayout 尺寸警告

    我们使用 UICollectionView 来显示覆盖全屏的单元格 减去状态栏和导航栏 单元格大小设置为self collectionView bounds size void viewWillAppear BOOL animated va
  • 在 C++ 11 中使用自制程序、gcc 和 llvm

    这是我的问题 我想使用 gcc 或 clang 提供的 C 11 功能 但是 我有这些要求 我正在使用 Mac 我依赖于自制程序提供的一堆库 以及really不想自己编译它们 特别是 OSG 它本身依赖于大量其他库 并提升 尽管我总是可以自
  • Spring Security + i18n = 如何使其协同工作?

    我的第一个问题在这里 我会尽力具体说明 我对 Spring 很陌生 我正在尝试创建非常简单的预订系统 但这实际上并不重要 重要的是我正在创建一些基本模板 然后我将用真实的网页填写这些模板 应用程序适用于 hibernate mysql 我还
  • 不平衡随机数发生器

    我必须从升序数组中选择一个元素 较小的元素被认为更好 因此 如果我从数组的开头选择一个元素 它被认为是更好的选择 但同时我不希望选择是确定性的并且始终是相同的元素 所以我正在寻找 一个随机数生成器 生成 0 n 范围内的数字 但是 数量越小
  • 嵌入 MS Word 作为编辑器(就像在 Outlook 中一样)

    在 Outlook 中 您可以使用 Word 作为电子邮件编辑器 不确定 Office 2007 中的情况如何 但在 2003 中可以 我可以在我自己的应用程序中复制这个吗 我看过一篇文章提到使用 Web 浏览器组件 打开 doc 文件并打
  • 使用 RSpec 测试 CSV.generate

    我在 Rails 3 1 项目中有以下助手 我只是想知道是否有办法测试 CSV generate 调用 我很想说我有一些想法如何去做 但事实是我什至不知道从哪里开始 任何想法表示赞赏 require csv module Admin Pur
  • MongoDB:不区分大小写和重音

    我正在寻找字符串 JES S 但只返回具有指定字符串的文档 我需要搜索忽略重音符号和大写字母 我正在使用 C 和 mongodb 驱动程序 我的 mongodb 中保存了两个文档 id 5d265f3129ea36365c7ca587 TR
  • Android 谷歌地图 v2 片段黑色背景问题

    如何在滚动时使谷歌地图 v2 中的黑色背景透明
  • 自己内核的键盘中断处理程序 (C)

    我正在编写一个小型操作系统作为学校作业的一部分 但在获取键盘输入 按一个键 gt 将其显示在屏幕上 时我遇到了困难 我正在使用 osdev org 的 Bare Bones 教程 gcc 交叉编译器 GRUB 引导加载程序 ld 链接器 并
  • 核心数据方法不在头文件中

    为什么这些方法不应该也包含在头文件中 顺便说一句 这是由 xcode 生成的 界面 class Environment Location interface Log NSManagedObject private property nona
  • 安卓HTTPS连接

    我正在做一个 https 帖子 我收到了 ssl 异常不受信任的服务器证书的异常 如果我做正常的http 它工作得很好 我是否必须以某种方式接受服务器证书 我复制了以下来自的代码Java 开发者年鉴 https web archive or
  • Freemarker 压缩不带空格的 single_line

    似乎 正在用单个空格 替换换行符 而不是仅仅抑制它们 Example lt compress single line true gt First cell lt if something gt Second cell Third cell
  • 如何更改 libavformat 中的流索引

    我是 ffmpeg 的新手 当某些媒体具有多个音频流时 我遇到问题 假设在MKV文件中 它有三个音频流 MP3 WMA和WMAPro 使用以下命令进行解复用时如何更改流索引 AVPacket inputPacket ret av read