2017-08-09 70 views
0

我运行的机器人使用fmpeg将straming视频发送到letsrobot.tv您可以在名为patton II的网站上看到我的机器人。我想在视频流上叠加视频HUD。使用ffmpeg覆盖另一个视频上的流媒体视频

我有found a link解释如何做到这一点,但我不知道如何做到这一点与流视频作为输入,而不是一个单一的图像文件。

这是目前正在使用流式传输视频的命令:

overlayCommand = '-vf dynoverlay=overlayfile=/home/pi/runmyrobot/images/hud.png:check_interval=500' 
videoCommandLine = '/usr/local/bin/ffmpeg -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video%s %s -f mpegts -codec:v mpeg1video -s 640x480 -b:v %dk -bf 0 -muxdelay 0.001 %s http://%s:%s/hello/640/480/' % (deviceAnswer, rotationOption, args.kbps, overlayCommand, server, videoPort) 
audioCommandLine = '/usr/local/bin/ffmpeg -f alsa -ar 44100 -i hw:1 -ac 2 -f mpegts -codec:a mp2 -b:a 32k -muxdelay 0.001 http://%s:%s/hello/640/480/' % (server, audioPort) 
+0

我还没有尝试任何事情,我不知道从哪里把这些代码或如何,甚至将其设置 – user3354787

+0

我安装了它作为一个包我写的SD卡是所有预装的,我可以上传我的电流在这里控制视频的Python脚本? – user3354787

+0

overlayCommand ='-vf dynoverlay = overlayfile =/home/pi/runmyrobot/images/hud.png:check_interval = 500' videoCommandLine ='/ usr/local/bin/ffmpeg -f v4l2 -framerate 25 -video_size 640x480 -i/dev/video%s%s -f mpegts -codec:v mpeg1video -s 640x480 -b:v%dk -bf 0 -muxdelay 0.001%s http://%s:%s/hello/640/480 /' %(deviceAnswer,rotationOption,args.kbps,overlayCommand,server,videoPort) audioCommandLine ='/ usr/local/bin/ffmpeg -f alsa -ar 44100 -i hw:1 -ac 2 -f mpegts -codec:a mp2 -b:32k -muxdelay 0.001 http://%s:%s/hello/640/480 /'%(server,audioPort) – user3354787

回答

1

您已经有了一个输入,这是网络摄像头视频:

-f v4l2 -framerate 25 -video_size 640x480 -i /dev/video%s 

要叠加另一个视频,所以你必须添加第二个输入,这是你的HUD流。我假设你已经具有的选择被实时生成的流:

-i /path/to/hud/stream 

然后,添加一个复杂的过滤器覆盖一个比其他:

-filter_complex "[0:v][1:v]overlay[out]" 

过滤后,加入一-map "[out]"选项告诉ffmpeg使用生成的视频作为输出,并照常添加剩余的选项。所以,总之:

/usr/local/bin/ffmpeg -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video%s \ 
-i /path/to/hud/stream \ 
-filter_complex "[0:v][1:v]overlay[out]" -map "[out]" \ 
-f mpegts -codec:v mpeg1video -s 640x480 -b:v %dk -bf 0 \ 
-muxdelay 0.001 %s http://%s:%s/hello/640/480/ 

很明显,不知道更多,这是我可以给你最通用的建议。

的一般提示:

  • 确保HUD流是相同的分辨率摄像头的视频,其中的元素放在您想要的地方。或者使用overlay filter'sxy选项来移动HUD。
  • 你的HUD流应该有一个透明层。并非所有的编解码器和容器格式都支持这一点
  • 您使用的是-codec:v mpeg1video,它是MPEG-1视频。它非常节省资源,但质量却很低。您可能想要选择更好的编解码器,但这取决于您的设备功能(例如,至少MPEG-2有mpeg2,或MPEG-4第10部分有mpeg4,或者H.264有libx264)。
+0

视频不会是一个流它将成为一个实际的视频...流是从相机,覆盖来自视频文件,也.......视频覆盖也必须是mpeg1或可以它是另一回事吗? – user3354787

+0

它可以是MPEG-1,但它不应该。就像我说的,这是陈旧和低效的。使用支持透明度的现代编解码器,如通过'libvpx'的VP9,或使用一系列PNG图像或Apple ProRes 4444,Apple Animation ... – slhck