動画の切り貼りをする時、何もオプションを付けないで実行するとcodec変換にとんでもなく時間がかかるので特に形式等を変えないのであればcopyオプションをつける。
hogehoge.mp4からbegintime からendtimeまで fugafuga.mp4に変えるときには以下のようにする。
ffmpeg -i hogehoge.mp4 -c:v copy -c:a copy -map 0:v -map 0:a -ss begintime -to endtime ./fugafuga.mp4
begintimeやendtimeの計算が面倒であれば、exprを使うと便利。
5分20秒をendtimeとしたければ $(expr 5 \* 60 + 20 ) とすれば計算してくれる。
もしくはh:m:s:ms表示も可。この場合は0:5:20とすればOK。こっちのほうが圧倒的に楽かな。 ちなみにendtimeは動画の頭からの時間ではなく、-ssで指定したbegintimeからの経過時間になるらしい。
追記:ffmpegで動画の切り出しをする際、begintimeを0以外にすると音がずれたりすることがある。その場合は真面目にエンコードさせたほうが良いらしい。ということでその場合は
ffmpeg -ss begintime -i hogehoge.mp4 -to 1:35 fugafuga.mp4
もしToo many packets buffered for output stream 0:1 とか怒られるようなら、次のオプションをつけると良いかも。
ffmpeg -ss begintime -i hogehoge.mp4 -to endtime -max_muxing_queue_size 1024 fugafuga.mp4
次にhoge1.mp4とhoge2.mp4 を一つの動画fuga.mp4にまとめたいときには次のようにする。
ffmpeg -i hoge1.mp4 -i hoge2.mp4 -c copy fuga.mp4
これでしばらくは持つかな。...と思っていたらこれではうまく行かないことが判明。
結合するファイルのリストをテキストで作りconcatを使うらしい。面倒だなと思っていたらワンライナーがあったのでこちらを利用。
ffmpeg -f concat -safe 0 -i <(for f in ./*.wav; do echo "file '$PWD/$f'"; done) -c copy output.wav
中身は適当に書き換えて使う。上の例だとカレントディレクトリ上の全てのwavファイルをoutput.wavに出力する。
0 件のコメント:
コメントを投稿