是否可以在任何地方剪切 h.264 流而無需重新編碼?

是否可以在任何地方剪切 h.264 流而無需重新編碼?

注意:我最初錯誤地用 MP4 文件這一更常見的說法來引用 h.264 流,抱歉


我知道通常需要在關鍵影格上開始分割 h.264,以便結果影片以關鍵影格開始,但我想知道流結構/規範是什麼導致了這種情況?

作為整個檔案的固定參數,關鍵影格必須每 X 幀出現一次,還是關鍵影格之間可以有變化的間隔?如果玩家只是在出現影格時獲取影格並繪製整個事物(關鍵影格)或更新其中的一部分(非關鍵影格),那麼為什麼關鍵影格間隔很重要?

如果間隔無關緊要,並且我們想要在每 100 個關鍵幀流的第 87 幀進行剪切,我們是否可以不使用 86 個前導幀來計算新文件的新關鍵幀,將剩餘的 12 個非原始文件中的關鍵幀讓我們到達下一個關鍵幀,然後下一個原始關鍵幀(第100 幀)從那裡開始?

即檔案以「新密鑰、12 個原始非密鑰、原始密鑰、99 個原始非密鑰、原始密鑰 ..」結尾

答案1

關鍵影格可以隨時出現,我找不到引用,但我想像一下在一部有很多過場動畫的電影中。您希望關鍵幀成為任何劇烈場景更改後的第一幀,以保持視頻質量,否則當視頻壓縮器嘗試使用大量“增量”更改創建新場景時,您最終會遇到噪音風暴從上一個場景。

對於普通串流,具有一致的關鍵幀定時可能是可接受的,但對於最終內容,透過在場景變化邊界處設定關鍵影格將實現更好的品質。

關鍵影格、幀間和視訊壓縮

關鍵影格(i 幀)是影片中影像的完整影格。後續幀(增量幀)僅包含已變更的資訊。關鍵影格將在流中出現多次,取決於它的創建方式或串流方式。

它的確是可調節,取決於您對品質和位元率的要求

mp4 的預設值是每 250 幀一個關鍵幀(大約每 10 秒一次)。這對於串流媒體來說是不利的,因為更改解析度更困難。YouTube 使用 2 秒的關鍵影格間隔

還有一些方法可以只提取 iframe(關鍵影格),如所提到的BogoToBogo:縮圖(IFRAME / 場景更改)- 2020

i 影格縮圖

以下命令將為每個 I 幀建立一個縮圖,名為 yi01.png、yi02.jpg、yi03.png...yi116

ffmpeg -i yosemiteA.mp4 -f image2 -vf "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr yi%03d.png
  1. select='eq(pict_type,PICT_TYPE_I)':提取I幀影像
  2. vsync:視訊同步方法。
  3. vfr:可變幀速率。

相關內容