如何使用 ffmpeg 将原始视频通过管道传输到 v4l2loopback?
How to pipe rawvideo to v4l2loopback using ffmpeg?
我正在尝试通过 OpenCV 在 Python 中处理视频,然后将每一帧发送到虚拟相机(即 v4l2loopback)。我看到过询问将 OpenCV 输出传输到 ffmpeg 并保存到文件中的问题,以及使用 ffmpeg 将视频文件传输到 v4l2 的其他问题,但毫无疑问这两者在哪里结合。我可以单独做以上两件事,但不能同时做。
我的 Python 代码使用子进程将每个帧通过管道传输到 ffmpeg。将 OpenCV 的输出通过管道传输到 .mp4 文件的 ffmpeg 命令是
ffmpeg -y -f rawvideo -vcodec rawvideo -s 1280x720 -pix_fmt bgr24 -i - -vcodec libx264 -crf 0 -preset fast output.mp4
这个有效,我已经测试过了。
将视频文件通过管道传输到 v4l2 虚拟摄像机的 ffmpeg 命令是
ffmpeg -re -i input.mp4 -map 0:v -f v4l2 /dev/video0
这也行,我已经测试过了。
我试着结合上面的两个命令,想出了
ffmpeg -y -f rawvideo -vcodec rawvideo -s 1280x720 -pix_fmt bgr24 -i - -vcodec libx264 -crf 0 -preset fast -map 0:v -f v4l2 /dev/video0
但我收到以下错误
[NULL @ 0x55a12fcc60] Unable to find a suitable output format for ''
: Invalid argument
如果有人能帮我解决这个问题,我会很高兴。
谢谢。
我在这里看到两个问题:
Unable to find a suitable output format
错误可能来自您代码中命令中的 quotation/escaping 问题。 运行 来自命令行界面的相同命令正确执行。
修复引用问题后,您将收到另一个错误:V4L2 output device supports only a single raw video stream
。这意味着您不能使用 libx264 输出到 v4l2。所以改为让它自动选择原始视频输出:
ffmpeg -y -f rawvideo -video_size 1280x720 -pixel_format bgr24 -i - -f v4l2 /dev/video0
如果颜色看起来不对,请使用不同的 -pixel_format
值(参见 ffmpeg -pix_fmts
),或者播放器不支持 v4l2 使用的输出像素格式。在这种情况下,添加 -vf format=yuv420p
输出选项(在 -i
之后和 /dev/video0
之前的任何位置)。
更多信息:
- rawvideo demuxer(也
ffmpeg -h demuxer=rawvideo
)
- V4L2 output device
我正在尝试通过 OpenCV 在 Python 中处理视频,然后将每一帧发送到虚拟相机(即 v4l2loopback)。我看到过询问将 OpenCV 输出传输到 ffmpeg 并保存到文件中的问题,以及使用 ffmpeg 将视频文件传输到 v4l2 的其他问题,但毫无疑问这两者在哪里结合。我可以单独做以上两件事,但不能同时做。
我的 Python 代码使用子进程将每个帧通过管道传输到 ffmpeg。将 OpenCV 的输出通过管道传输到 .mp4 文件的 ffmpeg 命令是
ffmpeg -y -f rawvideo -vcodec rawvideo -s 1280x720 -pix_fmt bgr24 -i - -vcodec libx264 -crf 0 -preset fast output.mp4
这个有效,我已经测试过了。
将视频文件通过管道传输到 v4l2 虚拟摄像机的 ffmpeg 命令是
ffmpeg -re -i input.mp4 -map 0:v -f v4l2 /dev/video0
这也行,我已经测试过了。
我试着结合上面的两个命令,想出了
ffmpeg -y -f rawvideo -vcodec rawvideo -s 1280x720 -pix_fmt bgr24 -i - -vcodec libx264 -crf 0 -preset fast -map 0:v -f v4l2 /dev/video0
但我收到以下错误
[NULL @ 0x55a12fcc60] Unable to find a suitable output format for '' : Invalid argument
如果有人能帮我解决这个问题,我会很高兴。
谢谢。
我在这里看到两个问题:
Unable to find a suitable output format
错误可能来自您代码中命令中的 quotation/escaping 问题。 运行 来自命令行界面的相同命令正确执行。修复引用问题后,您将收到另一个错误:
V4L2 output device supports only a single raw video stream
。这意味着您不能使用 libx264 输出到 v4l2。所以改为让它自动选择原始视频输出:
ffmpeg -y -f rawvideo -video_size 1280x720 -pixel_format bgr24 -i - -f v4l2 /dev/video0
如果颜色看起来不对,请使用不同的 -pixel_format
值(参见 ffmpeg -pix_fmts
),或者播放器不支持 v4l2 使用的输出像素格式。在这种情况下,添加 -vf format=yuv420p
输出选项(在 -i
之后和 /dev/video0
之前的任何位置)。
更多信息:
- rawvideo demuxer(也
ffmpeg -h demuxer=rawvideo
) - V4L2 output device