将 VLC 输出通过管道传输到 ffplay?

将 VLC 输出通过管道传输到 ffplay?

我有一台(坏了的)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问题

相关内容