【问题标题】:Is there a Byte Offset in FFmpeg for source Files?FFmpeg 中是否有源文件的字节偏移量?
【发布时间】:2015-06-12 16:02:48
【问题描述】:

我正在开发一个 C++ 应用程序(在 Ubuntu 上运行),它打开 FFmpeg 进行视频转换并通过 popen() 读取输出。这工作正常,但现在我需要 FFmpeg 以特定字节偏移量开始读取源文件。有什么办法可以存档吗?我已经搜索了解决方案/命令行参数,但找不到任何有用的东西。那么有什么解决办法吗?

顺便说一句:我已经知道时间偏移有一个参数,但我需要一个字节偏移。

【问题讨论】:

  • 你为什么需要它?偏移前是否有一些无效数据?还是应该 ffmpeg 丢弃该偏移量之前的样本?
  • 我需要它,因为我只在原始文件中获得了一个字节位置(而不是时间码),但编码视频的开头需要相同的位置。

标签: c++ command-line ffmpeg offset


【解决方案1】:

如果您正在处理,您可以将ffmpeg 输入文件通过dd 传送并跳到特定偏移量。比如:

> dd if=myfile.mp2 skip=<myoffset-in-block-size> ibs=<block-size> | ffmpeg -i pipe:0 ...

或为ffmpeg 准备另一个不带管道的输入文件。


如果你在下工作,你可以使用MSys 1.0,它也支持dd

【讨论】:

  • 这行得通!但我注意到使用带有 -i pipe:0 的 ffmpeg 命令很重要,否则 ffmpeg 不会从 dd 获取输出。
【解决方案2】:

我认为 FFmpeg 不支持这种特殊用途的功能。

但是,使用简单的 avio 输入过滤器来跳过字节,构建您的自定义版本的 FFmpeg 很容易。

如果您绝对不想弄乱 FFmpeg,请调用 FFmpeg 以从管道 (stdin) 进行编码并使用您的文件阅读器提供它 - 但是您仅限于单个输入流。

【讨论】:

  • 好吧,我不想和 FFmpeg 混淆。我已经考虑过写入管道,但 popen() 不能很好地工作,因为我需要同时读取和写入,这非常棘手。
猜你喜欢
  • 1970-01-01
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 2016-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多