gpt4 book ai didi

video - 为什么 ffmpeg 将 FLV 转换为 h264 时会删除 SEI 消息?

转载 作者:行者123 更新时间:2023-12-04 22:54:56 28 4
gpt4 key购买 nike

我有一个带有 h264 视频标签的 FLV 文件。每个包含 h264 IDR NAL 单元的视频标签还包含显示方向 SEI,即我的 IDR 关键帧的 NAL 访问单元是 [SEI, IDR]。
出于某种原因,将此 FLV 文件转换为 h264 而不使用流复制选项会从所有 IDR 帧中删除所有 SEI 消息。取而代之的是,在 SPS 和 PPS NAL 单元之后,有一个用户未注册的数据 SEI。
即使用

ffmpeg -i in.flv out.264
给出 [SPS, PPS, SEI, IDR, ...] 其中 SEI 为:

x264 - core 155 r2917 0a84d98 - H.264/MPEG-4 AVC codec - Copyleft2003-2018 - http://www.videolan.org/x264.html - options: cabac=1 ref=3deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=11lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crfmbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40aq=1:1.00


然而
ffmpeg -i in.flv -c:v copy out.264
保留我的 SEI 消息,并且几乎解码为我放入 FLV 多路复用器以首先生成 FLV 文件的原始 h264。为什么会这样?是否有执行编码但保留 SEI 消息的标志?

最佳答案

使用 -c:copy,ffmpeg 不会解码 h264,它只是将 NALU 从源复制到目标,甚至不查看它们。因此,每个 NALU 都被保留。
使用转码,ffmpeg 会丢失解码时的元数据。它需要获取 SEI,将其设置为 AVFrame 的元数据,然后在重新编码时将 SEI 写入新帧。但是 SEI 是每个 AU 对象。这意味着如果您更改帧速率,ffmpeg 将需要知道如何将 SEI 拆分或合并到新的帧速率中。那是很多还没有人写过的代码。在不更改帧速率的情况下,可以复制 SEI,为所有已知的 SEI 类型编写合并/拆分处理程序。但需要有人赞助这项工作。
Ffmpeg 是开源的,如果您要开发该代码,他们很可能会接受该补丁。

关于video - 为什么 ffmpeg 将 FLV 转换为 h264 时会删除 SEI 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62501918/

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