我想使用 ffmpeg 來剪切視訊以進行機器學習。
我如何確保如果我以 25fps 剪切(例如)1 秒的視頻,這將提供恰好 25 幀的同步音頻和視頻?
我已經看到 ffmpeg 在剪切時尋找關鍵幀,選擇最近的一個。我遇到了麻煩,因為它生成負時間戳並用複製的幀填充剪切視頻的末尾。
據我所知,元數據不顯示真實的 fps 等。
那麼,透過與音訊串流對齊的確切數量的幀來獲得精確剪輯的管道是什麼?
謝克斯
答案1
根據影片的編解碼器和容器,這可能需要一些違反直覺的步驟:許多編解碼器根本不直接允許隨機入點和出點。
- 首先,您需要剪切視訊(暫時忽略音訊),最好使用
-ss inpoint
並-pix_fmt yuv420p -an -f yuv4mpegpipe -frames:v 25
管道到x264
ffmpeg 的任一或另一個實例中來完成。事實證明,這是一種以幀精確方式剪切視訊串流的可靠方法。 - 對於音頻,最簡單的方法是轉換為
-c:a pcm_s16le
“-f s16le”,然後在檔案層級操作結果以包含來自正確偏移量的正確位元組數。 - 如果需要,最後
ffmpeg
一次可以壓縮音頻,或者只是將其混合到視頻中。由於原始 PCM 不包含時間戳,因此不存在非同步的可能性。
事實證明,這是一種可靠的方法,可以將來自可疑來源的影片(即來自某些廣告商的商業剪輯)放入高度監管的線性串流(即電視頻道)中,而不會引入任何人工製品。