select
  • audio
  • filter
  • ffmpeg
  • synchronization
  • 2016-08-24 43 views 0 likes 
    0

    我試圖播放/使用ffplay跳過視頻的某些片段。我的第一個跳過的方法說幀100至400是:ffplay使用選擇過濾器時保持視頻/音頻同步

    ffplay -vf "select='lte(n\,100)+gte(n\,400)'" -i INPUT 
    

    此跳過所需的幀,但是它也凍結了跳幀時視頻。我試圖通過修改視頻顯示時間標記(PTS)與setpts選項來解決這個問題:

    ffplay -vf "select='lte(n\,100)+gte(n\,400)',setpts='PREV_OUTPTS'" -i INPUT 
    

    這似乎工作(劇照凍結了一下,猜測是因爲緩衝),但現在的音頻出同步。我試過應用選擇濾波器和音頻修改PTS以及

    ffplay -vf "select='lte(n\,100)+gte(n\,400)',setpts='PREV_OUTPTS'" -af "aselect='lte(n\,100)+gte(n\,400)',asetpts='PREV_OUTPTS'" -i INPUT 
    

    此跳過某些音頻幀,但仍然不同步。我試着用類似結果的aresample = async = 10000選項。將某些/所有過濾器移至輸出(將它們放在-i INPUT之後)也不起作用。

    有人知道如何使用ffplay跳過部分視頻嗎?非常感謝

    回答

    1

    音頻幀編號!=視頻幀編號。 FFmpeg編碼器產生的AAC音頻爲每幀1024個採樣,因此48kHz流的音頻幀數爲48000/1024 = 46.875。其他編解碼器可能有不同的費率。

    使用t而不是n,並生成連續的一系列時間戳。

    ffplay 
    -vf "select='lte(t\,4)+gte(t\,16)',setpts=N/FRAME_RATE/TB" 
    -af "aselect='lte(t\,4)+gte(t\,16)',asetpts=N/SR/TB" 
    -i INPUT 
    

    我假設視頻幀速率爲25 fps。相應地修改。

    +0

    謝謝!你是一個絕對的天才。這個幀是精確的還是它選擇最近的關鍵幀? – arrietaeguren

    +0

    框架精確。過濾器在完全解碼的幀上工作,所以沒有關鍵幀。 – Mulvya

    相關問題