ffmpegを使用してビデオファイルを複数のセグメントに分割する

ffmpegを使用してビデオファイルを複数のセグメントに分割する

ムービーファイルの2分から4分までの2分を抽出するには、次のコマンドを使用します。

ffmpeg -i input.mpg -sameq -ss 00:02:00 -t 00:02:00 output.mpg

映像を2分単位で分けたいです。 Bashスクリプトを使用するアイデアがありますが、いくつかのエラーがあります。

for i in seq 50;
do ffmpeg -i input.mpg -sameq -ss 00:`expr $i \* 2 - 2`:00 -t 00:02:00 output.mpg; done

式を使って私のスクリプトのエラーを修正する方法を知っていますか$i?それとも、より良い解決策がありますか?

答え1

呼び出し時にバックティックを使用することを忘れました。または、より良い方法は$( )subshel​​lですseq。これは働きます:

for i in $( seq 50 );
do ffmpeg -i input.mpg -sameq -ss 00:`expr $i \* 2 - 2`:00 -t 00:02:00 output.mpg; done

output.mpgもう一つのことは、実行するたびに上書きしたくないことです。そうですか? :)$iファイル名の出力にも使用できます。

$(( ))さらに:bashではorの$[ ]代わりに使用できますexpr。 (私の考えでは)もっときれいに見えます。また必要ありませんseq。中かっこ拡張だけでシーケンスを取得できます。例は次のとおりです。

for i in {1..50}
 do ffmpeg -i input.mpg -sameq -ss 00:$[ i* 2 - 2 ]:00 -t 00:02:00 output_$i.mpg
done

中かっこの他の利点は、名前の前にゼロを含めることができることです(将来のファイルのソートに非常に便利です)。

for i in {01..50}
 do ffmpeg -i input.mpg -sameq -ss 00:$[ i* 2 - 2 ]:00 -t 00:02:00 output_$i.mpg
done

また、範囲のみを変更する必要がある場合は、次のi*2 - 2ように簡単に簡素化できます。i*2

for i in {00..49}
 do ffmpeg -i input.mpg -sameq -ss 00:$[ i*2 ]:00 -t 00:02:00 output_$i.mpg
done

関連情報