Ffmpegの出力をffplayにパイプするにはどうすればよいですか?
現在、私はbashの回避策を使用しています:
mkfifo spam
(ffplay spam 2> /dev/null &) ; capture /dev/stdout | ffmpeg -i - spam
Stdoutにデータを出力できないffmpeg
か、stdinから入力を取得できないffplay
かはわかりません。
ffmpeg
の場合、データをstdoutに出力できません。
_capture /dev/stdout | ffmpeg -i - >(ffplay 2> /dev/null)
_
(移行するには、ffplay
に_-
_引数を追加して、入力をstdinから取得する必要があります。)
Stdinから入力を取得できないffplay
の場合:
_ffplay <(capture /dev/stdout | ffmpeg -i -) 2> /dev/null
_
<(command)
および>(command)
構文の詳細については、bashマニュアルのProcess Substitutionセクションを参照してください。
ffmpeg -i input.avi <options> -f matroska - | ffplay -
動作します;出力のコンテナ形式を設定する必要があります。これは通常、ffmpegで出力に指定した拡張子を見て設定されますが、ここでは-f
を使用して手動で設定する必要があります。私はmatroska(MKV)をお勧めします。これは、ほとんどすべてのビデオを含むことができるため、トランスコードするものは何でも完全に機能するはずだからです。
Ubuntu 12.04を使用している場合、ffmpegはlibavフォークに置き換えられています。代わりにavconv
およびavplay
を使用する必要があります。それ以外の構文は同じです。そこにはある種のffmpegがありますが、それは設計上不自由です。
ffmpegはパイピング操作をサポートします。ドキュメントのそのセクションを参照してください here 。
Ffplayの動作はわかりませんが、ffmpegの出力を標準出力にパイプ処理するには、ffmpegコマンドの最後にパイプコマンドを追加します。例:
ffmpeg -i input.flv pipe:1 | ffplay -i -
通常のパイプが機能するように見えます(少なくともWindowsでは):
ffmpeg -i sintel.mpg -pix_fmt yuv420p -f rawvideo - | ffplay -f rawvideo -pix_fmt yuv420p -s 720x480 -
より複雑な入力/出力でそれを試していません...
ffmpeg -f dshow -i video=screen-capture-recorder -pix_fmt yuv420p -f mpegts - | ffplay -analyzeduration 10 -f mpegts -
起動がわずかに速い