我正在編寫一個程序,需要能夠將一個非常短的媒體文件放在較長的媒體文件中間。我想為此使用 ffmpeg。我知道您可以將長文件分成兩半,然後將 3 個文件連接在一起(長視頻的前半部分 > 短視頻 > 長視頻的後半部分)。我嘗試使用 concat 過濾器執行此操作,但這需要非常長的時間,因為我們的託管 kubernetes 提供者沒有 GPU 資源的選項。
我意識到,由於第一個和最後一個剪輯始終是完全相同的格式(因為它們是從同一個源文件中分割出來的),所以我可以只轉換中間非常短的剪輯以匹配兩半。然後,所有 3 個剪輯都將採用該格式,我可以簡單地使用 concat remuxer。
這個短剪輯也是由 ffmpeg 透過在音訊剪輯上一遍又一遍地循環相同的單幀而產生的。因此,如果我的想法可行,ffmpeg 只需要對音訊和單一循環幀進行轉碼。比從頭開始轉碼整個長剪輯和短剪輯要好得多。
如何讓 ffmpeg 重新編碼視頻以匹配另一個視頻確切地所以我可以將它們重新混合在一起嗎?
答案1
正如 @Rotem 在評論中所述,您可以使用ffprobe
適當的腳本來分析原始影片的屬性,但這(可能)還不夠。
在任意時間戳正確切割視訊串流而不對整個串流進行轉碼是不可能的(至少對於 ffmpeg 而言),您只能在關鍵幀邊界上執行此操作。因此,您還必須分析關鍵影格的位置並根據該位置選擇剪切時間戳記(請參閱本主題:如何使用 FFmpeg 取得給定時間戳之前最近關鍵影格的時間戳記?)