【问题标题】:ffmpeg - generate moov atomffmpeg - 生成 moov 原子
【发布时间】:2021-07-10 05:36:08
【问题描述】:

我目前正在用 blackmagic 的 prorecorder 录制视频。我使用 ffmpeg 将视频即时转码为 mp4 视频容器。持续时间未知,因为我正在对 prorecorder 输出到命名管道的 .ts 进行转码。

我的目标是尝试使用浏览器播放此文件,同时仍在录制流 - 播放很棒,但问题是当我打开文件时,持续时间被定义为当前录制时间。

所以,问题是 - 我想在 fe 期间生成一个“假”moov 原子。使用 ffmpeg 8 小时,然后像我已经在做的那样开始录制 mp4 文件。我怎么能这样做?

我检查过的文档,我认为它是相关的 - https://ffmpeg.org/ffmpeg-formats.html#MOV_002fMP4_002fISMV 我也在堆栈上看到了这个:Is it possible to fake a (mp4) moov atom?

【问题讨论】:

  • 在您的场景中,碎片化的 mp4 解决方案将更“标准”或更简单的 RTMP 流,您看trac.ffmpeg.org/wiki/StreamingGuide
  • 带有 ffmpeg 的 RTMP 流式传输是否可以选择返回流式传输时间,这意味着您可以重播 2 小时前发生的事件,例如?
  • 不,实际上你不能做那样的事情。我以为你在尝试直播,但它不一样。

标签: ffmpeg mp4 video-recording


【解决方案1】:

我遇到了类似的问题,是在对近 2000 个视频进行编码后才发现的。我没有重新开始,而是使用这个命令来插入 moov atom:

/usr/bin/ffmpeg -i ./input.mp4 -c:v copy -movflags faststart -strict -2 ./output.mp4

【讨论】:

  • 这会将 moov atom 移动到开头,但仅在第二遍时,因此显着延长了转换时间,并且首先使目的无效:在转换完成之前您无法开始播放。 -movflags empty_moov ` 使文件在仍在转换时可播放,但 Duration 未定义且无法搜索。那么问题来了:如果moov为空的文件是可播放的并且我们知道时长,为什么我们不能把时长数据放在开头呢?
  • 正如@Liphtier 提到的,这并不能回答 OP 的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-17
  • 2017-09-16
  • 2016-10-07
相关资源
最近更新 更多