ムービーファイルの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
呼び出し時にバックティックを使用することを忘れました。または、より良い方法は$( )
subshellです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