Answers:
我不知道是ffmpeg
不是无法将其数据输出到stdout,还是ffplay
无法从stdin中获取其输入。
如果是ffmpeg
这样,则无法将其数据输出到stdout:
capture /dev/stdout | ffmpeg -i - >(ffplay 2> /dev/null)
(您需要向migth添加一个-
参数,ffplay
以便它从stdin中获取其输入。)
如果是ffplay
这样,则无法从标准输入中获取其输入:
ffplay <(capture /dev/stdout | ffmpeg -i -) 2> /dev/null
有关<(command)
和>(command)
构造的更多信息,请参见bash手册的“ 过程替换”部分。
ffmpeg -i input.avi <options> -f matroska - | ffplay -
将工作; 您需要为输出设置容器格式。通常使用ffmpeg进行设置,查看输出的扩展名,但是在这里您必须使用手动进行设置-f
。我建议使用Matroska(MKV),因为它几乎可以包含任何视频,因此无论您将其进行代码转换,其效果都很好。
请注意,如果您使用的是Ubuntu 12.04,则ffmpeg已由libav fork代替,而应使用avconv
and avplay
代替;语法相同。那里有一个ffmpeg,但由于设计而受到严重影响。
pipe:: Invalid data found when processing inputK
Power Shell 一样发生错误,但在命令提示符下效果很好
ffmpeg支持管道操作。请参阅此处的文档部分。
我不知道ffplay的工作原理,但是要将ffmpeg的输出通过管道传输到标准输出,可以将pipe命令添加到ffmpeg命令的末尾。例:
ffmpeg -i input.flv pipe:1 | ffplay -i -
man ffplay
,我看不到ffplay
支持该-i
开关-可能ffmpeg
仅仅是?
pipe:1
与-
?-
适用于ffmpeg 2.8.6。
看起来正常的管道工作(至少在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 -
启动稍微快一点
Unable to find a suitable output format for 'pipe:'
-我需要使用指定编解码器-f
。