【问题标题】:Add frame count overlay without other change in codec property添加帧计数叠加,而不更改编解码器属性
【发布时间】:2022-01-05 09:42:59
【问题描述】:

我正在尝试在使用 FFmpeg 的 hevc 视频上包含帧计数叠加。但是,视频会在 h.264 编解码器中重新编码。我想保留视频的所有编码属性(和以前一样)。

是否可以通过任何命令在不改变视频编解码器和其他编码属性的情况下添加帧数?

我使用了以下命令:

ffmpeg -i Video1.mp4 -filter_complex "drawtext=text='%{frame_num}': x=100 : y=50 : box=1" -y out1.mp4

输入#0,mov,mp4,m4a,3gp,3g2,mj2,来自“Video1.mp4”: 元数据: 主要品牌:isom 次要版本:512 compatible_brands:isomiso2mp41 编码器:Lavf58.76.100 持续时间:00:00:01.32,开始:0.000000,比特率:145 kb/s 流 #0:0(und):视频:hevc(主)(hev1 / 0x31766568)、yuv420p(tv)、416x240、138 kb/s、25 fps、25 tbr、1200k tbn、1200k tbc(默认) 元数据: handler_name : 视频处理程序 供应商 ID:[0][0][0][0]

流映射: 流#0:0 (hevc) -> drawtext drawtext -> 流 #0:0 (libx264)

我尝试的另一个命令:

ffmpeg -i Video1.mp4 -filter_complex "drawtext=text='%{frame_num}': x=100 : y=50 : box=1" -vcodec hevc -y out1.mp4

但是,此命令也会导致视频的编码属性/参数发生变化。

PS- 我使用的是 windows cmd 行。

PS- 是否可以对编码属性进行最小的更改?我想像以前一样保留所有切片 NAL 单元类型、所有配置文件和所有级别。但是,所有原始 NAL 单元都发生了变化。具体比如,所有子层都转换为基础层,TSA图片转换为其他类型。

谢谢

【问题讨论】:

    标签: video ffmpeg codec hevc


    【解决方案1】:

    简短回答:没有重新编码就没有解决方案。

    简化的长答案:视频比特流是像素内容的紧凑表示。为了使其紧凑(即压缩),以预测方式利用像素中存在的空间和时间冗余。当您更改某些像素(例如您的时间戳)时,编码器很可能会更改其预测方案,因为您新引入的像素现在代表不同的冗余模式。因此,需要使用新参数的新编码。

    但是如果你设法强加相同的编码参数(即没有重新编码):

    在这种情况下,由于上述预测方面,更改任何像素都会触发其他像素的一连串变化,称为误差漂移。为了给你这个链的顺序,我可以告诉你,根据像素的位置/重要性,有时改变一个像素会导致数百万像素的相应变化。在您的问题中,我们谈论的是应该在每一帧被烧毁的几个像素的时间戳。

    【讨论】:

    • 是否可以对编码属性进行最小的更改?我想像以前一样保留所有切片 NAL 单元类型、所有配置文件和所有级别。但是,所有原始 NAL 单元都发生了变化。具体比如,所有子层都转换为基础层,TSA图片转换为其他类型。
    猜你喜欢
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 2015-12-19
    相关资源
    最近更新 更多