我有一台(坏了的)PC,其中 VLC 仅在屏幕的左半部分播放视频,这似乎与 OpenGL /驱动程序有关(请参阅这里)。另一方面,ffplay
没有半窗口的问题,但只能打开一些我想要播放的视频。
因此,类似于如何将 ffmpeg 的输出传送到 ffplay?,我想到将 VLC 连接到ffplay
;我做到了这一点(我正在使用这个视频):
$ cvlc Rent_an_Ambassador.ogv --sout '#transcode{vcodec=IYUV}:std{access=file,mux=raw,dst=-}' | ffplay -f rawvideo -s 398x224 pipe:-
...
Warning: call to srand(1369860697)
Warning: call to rand()
Blocked: call to unsetenv("DBUS_ACTIVATION_ADDRESS")
Blocked: call to unsetenv("DBUS_ACTIVATION_BUS_TYPE")
[0x98f4b64] dummy interface: using the dummy interface module...
[0x9903254] mux_dummy mux: Open
[rawvideo @ 0x98bf890]Estimating duration from bitrate, this may be inaccurate
Input #0, rawvideo, from 'pipe:-':
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0.0: Video: rawvideo, yuv420p, 398x224, 25 tbr, 25 tbn, 25 tbc
因此,基本上ffplay
它认为 VLCIYUV
应该是yuv420p
,正如我在Libav 用户问题和讨论 - 回复:将图像比例从 4:2:2 调整为 4:2:0
请注意,YUV420P 又名 I420 和 IYUV。
...不幸的是,视频输出全是错误的:
请注意,如果我没有指定的大小ffplay
,则会失败:
picture size invalid (0x0)
Last message repeated 1 times
[rawvideo @ 0x9c6f890]Could not find codec parameters (Video: rawvideo, yuv420p)
[rawvideo @ 0x9c6f890]Estimating duration from bitrate, this may be inaccurate
pipe:-: could not find codec parameters
所以,我的问题是:
- 是否有人知道使用原始视频进行从
vlc
到管道传输的正确命令行?ffplay
- 有没有办法
vlc
像往常一样播放音频,并将其视频输出作为原始视频传输到ffplay
(以避免将视频和音频混合成新格式的开销,ffplay 必须额外进行解复用?)
编辑:这里有一个命令行,它提供了正确的视频和上述测试文件(通过VideoLAN 论坛 • 在 Windows 下将 YUV 数据发送到管道):
cvlc Rent_an_Ambassador.ogv --vout=yuv --yuv-yuv4mpeg2 --yuv-file=/dev/stdout | ffplay pipe:-
然而:
ffplay
当我尝试使用vlc
- 对于第三类视频,
vlc
不会导出 FPS 设置 - 因此ffplay
将启动、显示一帧,然后冻结显示(并且您必须不断滚动鼠标按钮,以便视频窗口刷新)。请注意,您不能强制使用 ffplay 帧速率来适应永恒容器- 并且当做--yuv-file
(而不是--sout
)时--sout-transcode-fps
将不适用(从vlc
事物的角度来看)
答案1
您是否尝试过禁用 VLC 中的硬件视频加速?这可能会解决半屏问题。
是的,我知道这不是要问的问题,但这似乎是一个XY问题。