それFFmpegで出来るよ! の続きです。
久しぶりに記事を更新したら、Googleの検索順位が変動したので、更新分をこちらへ一時的に移動してみることにしました。
ケース8~10はこちらに書きます。
#ケース8:動画を連結したい
動画同士を連結したいときもFFmpegなら比較的簡単!
まずは連結したい動画のリストを作る
input01.mp4
とinput02.mp4
とinput03.mp4
を連結したいときは以下のように inputs.txt
に書く
file './input01.mp4'
file './input02.mp4'
file './input03.mp4'
inputs.txt
を作成して、次のコマンドを実行すると、複数の動画が連結される。
ffmpeg -f concat -safe 0 -i inputs.txt -c copy output.mp4
-safe 0
のオプションをつけているので、動画リストのファイルパスは絶対パスでも相対パスでも良い。
連結したい動画のコーディック(h.264やvp9など)がすべて同じなら -c copy
オプションをつけることで、 高速・無変換・無劣化 で連結できる。
連結する動画がたくさんあるならこのやり方でも手間はかからないが、 動画A+動画B=動画Cみたいに、2つの動画をつなげたいときに、inputs.txt
を作成するのは手間
そんなときは以下のコマンド、-filter_complexs
を使って結合する
ffmpeg -i input01.mp4 -i input02.mp4 \
-filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0]concat=n=2:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" output.mp4
※ -filter_complex
の詳細は長くなるので、ここでは割愛する
拡張子・コーディックが違くても大丈夫
ffmpeg -i input01.mp4 -i input02.webm \
-filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0]concat=n=2:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" output.mov
ただし、動画を連結する際、気をつけないと行けないのは、異なるサイズの動画は上記の方法では連結できない...
例えば、 「解像度640x480
の動画」と「解像度1920x1080
の動画」を結合することはできない。もし結合したい場合、どちらかの解像度に ケース6:動画をリサイズする を参考に、解像度を変換してから結合する。
#ケース9:動画をクロップ(トリミング)したい
画像でよくするトリミングもFFmpegならコマンドだけできる!
基本的なコマンドは次の通り
ffmpeg -i input.mp4 -vf crop={X size}:{Y size}:{X position}:{Y position} output.mp4
切り出す基準となる原点と、そこから切り出す動画の解像度を指定する
X size
: 切り出す横幅ピクセル数
Y size
: 切り出す横幅ピクセル数
X position
: 切り出すX座標原点
Y position
: 切り出すY座標原点
例を挙げると次のように指定する
ffmpeg -i input.mp4 -vf crop=1280:720:50:75 output.mp4
難点なのは、絵を見ながら切り抜けないところではあるが、
半分の大きさや1/4の大きさを切り出すといったときには、とても便利
参考: https://w.atwiki.jp/kobapan/pages/173.html
ケース10:動画の特定の時間範囲を取り出したい
執筆中
編集後記
一つの記事に情報量を詰め込むのはあまり良くないんですかね...