今までは-loop 1で画像の無限入力はできていたが、これからは音声や映像も無限に入力できるようになった。
公式ドキュメント:Main options : ffmpeg Documentation
mp4 – Repeat/loop Input Video with ffmpeg? – Video Production Stack Exchangeより、-fflags +genptsを追加した。
基本コマンド
-1で無限ループ。600秒でカットする。
ffmpeg -stream_loop -1 -i input -t 600 -c copy -fflags +genpts output
3回繰り返す。
ffmpeg -stream_loop 3 -i input -c copy -fflags +genpts output
制限
上のコマンドでループを指定できるがいくつか制限がある。
- 2入力をループしてマルチトラックなら可能だが、後ろにつなげる場合はループできない
concat
で取り込んでも複数ファイルのループには対応していない- ループしたものをフィルタに取り込んでも1回だけで2回以上ループして取り込めない
- 音声だけの場合は指定秒でカットできるが、映像は必ずn回の最初から最後までを出力する
用途
メイン映像のBGMに使う。但し1つの音源のみ。複数音源は予め連結しておかなければならない。
ffmpeg -i movie -stream_loop -1 -i audio -filter_complex [0:v][1:a]amix -fflags +genpts 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 -i bgv -filter_complex overlay=W-w:H-h -fflags +genpts output
オーバーレイする映像をクロマキー処理(緑背景)して透過させる。
ffmpeg -i movie -stream_loop -1 -i bgv -filter_complex [1:0]chromakey=green:.03:.1[bgv];[0:0][bgv]overlay=W-w:H-h -fflags +genpts output
genptsってどんな効果があるんですか?
音ズレ対策?
https://ffmpeg.org/ffmpeg-formats.html#Format-Options
‘genpts’
Generate missing PTS if DTS is present.
おそらく2ループ目以降は動画のptsがないのでそれを振り直す
意味ではないかと