我应该如何使用ffmpeg在我的RTMP h264流上添加透明的watermark.png?

时间:2013-06-16 17:36:19

标签: ffmpeg rtmp watermark

我有一个Raspberry Pi,新的相机模块连接到(在这种情况下)Bambuser。 You can see the stream here,它来自荷兰的风车(相机位置会在几周内更好)。

我成功运行了流,但现在我想在输入流的顶部添加一个图像(alpha透明png),该输入流通过管道传输到ffmpeg以便流式传输到Bambuser。

我目前使用以下命令(用户特定的详细信息已删除)成功地将来自Raspberry Camera模块的输入(很棒,HD和所有硬件渲染)传输到Bambuser,遵循Slickstreamer的great tutorial

raspivid -t 999999999 -w 960 -h 540 -fps 25 -b 500000 -o - | ffmpeg  -i - -vcodec copy -an -metadata title="STREAM NAME" -f flv rtmp://USER_X.fme.bambuser.com/b-fme/USER_STREAM_KEY_X

我关注了关于ffmpeg的文档,在我看来,我应该使用'-vf'命令来应用'movies:'过滤器,如下所示:

raspivid -t 999999999 -w 960 -h 540 -fps 25 -b 500000 -o - | ffmpeg  -i - -vf "movie='/home/USER/watermark.png' [logo]; [in][logo] overlay=main_w-overlay_w-10:10 [out]" -vcodec copy -an -metadata title="STREAM NAME" -f flv rtmp://USER_X.fme.bambuser.com/b-fme/USER_STREAM_KEY_X

以及其他各种-vf命令,例如'-vf vflip'或'-vf mandelbrot'。但它似乎不起作用,因为流只显示了Raspberry Camera的直接输入。

这是使用以下-vf命令启动时的输出:

raspivid -t 999999999 -w 960 -h 540 -fps 25 -b 500000 -o - | ffmpeg -i - -vcodec copy -vf 'movie=0:png:/home/USER/watermark.png [watermark];[in] [watermark]overlay=0:0:1[out]' -an -metadata title="STREAM NAME" -f flv rtmp://USER_X.fme.bambuser.com/b-fme/USER_STREAM_KEY_X
ffmpeg version N-54036-g6c4516d Copyright (c) 2000-2013 the FFmpeg developers
  built on Jun 15 2013 XX:XX with gcc 4.6 (Debian 4.6.3-14+rpi1)
  configuration: 
  libavutil      52. 35.101 / 52. 35.101
  libavcodec     55. 16.100 / 55. 16.100
  libavformat    55.  8.102 / 55.  8.102
  libavdevice    55.  2.100 / 55.  2.100
  libavfilter     3. 77.101 /  3. 77.101
  libswscale      2.  3.100 /  2.  3.100
  libswresample   0. 17.102 /  0. 17.102
[h264 @ 0x1917cc0] max_analyze_duration 5000000 reached at 5000000 microseconds
Input #0, h264, from 'pipe:':
  Duration: N/A, bitrate: N/A
    Stream #0:0: Video: h264 (High), yuv420p, 960x540, 25 fps, 25 tbr, 1200k tbn, 50 tbc
Output #0, flv, to 'rtmp://USER_X.fme.bambuser.com/b-fme/USER_STREAM_KEY_X':
  Metadata:
    title           : STREAM NAME
    encoder         : Lavf55.8.102
    Stream #0:0: Video: h264 ([7][0][0][0] / 0x0007), yuv420p, 960x540, q=2-31, 25 fps, 1k tbn, 1200k tbc
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
frame= 2344 fps= 27 q=-1.0 size=    4827kB time=00:01:33.72 bitrate= 421.9kbits/s 

如上所述,其他-vf过滤器似乎也不适用于Bambuser上的输出流,我认为我从根本上做错了。

  1. 我应该映射Raspivid-stream并将图像'watermark.png'映射到其上?这会是解决方案吗?有人经历过这个吗?
  2. 非常感谢你提前的想法。

1 个答案:

答案 0 :(得分:3)

如果您要使用过滤器,则必须重新编码,因此如果您还尝试使用-vf / -vcodec copy / -codec:v copy复制流,ffmpeg将忽略-c:v copy 。来自stream copy文档:

  

由于没有解码或编码,因此流复制模式非常快   而且没有质量损失。但是,在某些情况下可能不起作用   因为很多因素。显然也应用过滤器   不可能,因为过滤器处理未压缩的数据。

其他东西:
-vf用于simple filtergraphs(一个输入,一个输出),-filter_complex用于complex filtergraphs(一个或多个输入,一个或多个输出)。使用-filter_complex表示您可以跳过movie多媒体来源过滤器,这意味着更简洁,更清晰的命令。

示例:

ffmpeg -i video.mp4 -i image.png -codec:v libx264 -preset ultrafast -filter_complex overlay output

这将使用Raspberry的CPU进行编码,我认为这不会带来令人满意的性能。

相关问题