我已经为此苦苦挣扎了几天,但就是无法正确使用 FFmpeg 命令的最后一部分。如果您能提供任何帮助,我将不胜感激。我在 StackExchange 上研究了类似的问题和答案,并按照建议更新了 v4L2 驱动程序:
卸载 v4l2loopback-dkms 及其依赖项:
sudo apt-get remove --auto-remove v4l2loopback-dkms
sudo apt update
sudo apt upgrade
sudo apt install v4l2loopback-dkms
我正在使用 Ubuntu 18.04 和 FFmpeg 版本 3.4.6-0
使用初步命令:
sudo modprobe v4l2loopback exclusive_caps=1
ls /dev/ | grep video
I get 2 video sources:
video0..........my webcam
video1..........v4L2 loopback virtual camera
以下将在设备 video1 上的 VLC 中显示我的“Zingari.png”徽标:
ffmpeg -loop 1 -re -i ~/Desktop/Zingari.png -f v4l2 -vcodec rawvideo -pix_fmt yuv420p /dev/video1
下面这个命令将把 Zingari 标志叠加在 Scooter 视频上,并将输出记录到文件中:
ffmpeg -i ~/Desktop/Scooter.mp4 -i ~/Desktop/Zingari.png -filter_complex "overlay" -codec:a copy example_marked.mp4
我尝试了多种方法来组合这些命令,例如:
ffmpeg -i ~/Desktop/Scooter.mp4 -i ~/Desktop/Zingari.png -filter_complex "overlay" -f v4l2 -vcodec rawvideo -pix_fmt yuv420p /dev/video1
这非常接近,但给出了多路复用开销错误和以下输出:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '~/Desktop/Scooter.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
encoder : Lavf54.20.4
Duration: 00:00:16.95, start: 0.000000, bitrate: 2040 kb/s
Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 1925 kb/s, 15 fps, 15 tbr, 15 tbn, 15 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: mp3 (mp4a / 0x6134706D), 44100 Hz, stereo, s16p, 127 kb/s (default)
Metadata:
handler_name : SoundHandler
Input #1, png_pipe, from '~/Desktop/Zingari.png':
Duration: N/A, bitrate: N/A
Stream #1:0: Video: png, rgba(pc), 233x217, 25 tbr, 25 tbn, 25 tbc
Stream mapping:
Stream #0:0 (mpeg4) -> overlay:main
Stream #1:0 (png) -> overlay:overlay
overlay -> Stream #0:0 (rawvideo)
Press [q] to stop, [?] for help
Output #0, v4l2, to '/dev/video1':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
encoder : Lavf57.83.100
Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 320x240 [SAR 1:1 DAR 4:3], q=2-31, 13824 kb/s, 15 fps, 15 tbn, 15 tbc (default)
Metadata:
encoder : Lavc57.107.100 rawvideo
frame= 252 fps=0.0 q=-0.0 Lsize=N/A time=00:00:16.80 bitrate=N/A speed=66.4x
video:28350kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
回顾一下:网络摄像头流 /dev/video0 + png => v4L2 流到 /dev/video1
任何帮助将非常感激。
答案1
已解决:请确保您已安装最新版本的 v4l2loopback-dkms
使用 Ubuntu 18.04 和 FFmpeg 版本 3.4.6-0 进行测试
使用初步命令:sudo modprobe v4l2loopback exclusive_caps=1
ls /dev/ | grep video,显示 2 个视频源:video0..........我的网络摄像头 video1..........v4L2 环回虚拟摄像头
下面将 Zingari 徽标叠加在网络摄像头视频上,并将其作为视频 1 流式传输到 VLC 和 Chrome 以及选项卡中的 Jitsi-Meet 视频会议。
ffmpeg -i /dev/video0 -i ~/Desktop/Zingari-Transparent-Cropped-D.png -filter_complex "overlay" -f v4l2 -pix_fmt yuv420p /dev/video1
在使用视频 file.mp4 输入和 image.png 时,添加 -re(如上文所述)似乎是必要的,但使用网络摄像头时则不是。我尝试删除 -re 来测试效果;它仍然运行正常,并且还减少了延迟。