Ffmpeg H.264的scencut功能是否会增加文件大小?

Ffmpeg H.264的scencut功能是否会增加文件大小?,ffmpeg,h.264,video-processing,video-encoding,Ffmpeg,H.264,Video Processing,Video Encoding,使用此命令时: ffmpeg -i original.mp4 -codec:v:0 libx264 -b:v 650k -crf 21 -minrate:v 0k -maxrate:v 750k -bufsize:v 5000k -r 30 -preset slow -x264opts "no-scenecut" -vcodec libx264 -force_key_frames "expr:bitor(eq(t,0),gte(t,prev_forced_t+5))" -f mp4 test.

使用此命令时:

ffmpeg -i original.mp4 -codec:v:0 libx264  -b:v 650k -crf 21 -minrate:v 0k -maxrate:v 750k -bufsize:v 5000k -r 30 -preset slow -x264opts "no-scenecut" -vcodec libx264 -force_key_frames "expr:bitor(eq(t,0),gte(t,prev_forced_t+5))" -f mp4 test.mp4
我总是得到比此命令更小的文件大小(相同的命令,但没有:-x264选择“无场景”):

我认为只有在使用I帧而不是p帧或B帧更有效的情况下,Scenecut才会使用I帧。

在什么情况下,我们需要使用scencut功能?

当触发
scenecut
时,如果距离大于
min keyint
,则会放置IDR,否则会放置I-frame

以下是发布在上的一些伪代码(将其添加到此处以供将来参考):

将当前帧编码为P帧和I帧(非常快的近似值)。
如果((与上一个关键帧的距离)>关键点),则
设置IDR帧
否则,如果(1-(P帧的位大小)/(I帧的位大小)<(scenecut/100)*(与上一个关键帧的距离)/keyint),则
如果((与上一个关键帧的距离)>=minkeyint),则
设置IDR帧
其他的
设置工字架
其他的
设置P帧
对帧进行真正的编码。
当不需要固定的GOP/强制关键帧时,应使用
scenecut
。如果您试图为ABR交付进行编码,那么您也可以使用双通道编码,并在pass-1上生成最高分辨率的stat文件,然后在pass-2上为每个格式副本重复使用该文件

ffmpeg -i original.mp4 -codec:v:0 libx264  -b:v 650k -crf 21 -minrate:v 0k -maxrate:v 750k -bufsize:v 5000k -r 30 -preset slow -vcodec libx264 -force_key_frames "expr:bitor(eq(t,0),gte(t,prev_forced_t+5))" -f mp4 test.mp4
encode current frame as (a really fast approximation of) a P-frame and an I-frame.

if ((distance from previous keyframe) > keyint) then
    set IDR-frame
else if (1 - (bit size of P-frame) / (bit size of I-frame) < (scenecut / 100) * (distance from previous keyframe) / keyint) then
    if ((distance from previous keyframe) >= minkeyint) then
        set IDR-frame
    else
        set I-frame
else
    set P-frame

encode frame for real.