ffmpeg で外部字幕付きのビデオ出力時間を強制する

ffmpeg で外部字幕付きのビデオ出力時間を強制する

次のコマンドを使用して、ビデオ ファイルの先頭から 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 が字幕ファイルを解析する方法により、次の 2 つのオプションが利用できます。

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 秒間続きます。

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

これにより、目的のビデオ セグメントに対応するサブが抽出され、それがビデオと多重化されます。

関連情報