命令示例:
-map 0:0 -f mp4 -vcodec libx264 -preset slow -profile:v main -vf scale="640:trunc(ow/a/2)*2" -vb 700k -minrate 650k -maxrate 750k -bufsize 10000k -an -g 48 -x264opts keyint=48:min-keyint=10:scenecut=40 -flags +cgop -sc_threshold 40 -pix_fmt yuv420p -threads 0 -y
在编码中没有这样的错误,但我想了解以下几点-
1)以上命令将确保GOP大小范围为{10,48},如果任何场景变化值(frame1到fame2)>40%,则此处引入关键帧。
2)因此,这意味着在3小时的源视频中,无法保证GOP大小保持不变
3)不考虑,我正在创建7个MP4文件,每个文件具有不同的比特率和分辨率。(这些mp4将在后期进行编码以平滑)。因此,我的目标是自适应流。但当我这样做时,我发现GOP大小在每个比特率上并不一致。我的意思是,例如:如果在Bitrate1 - GOP大小是像10,20,48等等,在其他比特率它不是在相同的序列。我希望我的问题有意义。
那么是否有一种方法可以确保GOP大小在单个输出中变化。但是如果源是相同的,那么每个比特率应该是一致的。
也适用于自适应流。场景切割检测是否可取?
你在第1点和第2点上是对的,但是在第3点你说你正在改变比特率和视频分辨率。事实上,当使用x264进行ABR时,使用相同GOP结构保持所有编码的唯一方法是(3种可能性):
- 只改变比特率,就可以了
- 使用两步方法,用
--pass 1
运行编码,以最大分辨率和比特率(我认为更快…)写出一个统计文件,然后通过--pass 3
重新使用这个统计文件用于所有不同的比特率和分辨率 - 用
--scenecut -1
禁用场景切割检测,用固定GOP编码。