フィルタのfifoと、マルチプレクサのfifoの使い方。fifoは複数のストリームを同時出力で処理速度の差が出るようなときにつける。

基本コマンド

最初は普通再生で次に逆再生をつなげる。試すなら動画時間の短いファイルを使う。
ffmpeg -i input -filter_complex "[0:v]reverse,fifo[r];[0:a]areverse,afifo[ar];[0:v][0:a][r][ar]concat=n=2:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" output

映像と音声を逆再生にエンコードする

tee内にfifoを使うのは主にネットワーク越しとローカルに保存するときに、ネットワークの調子がよくなくてローカル保存も一緒に止まらないように異なる処理を行うのに使う。
ffmpeg -i input -c:v libx264 -c:a aac -ar 44100 -ab 128k -map 0:v -map 0:a -f tee "[use_fifo=1:f=fifo:fifo_format=flv:drop_pkts_on_overflow=1:attempt_recovery=1:recovery_wait_time=1]rtmp://example.com:1935/publicorigin/key|out.flv"

FFMPEG: How to stream to multiple outputs with the same encoding independently – Stack Overflow

テスト放送用サンプルコマンド。udpストリームをffplayで開くと配信画面との遅延を見比べることができる。
ffmpeg -f lavfi -re -i testsrc2=s=1280x720:r=30 -f lavfi -re -i sine=440:0:44100 -c:v libx264 -c:a aac -ar 44100 -ab 128k -map 0:v -map 1:a -f tee "[use_fifo=1:f=fifo:fifo_format=flv:drop_pkts_on_overflow=1:attempt_recovery=1:recovery_wait_time=1]rtmp://example.com:1935/publicorigin/key|out.flv|[f=mpegts]udp://localhost:8080"
ffplay udp://localhost:8080

公式ドキュメント:FFmpeg Formats Documentation : fifo

オプション

  • fifo_format[string]
    フォーマットの指定。拡張子のない出力先ならつける。つけなければ出力内容から自動判断される
  • queue_size[int]
    キューのパケットサイズの指定
    既定値:60
    範囲:1 から INT_MAX まで
  • format_opts[string]
    コンテナフォーマットのオプション指定。key=value 形式で指定する。複数つなげるには : をつける
  • drop_pkts_on_overflow[boolean]
    キューが満杯になったらドロップさせるかどうかの指定。ライブ配信などでキューが満杯になったときにドロップさせて遅延が発生するのを回避する
    既定値:0
  • restart_with_keyframe[boolean]
    キューからあふれたときや失敗したときから再開した後にキーフレームが来るのを待つかどうかの指定
    既定値:0
  • attempt_recovery[boolean]
    出力に失敗したときに再開を試すかどうかの指定。これは特にネットワーク越しの出力でエラーが返ったときに便利
    既定値:0
  • max_recovery_attempts[int]
    再開を試す回数。0は無制限
    既定値:0
    範囲:0 から INT_MAX まで
  • recovery_wait_time[duration]
    何秒間隔で再開を試すかの指定
    既定値:5
  • recovery_wait_streamtime[boolean]
    配信時間を元に再開を試すかどうかの指定。0 ならば recovery_wait_time で指定したとおりの間隔で試す。1 ならば配信している動画の時間を元に再開を試し、ドロップしたときには再開時間の間隔が狭くなる
    既定値:0
  • recover_any_error[boolean]
    エラーに関係なく再開を試す。ただし 0 のときは attempt_recovery 1 を指定していても永久的に出るエラーには再開を試さない
    既定値:0

コメントを残す

メールアドレスが公開されることはありません。

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