今までは-loop 1で画像の無限入力はできていたが、これからは音声や映像も無限に入力できるようになった。
公式ドキュメント:Main options : ffmpeg Documentation
FFMPEG: Why does the concat filter cause loss of a/v sync/lipsync? – Video Production Stack Exchange、FFmpeg concat video and audio out of sync – Stack Overflowより、-fflags +genptsを追加した。ループするファイルの入力オプションとして使う。1つの入力にフィルタでループなどして時間が長くなるなら出力オプションで使う。
基本コマンド
-1で無限ループ。600秒でカットする。
ffmpeg -stream_loop -1 -fflags +genpts -i input -t 600 -c copy output
3回繰り返す。
ffmpeg -stream_loop 3 -fflags +genpts -i input -c copy output
制限
上のコマンドでループを指定できるがいくつか制限がある。
- 2入力をループしてマルチトラックなら可能だが、後ろにつなげる場合はループできない
concat
で取り込んでも複数ファイルのループには対応していない- ループしたものをフィルタに取り込んでも1回だけで2回以上ループして取り込めない
- 音声だけの場合は指定秒でカットできるが、映像は必ずn回の最初から最後までを出力する
用途
メイン映像のBGMに使う。但し1つの音源のみ。複数音源は予め連結しておかなければならない。
ffmpeg -i movie -stream_loop -1 -fflags +genpts -i audio -filter_complex [0:v][1:a]amix output
2つの音声を連結する。連結する数だけ n の値を増やす。
ffmpeg -i audio1 -i audio2 -filter_complex "concat=n=2:v=0:a=1" -vn -fflags +genpts output
2つの映像と音声を連結する。v=1:a=1の値は出力数。
ffmpeg -i input1 -i input2 -filter_complex "concat=n=2:v=1:a=1" -fflags +genpts output
動く映像を右下に配置する。
ffmpeg -i movie -stream_loop -1 -fflags +genpts -i bgv -filter_complex overlay=W-w:H-h output
オーバーレイする映像をクロマキー処理(緑背景)して透過させる。
ffmpeg -i movie -stream_loop -1 -fflags +genpts -i bgv -filter_complex [1:0]chromakey=green:.03:.1[bgv];[0:0][bgv]overlay=W-w:H-h output
genptsってどんな効果があるんですか?
音ズレ対策?
https://ffmpeg.org/ffmpeg-formats.html#Format-Options
‘genpts’
Generate missing PTS if DTS is present.
おそらく2ループ目以降は動画のptsがないのでそれを振り直す
意味ではないかと
https://m.youtube.com/watch?v=TR9XYJNlLIw
このような動画を作るにはどうすればよいでしょうか。
映像を複数並べるならxstackフィルタで座標を指定します。
https://nico-lab.net/xstack_with_ffmpeg/
トランジションはxfadeが便利です。
https://nico-lab.net/xfade_with_ffmpeg/
ありがとうございます
色々試してみます
xfadeは知らなかったです
[…] FFmpeg で無限入力が可能に | ニコラボ […]
[…] FFmpeg で無限入力が可能に | ニコラボ […]