如何将 ffmpeg 的输出通过管道传输到 ffplay?
目前我在 bash 中使用了一种解决方法:
mkfifo spam
(ffplay spam 2> /dev/null &) ; capture /dev/stdout | ffmpeg -i - spam
Run Code Online (Sandbox Code Playgroud)
evi*_*oup 32
ffmpeg -i input.avi <options> -f matroska - | ffplay -
Run Code Online (Sandbox Code Playgroud)
将工作; 您需要为输出设置容器格式。这通常是使用 ffmpeg 设置的,查看您提供输出的扩展名,但在这里您必须使用-f. 我推荐 matroska (MKV),因为它几乎可以包含任何视频,所以无论你将它转码成什么,都应该能很好地工作。
请注意,如果您使用的是 Ubuntu 12.04,则 ffmpeg 已被 libav fork 取代,您应该使用avconvandavplay代替;否则语法相同。那里有一种 ffmpeg,但它被设计残废了。
jfg*_*956 21
我不知道是ffmpeg无法将数据输出到标准输出,还是ffplay无法从标准输入获取输入。
如果是ffmpeg不能将其数据输出到标准输出:
capture /dev/stdout | ffmpeg -i - >(ffplay 2> /dev/null)
Run Code Online (Sandbox Code Playgroud)
(您可能需要添加一个-参数,ffplay以便它从标准输入获取输入。)
如果它ffplay不能从标准输入中获取输入:
ffplay <(capture /dev/stdout | ffmpeg -i -) 2> /dev/null
Run Code Online (Sandbox Code Playgroud)
有关<(command)和>(command)构造的更多信息,请参阅bash 手册的进程替换部分。
mat*_*boy 13
ffmpeg 支持管道操作。请参阅此处的文档部分。
我不知道 ffplay 是如何工作的,但是要将 ffmpeg 的输出通过管道传输到标准输出,您可以将管道命令添加到 ffmpeg 命令的末尾。例子:
ffmpeg -i input.flv pipe:1 | ffplay -i -
Run Code Online (Sandbox Code Playgroud)
rog*_*ack 11
看起来像正常的管道工作(至少在 Windows 中):
ffmpeg -i sintel.mpg -pix_fmt yuv420p -f rawvideo - | ffplay -f rawvideo -pix_fmt yuv420p -s 720x480 -
Run Code Online (Sandbox Code Playgroud)
虽然还没有尝试过更复杂的输入/输出......
ffmpeg -f dshow -i video=screen-capture-recorder -pix_fmt yuv420p -f mpegts - | ffplay -analyzeduration 10 -f mpegts -
Run Code Online (Sandbox Code Playgroud)
启动稍快
| 归档时间: |
|
| 查看次数: |
122475 次 |
| 最近记录: |