gpt4 book ai didi

ffmpeg - 从现有的非分段、分段 MP4 文件创建 Init 文件

转载 作者:行者123 更新时间:2023-12-04 22:50:24 25 4
gpt4 key购买 nike

我正在对较长的视频文件执行分 block 编码,其中我将原始文件拆分为单独编码的单独序列。这些序列是不同长度的文件,具体取决于场景剪辑出现的位置——它们的长度可能在 2 到 5 秒之间。它们都以 I 帧开头并且是独立的。

我的编码序列都是 MP4,例如:

test_0000.mp4
test_0001.mp4
test_0002.mp4
test_0003.mp4
test_0004.mp4

它们都有共同的属性:
$ mp4info test_0000.mp4

File:
major brand: isom
minor version: 200
compatible brand: isom
compatible brand: iso2
compatible brand: mp41
fast start: no

Movie:
duration: 2016 ms
time scale: 1000
fragments: no

...

现在,为了用 DASH 播放器播放这些,我必须创建一个初始化段和个人 fragmented MP4s .

我可以通过 mp4fragment 生成碎片化的 MP4我在每个独立的 MP4 文件上运行:
$ mp4info test_0000.m4s
File:
major brand: isom
minor version: 200
compatible brand: isom
compatible brand: iso2
compatible brand: mp41
compatible brand: iso5
fast start: yes

Movie:
duration: 2016 ms
time scale: 1000
fragments: yes

...

但显然,这些现在不符合规范,并且都包含 moov原子:



我需要的是只有一个 moof 的单个媒体片段和 mdat框,然后需要一个只有 moov 的初始化段盒子。

如何从现有的已编码段生成它?

我知道这看起来像是一个 XY 问题。原则上,我已经可以在编码后直接对原始文件进行分段,并同时运行这些编码,例如使用 ffmpeg 的 dash多路复用器或 MP4Box,但是:
  • 关于最小和最大持续时间
  • 几乎无法控制生成的段大小
  • 这种方法不会并行化

  • 我还检查了 Bento4;它似乎不提供此功能。 FFmpeg 也没有。 MP4Box 的行为类似。他们都假设你有一个长文件开始。

    我知道我可以拼接 ftypmoov来自这些“假片段”的盒子,以便创建一个初始化段。但我最终会得到包含多个 moof 的段。和 mdat框,不符合 the specification – 它只允许一个片段和媒体数据框:

    4. Media Segments

    […] one optional Segment Type Box (styp) followed by a single Movie Fragment Box (moof) followed by one or more Media Data Boxes (mdat).



    我想我可以忍受 styp不在场。

    最佳答案

    我认为最简单的方法是使用 MP4Box ,见 Split fragmented MP4 into multiple MP4 files详情。

    关于ffmpeg - 从现有的非分段、分段 MP4 文件创建 Init 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53084664/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com