通过网络摄像头输出实时叠加 png 图像(具有透明度),以馈送到 v4L2 环回虚拟摄像机

通过网络摄像头输出实时叠加 png 图像(具有透明度),以馈送到 v4L2 环回虚拟摄像机

我已经为此苦苦挣扎了几天,但就是无法正确使用 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 来测试效果;它仍然运行正常,并且还减少了延迟。

相关内容