Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video 为什么ffmpeg在将FLV转换为h264时会删除SEI消息?_Video_Ffmpeg_H.264_Flv_Video Conversion - Fatal编程技术网

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

Video 为什么ffmpeg在将FLV转换为h264时会删除SEI消息?,video,ffmpeg,h.264,flv,video-conversion,Video,Ffmpeg,H.264,Flv,Video Conversion,我有一个带有h264视频标签的FLV文件。包含h264 IDR NAL单元的每个视频标签还包含显示方向SEI,即IDR关键帧的我的NAL访问单元为[SEI,IDR] 出于某种原因,在不使用流复制选项的情况下将此FLV文件转换为h264会从所有IDR帧中删除所有SEI消息。取而代之的是,就在SPS和PPS NAL单元之后,有一个单用户未注册的数据SEI i、 e使用 ffmpeg -i in.flv out.264 给出[SPS、PPS、SEI、IDR,…],其中SEI为: x264-核心155

我有一个带有h264视频标签的FLV文件。包含h264 IDR NAL单元的每个视频标签还包含显示方向SEI,即IDR关键帧的我的NAL访问单元为[SEI,IDR]

出于某种原因,在不使用流复制选项的情况下将此FLV文件转换为h264会从所有IDR帧中删除所有SEI消息。取而代之的是,就在SPS和PPS NAL单元之后,有一个单用户未注册的数据SEI

i、 e使用

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

x264-核心155 r2917 0a84d98-H.264/MPEG-4 AVC编解码器-版权所有 2003-2018年——选项:cabac=1参考=3 解块=1:0:0分析=0x3:0x113 me=hex子模块=7 psy=1 psy_rd=1.00:0.00 混合\u ref=1 me\u range=16色度\u me=1格线=1 8x8dct=1 cqm=0 死区=21,11快速\u pskip=1色度\u qp\u偏移量=-2线程=11 前瞻线程=1个切片线程=0 nr=0抽取=1交错线程=0 bluray\u compat=0受约束\u内部=0 bframes=3 b\u pyramid=2 b\u adapt=1 b_bias=0 direct=1 weights b=1 open_gop=0 weights p=2 keyint=250 keyint\u min=25 scenecut=40内部刷新=0 rc\u前瞻=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_比率=1.40 aq=1:1.00

然而

ffmpeg -i in.flv -c:v copy out.264

保留我的SEI消息,并将原始h264解码到FLV muxer中,以首先生成FLV文件。为什么会发生这种情况?是否有一个标志来执行编码但保留SEI消息?

使用-c:copy,ffmpeg不解码h264,它只是将NALU从源复制到目标,甚至不看它们。因此,每一个纳鲁都被保存了下来

通过转码,ffmpeg在解码时释放元数据。它需要获取SEI,将其设置为AVFrame的元数据,然后在重新编码时将SEI写入新帧。但SEI是一个每AU对象。这意味着,如果更改帧速率,ffmpeg需要知道如何将SEI拆分或合并到新的帧速率中。这是很多还没有人编写的代码。在不改变帧速率的情况下,可以复制SEI,也可以为所有已知的SEI类型编写合并/拆分处理程序。但需要有人赞助这项工作


Ffmpeg是开源的,如果你要开发代码,他们很可能会接受这个补丁。

我明白了,所以对于像闭路字幕和任何其他可以嵌入到比特流中的额外元数据这样的东西,在段码后添加它可能比在段码前添加更容易。另外,快速阅读libav可以发现,在转码时,每个AVframe都有一个与我的特定SEI消息相关联的结构,所以我希望自己提交补丁不会太困难。