このように映像を10分程度に切りたいです。
ffmpeg -i video.mp4 -ss 00:00:00 -t 00:10:00 -c copy 01.mp4
ffmpeg -i video.mp4 -ss 00:10:00 -t 00:10:00 -c copy 02.mp4
ffmpeg -i video.mp4 -ss 00:20:00 -t 00:10:00 -c copy 03.mp4
それではfor
そうなります。
for i in `seq 10`; do ffmpeg -i video.mp4 -ss 00:${i}0:00 -t 00:10:00 -c copy ${i].mp4; done;
ただし、持続時間が1時間未満の場合にのみ機能します。 bashシェルで数値を時間形式に変換するには?
ベストアンサー1
BASHはこの問題に悪くはありません。非常に強力ですが、使用率の低いコマンドを使用する必要がありますdate
。
for i in {1..10}; do
hrmin=$(date -u -d@$(($i * 10 * 60)) +"%H:%M")
outfile=${hrmin/:/-}.mp4
ffmpeg -i video.mp4 -ss ${hrmin}:00 -t 00:10:00 -c copy ${outfile}
done
date
命令の説明
date
-d
設定できるフラグ付きどの表示する日付(デフォルトの現在の日付と時刻の代わりに)。この例では、@
整数の前に記号を追加してUNIX時間に設定しました。この例の整数は10分あたりの時間です(BASHに組み込まれた計算機で計算:)$((...))
。
この+
記号は、date
結果が表示される形式を指定したいことを示します。私たちの場合、時間(%H
)と分()にのみ興味があります%M
。
最後に、-u
現地時間ではなくUTC時間が表示されます。この場合、UNIX時間を指定したときに時間をUTCとして指定したため、これは重要です(UNIX時間は常にUTCです)。 1つを指定しないと、数字が0から始まらない可能性があります-u
。
BASH変数の代替説明
このdate
コマンドは私たちに必要なものを提供します。ただし、ファイル名のコロンは問題があるか、標準ではない可能性があります。したがって、「:」を「-」に置き換えます。これはsed
orcut
コマンドを使用して行うことができますが、tr
これは非常に簡単な作業なので、BASHで行うことができますが、なぜ新しいサブシェルを作成するのですか?
ここでは、BASHの単純な式の置き換えを使用します。これを行うには、変数を中括弧(${hrmin}
)で囲み、標準のスラッシュ表記に従う必要があります。最初のスラッシュの後の最初の文字列は検索パターンです。 2番目のスラッシュの後の2番目の文字列は代替文字列です。
BASH変数の置換などは以下にあります。http://tldp.org/LDP/abs/html/parameter-substitution.html。