我正在运行一个使用fmpeg将straming视频发送到letsrobot.tv的机器人你可以在名为patton II的网站上看到我的机器人。我想在视频流上叠加视频HUD。
我有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 :(得分: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/
显然,不知道更多,这是我能给你的最通用的建议。
一些一般提示:
overlay
filter's x
和y
选项移动HUD。-codec:v mpeg1video
,即MPEG-1视频。它资源效率很高,但质量很差。您可能希望选择更好的编解码器,但这取决于您的设备功能(例如,至少带有mpeg2
的MPEG-2,带有mpeg4
的MPEG-4第10部分,或带有{的H.264 {1}})。