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, sloopをサポートしてない。
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回目の終了時間を秒で指定すると問題なくループできる

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)