
我正在從視訊檔案的開頭 30 分鐘開始提取一個 1 分鐘長的片段,並使用以下命令從外部檔案添加字幕:
ffmpeg -ss 1800 -i input_video.m4v -ss 1800 -i input_subtitle.srt -map 1:0 -c:a aac -c:v libx264 -c:s mov_text -crf 35 -preset slow -t 60 -avoid_negative_ts 1 output_video.mp4
我遇到的問題是轉碼影片的持續時間00:01:03.50
不是預期的00:01:00.00
。當使用 VLC 播放此類影片時,播放會在進度條到達末端之前停止。
只有當我刪除字幕輸入時,持續時間才變為正好 1 分鐘。輸出檔案的持續時間似乎已延長,以適應在定義的 1 分鐘範圍內開始的字幕的最後一個短語。
有沒有辦法強制輸出持續時間與-d
標誌中設定的值完全相同?
答案1
由於 ffmpeg 解析字幕檔的方式,有兩個選項可供您使用:
輸出為 MP4,但可能會跳過字幕:
ffmpeg -i input_video.m4v -i input_subtitle.srt -ss 1800 -c:a aac -c:v libx264 -c:s mov_text -crf 35 -preset slow -t 60 output_video.mp4
這應該會產生一個 60 秒的文件,但它將跳過 1800 秒之前開始但超過該時間的任何字幕。
輸出為MKV:
ffmpeg -i input_video.m4v -i input_subtitle.srt -ss 1800 -c:a aac -c:v libx264 -c:s ass -crf 35 -preset slow -t 60 output_video.mkv
這裡,任何在 1800 秒之前開始並延伸超過它的字幕都將出現,並且具有相應的長度,即,如果一個字幕從 1795 開始並在 1802 結束,那麼它將在輸出中持續 2 秒。
兩步法
ffmpeg -i subfile -ss 1800 -t 60 sub.ass
和
ffmpeg -ss 1800 -i video.mp4 -i sub.ass -c:s mov_text out.mp4
這會提取與所需視訊片段相對應的字幕,然後與影片混合。