场景检测和一致的GOP大小 - 自适应流

时间:2014-03-24 08:43:05

标签: video ffmpeg video-streaming transcoding smooth-streaming

示例命令:

-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大小在每个比特率上都不一致。我的意思是,对于例如:如果在比特率1中 - GOP大小像10,20,48等,在其他比特率中它不是在相同的序列中。我希望我的问题有道理。

有没有办法确保GOP大小可能在单个输出中变化。但是如果源相同,它应该在每个比特率上保持一致吗?

对于自适应流媒体,场景检测是否可取?

1 个答案:

答案 0 :(得分:0)

你是正确的1)和2)但你的观点3)你说你正在改变比特率和视频分辨率。事实上,当使用x264进行ABR时,使用相同GOP结构保持所有编码的唯一方法是(3种可能性):

  • 只改变比特率,没关系
  • 使用两步法,使用--pass 1运行编码,以最大分辨率和比特率(我认为......更快)写出统计文件,然后重新使用此统计信息文件通过--pass 3
  • 获得不同的比特率和分辨率
  • 使用--scenecut -1禁用场景剪切检测,并使用固定GOP进行编码。