web-dev-qa-db-ja.com

ffmpegの出力をffplayにパイプするにはどうすればよいですか?

Ffmpegの出力をffplayにパイプするにはどうすればよいですか?

現在、私はbashの回避策を使用しています:

mkfifo spam
(ffplay spam 2> /dev/null &) ; capture /dev/stdout | ffmpeg -i - spam
24
wim

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セクションを参照してください。

20
jfg956
ffmpeg -i input.avi <options> -f matroska - | ffplay -

動作します;出力のコンテナ形式を設定する必要があります。これは通常、ffmpegで出力に指定した拡張子を見て設定されますが、ここでは-fを使用して手動で設定する必要があります。私はmatroska(MKV)をお勧めします。これは、ほとんどすべてのビデオを含むことができるため、トランスコードするものは何でも完全に機能するはずだからです。

Ubuntu 12.04を使用している場合、ffmpegはlibavフォークに置き換えられています。代わりにavconvおよびavplayを使用する必要があります。それ以外の構文は同じです。そこにはある種のffmpegがありますが、それは設計上不自由です。

19
evilsoup

ffmpegはパイピング操作をサポートします。ドキュメントのそのセクションを参照してください here

Ffplayの動作はわかりませんが、ffmpegの出力を標準出力にパイプ処理するには、ffmpegコマンドの最後にパイプコマンドを追加します。例:

ffmpeg -i input.flv pipe:1 | ffplay -i -
11
matzahboy

通常のパイプが機能するように見えます(少なくとも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 -

起動がわずかに速い

9
rogerdpack