FFMPEG / x264:單通道:如何提高開始時間位元率?

FFMPEG / x264:單通道:如何提高開始時間位元率?

當使用指定 VBV 大小的單通道模式時,libx264 最初會「沙袋」位元率,大概是由於缺乏證據(甚至可能是錯誤)。 (這是這個問題的一個具有諷刺意味的後續問題,該問題使用單通道編碼處理過高的初始位元率無字體VBV規範

請參閱底部的比特率圖以獲取更多資訊:注意原始的下降,然後是標準化之前的過度校正(“嘿,我還剩下一些位元!”)。請注意,這在兩次通過的解決方案中都得到了糾正。這兩張圖中缺少初始 I 幀可能是一個工具錯誤(初始 I 幀的 PTS 值為 0.15 秒)。

此效果可防止對長資產進行「拆分、編碼和重新組裝」並行處理,因為您將在每個片段的開頭獲得品質節拍。

這可以透過雙通道編碼來解決,這對於直播串流來說是一種不可接受的解決方案(儘管,如果並行化,人們可以支付雙通道編碼的成本)。

我希望有兩個解決方案:非常歡迎任何幫助。

  1. 單通道解決方案,其中編碼器被告知在生成輸出之前最初保存更多幀,從而減少初始沙袋效應

  2. 一種將有限的兩遍編碼作為“管道”執行的方法:將完整的兩遍編碼作為管道當然是沒有意義的,但是應該可以有“微遍”,其中遍反饋週期類似於一個第二。對於解決如此短的影響,這比單遍解決方案不太理想,但如果 (1) 不可能,則可以接受。

    • 單通道位元率圖:注意最初的「沙袋傾角」。生成方式:

ffmpeg -i 1080-60fps.mp4 -vf "scale=1200:720" -b:v 1000k -bufsize 1000k onepass.mp4

在此輸入影像描述

  • 兩次通過比特率圖:這是近乎理想的結果。請注意,這個最終形式不一定是必要的:避免最初的沙袋就足夠了。生成方式:

ffmpeg -i 1080-60fps.mp4 -vf "scale=1200:720" -b:v 1000k -pass 1 -f mp4 /dev/null

ffmpeg -i 1080-60fps.mp4 -vf "scale=1200:720" -b:v 1000k -pass 2 Twopass.mp4

兩次通過比特率圖:這是預期結果

  • 單通道編碼中第一幀的部分

在此輸入影像描述

  • 兩次編碼中第一幀的部分

在此輸入影像描述

相關內容