假设我有一个视频流在很长一段时间(几分钟到几小时)内几乎没有场景变化,并且我正在使用 FFmpeg 之类的东西将原始视频转码为 h.264,我可以使用哪些设置来获得利用超大冗余?
是否像将最小关键帧间隔设置为最大值(无论是什么)一样简单?
h.264 规范中是否有空间来增强 FFmpeg 以进一步利用很长一段时间而没有场景变化?
假设我有一个视频流在很长一段时间(几分钟到几小时)内几乎没有场景变化,并且我正在使用 FFmpeg 之类的东西将原始视频转码为 h.264,我可以使用哪些设置来获得利用超大冗余?
是否像将最小关键帧间隔设置为最大值(无论是什么)一样简单?
h.264 规范中是否有空间来增强 FFmpeg 以进一步利用很长一段时间而没有场景变化?
首先,请注意 FFmpeg 本身并不编码 h264,而是x264编码。
是的,定义一个异常长的关键帧应该会显着减少长时间几乎没有运动或没有运动的视频的大小。为什么?因为“关键帧”是一个包含所有视频数据的帧——如果你愿意的话,是一个快照。所有其他帧都将与关键帧不同。这样做的一个警告是,如果中间帧有任何损坏,那么视频将被损坏,直到下一个关键帧出现。
要在使用 FFmpeg 编码时显式设置关键帧间隔,请使用-g
开关。如果您的视频每秒 25 帧,并且您希望关键帧每分钟显示一次,请添加-g 1500
到您的 FFmpeg 命令行。(25 f/sx 60 s = 1500 f)
对于您可能感兴趣的关键帧,您还可以控制其他一些有趣的方面,其中许多都记录在此处: x264 ffmpeg mapping and options guide