it-mure.jp.net

FFMpegを使用してビデオを2分のクリップにカットする

私は5つの2分のセグメントにカットしたい10分間続くビデオを持っています。

Ffmpegを使用して、次の方法でビデオを特定の時間にカットできます。

ffmpeg -sameq -ss [start_seconds] -t [duration_seconds] -i [input_file] [outputfile]

最初にビデオの長さを取得してから上記のコマンドを繰り返す必要がありますか、それともこれを行うためのより簡単な方法がありますか?

5
DocWiki
ffmpeg -i input.mp4 -map 0 -c copy -f segment -segment_time 120 -reset_timestamps 1 out%02d.mp4

... 'out01.mp4' out02.mp4 'の行に沿ってファイルを作成します。各ファイルの長さは120秒です(最後のファイルは短い場合があります)。キーフレーム上でファイルを分割する必要があるため、100%正確な分割が得られないことに注意してください。 セグメントドキュメント を参照してください。

再エンコードする場合は、-force_key_framesを使用して正確な分割を行うことができます。 120秒ごとにキーフレームを強制し、セグメントを使用して分割するには:

ffmpeg -i input.mp4 -map 0 -c:v libx264 -preset veryfast -crf 22 -c:a libfdk_aac -vbr 3 \
-force_key_frames expr:gte(t,n_forced*120) -f segment -segment_time 120 -reset_timestamps 1 out%02d.mp4

または、-gを使用してGOPサイズを設定することもできます。これには、ビデオのフレームレートを知っている必要があります。ビデオのフレームレートが25fpsの場合、GOPが120 * 25 = 3000の場合、2分ごとに1つのキーフレームが取得されます。明らかに、これは少なすぎます! 300に減らすとより合理的であり、必要な場所にキーフレームが表示されます。

ffmpeg -i input.mp4 -map 0 -c:v libx264 -preset veryfast -crf 22 -c:a libfdk_aac -vbr 3 \
-g 300 -f segment -segment_time 120 -reset_timestamps 1 out%02d.mp4

あなたのバージョンのffmpegがサポートする特定のコーデックは私のものとは異なるかもしれません(ソースからコンパイルしない限りlibfdk_aacはありません)。

9
evilsoup
i=-120
infile=<inputfile>
while [[ "$?" == "0" ]]; do \
    ((i+=120)) \
    ffmpeg -ss $i -t 120 -i $infile ${infile/.mpg/.$((i/120)).mpg} \
done
1
blahdiblah