「-movflags frag_keyframe+empty_moov」標誌是什麼意思?

「-movflags frag_keyframe+empty_moov」標誌是什麼意思?

當我使用 FFMPEG 編碼視訊時-movflags frag_keyframe+empty_moov- 我在網路上的某個地方找到了它 - 它允許我獲取 mp4 視訊串流(如果沒有它,Could not write header for output file #0 (incorrect codec parameters ?)如果我想在某個地方流輸出,我會收到錯誤,但如果我傳遞輸出檔名,它會out.mp4起作用範例)。我問這個問題是因為這個標誌也會以某種方式乾擾我的視頻,並且我無法將其上傳到 Twitter,例如使用這個標誌時(如果沒有它,Twitter 會接受我的視頻)。所以它搞亂了編碼/格式或其他東西......有什麼解決方法嗎?

答案1

正如這裡所述:https://stackoverflow.com/questions/8616855/how-to-output-fragmented-mp4-with-ffmpeg

  • frag_keyframe 導致碎片輸出,
  • empty_moov將導致輸出100%碎片化;如果沒有這個,第一個片段將被混合為短片(使用 moov),然後是片段中的其餘媒體

從 FFmpeg 文件中您可以解釋什麼是碎片:https://www.ffmpeg.org/ffmpeg-formats.html#mov_002c-mp4_002c-ismv

通常,MOV/MP4 檔案會將所有資料包的所有元資料儲存在一個位置(寫在檔案末尾,可以透過將 faststart 新增至 movflags 或使用 qt-faststart 將其移至開頭以便更好地播放)工具)。分片檔案由許多片段組成,其中資料包和有關這些資料包的元資料儲存在一起。寫入碎片檔案的優點是,即使寫入中斷,檔案也可以解碼(而普通的MOV/MP4 如果未正確完成,則無法解碼),並且在寫入很長的檔案時需要較少的記憶體(因為寫入正常的MOV /MP4 檔案將有關記憶體中每個資料包的資訊儲存到檔案關閉為止)。缺點是與其他應用程式的相容性較差。

答案2

試著使用這個代替:

-movflags faststart

相關內容