ffplayで複数ファイルを読み込んだり、ffprobeでフィルタを当てた後のデータを調べるときに使うmovie、amovie入力の設定内容。名前の通り映像と音声なので字幕は読めないが、closed captionの字幕なら読める。
ファイルパス指定にはエスケープに注意する。
ffmpeg | パス指定とエスケープ
ffplay のショートカットキー
基本コマンド
映像だけ読み込む。
ffplay -f lavfi -i movie=input.mp4
音声だけ読み込む。
ffplay -f lavfi -i amovie=input.mp4
映像と音声を読み込む。
ffplay -f lavfi -i movie=input.mp4[out0];amovie=input.mp4[out1] ffplay -f lavfi -i movie=input.mp4:s=dv+da[out0][out1] ffplay -f lavfi -i movie=input.mp4:s=0+1[out0][out1] ffplay -f lavfi -i movie=input.mp4:s=0x0+0x1[out0][out1]
開始20秒から読み込む。
ffplay -f lavfi -i movie=input.mp4:sp=20,setpts=PTS-STARTPTS[out0];amovie=input.mp4:sp=20,asetpts=PTS-STARTPTS[out1]
ffplay -f lavfi -i movie=input.mp4:sp=20:s=0+1[out0][out1];[out0]setpts=PTS-STARTPTS[out0];[out1]asetpts=PTS-STARTPTS[out1]
10秒の映像を10回ループする。
ffplay -f lavfi -i movie=input.mp4:loop=10:discontinuity=10
さらに音声も合わせる。streams, sはloopをサポートしてない。
ffplay -f lavfi -i movie=input.mp4:loop=10:discontinuity=10[out0];amovie=input.mp4:loop=10:discontinuity=10[out1]
フルパスでファイルを読み込む。エクスプローラのパスをコピペして\を/に置換し、ドライブレター前の:は\\でエスケープする。
ffplay -f lavfi -i movie="C\\:/Users/foo/Desktop/video/input.mp4"
dshowデバイスを読み込む。
ffplay -f lavfi -i "movie='video\=SCFF DirectShow Filter':f=dshow"
ffplay -f lavfi -i "amovie='audio\=virtual-audio-capturer':f=dshow"
ffmpeg – ffplay, how to use a dshow device + a filter – Super User
dshowのオプション指定の方法がなかったが2021年11月29日のコミットで指定できるようになった。
ffplay -f lavfi -i "movie='video\=SCFF DirectShow Filter:f=dshow:format_opts=video_size=1280x720\:framerate=60\:rtbufsize=10MB'"
ffplay -f lavfi -i "amovie='audio\=virtual-audio-capturer:f=dshow:format_opts=sample_rate=48000\:channels=1\:audio_buffer_size=10\:probesize=32\:analyzeduration=0'"
公式ドキュメント:FFmpeg Filters Documentation : dshow
video4linux2 デバイスを読み込む。
ffplay -f lavfi -i movie=/dev/video0:f=video4linux2,setpts=PTS-STARTPTS
連番画像を読み込む。フレームレートは 0.75 で 3/4 の逆数の 4/3秒毎に映像が変わる。画像のファイル名は img-1.jpg 形式。エンコーダは h264_qsv。
ffmpeg -f lavfi -r 0.75 -i "movie=img-(%d).jpg,format=yuv420p" -c:v h264_qsv -look_ahead 0 -q 20 -g 1 output.mp4
ネットワーク越しから入力する。
ffplay -f lavfi -i "amovie=https\\://www.xxxx.com/audio.mp3"
シェルで実行するときはエスケープが変わる。
ffplay -f lavfi -i "amovie=https\\\:\/\/www.xxxx.com\/audio.mp3"
How to use https input with ffmpeg “amovie” filter? – Stack Overflow
closed captionを扱う。
ffmpeg -f lavfi -i "movie=1.ts[out0+sub]" -map s output.srt
HowToExtractAndRemoveClosedCaptions – FFmpeg
ffmpegから標準入力する。-ssを使うときに有用。
ffmpeg -ss 10 -i input -t 10 -c copy -an -sn -dn -f nut - | ffprobe -f lavfi -i movie=pipe\\:0,idet -show_entries packet_tags=lavfi.idet.multiple.current_frame -of json > foo.json
ffmpeg – extract subtitles from piped input? – Stack Overflow
公式ドキュメント:FFmpeg Filters Documentation : Multimedia Sources
オプション
- filename
入力ファイル名の指定。ただしファイルだけではなく特定のデバイスやプロトコルも読み込める - format_name, f
入力ファイルのフォーマット指定。無指定なら入力ファイルのコンテナや入力デバイスから類推する - seek_point, sp
シーク時間の指定。秒(ss)形式で指定する。映像があれば直前のキーフレームから読み込む - streams, s
入力ファイルのどのデータを読み込むかの指定。dvなら最初映像、daなら最初の音声。0 開始の数字はトラックの順番に指定。+を付けて映像と音声や、音声2つ以上を読み込むこともできる - stream_index, si
streams, sに似ているが複数入力はできない。トラックの順番を 0 開始の数字で指定 - loop
ループ回数の指定。0 なら無限。1 なら1回になる。2回目以降のタイムスタンプを変更しないのでdiscontinuityを指定するか、別途setpts
フィルタを使う - discontinuity
loopを使うと2回目以降のタイムスタンプが変更されないので、1回目の終了時間を秒で指定すると問題なくループできる