4

我有一个 Raspberry Pi,新的摄像头模块连接到(在这种情况下)Bambuser。你可以在这里看到溪流,它来自荷兰的风车(相机位置在几周内会更好)。

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

我目前使用以下命令(删除了用户特定的详细信息),按照 Slickstreamer 的精彩教程,成功地将来自 Raspberry Camera 模块(很棒,高清和所有硬件渲染)的输入流式传输到 Bambuser :

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”命令来应用“电影:”过滤器,如下所示:

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 相机的直接输入。

这是使用以下 -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 版本 N-54036-g6c4516d 版权所有 (c) 2000-2013 FFmpeg 开发者
  建于 2013 年 6 月 15 日 XX:XX 与 gcc 4.6 (Debian 4.6.3-14+rpi1)
  配置:
  libavutil 52. 35.101 / 52. 35.101
  libavcodec 55. 16.100 / 55. 16.100
  libavformat 55. 8.102 / 55. 8.102
  libav 设备 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 达到 5000000 微秒
输入#0,h264,来自“管道:”:
  持续时间:不适用,比特率:不适用
    流 #0:0:视频:h264(高)、yuv420p、960x540、25 fps、25 tbr、1200k tbn、50 tbc
输出 #0,flv,到 'rtmp://USER_X.fme.bambuser.com/b-fme/USER_STREAM_KEY_X':
  元数据:
    标题:流名称
    编码器:Lavf55.8.102
    流 #0:0:视频:h264 ([7][0][0][0] / 0x0007), yuv420p, 960x540, q=2-31, 25 fps, 1k tbn, 1200k tbc
流映射:
  流 #0:0 -> #0:0(复制)
帧= 2344 fps= 27 q=-1.0 大小= 4827kB 时间=00:01:33.72 比特率= 421.9kbits/s

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

  1. 我应该映射 Raspivid 流并在其上映射图像“watermark.png”吗?那会是解决方案吗?有人有这方面的经验吗?

非常感谢您提前提出的想法。

4

1 回答 1

3

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

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

其他东西:
-vf用于简单的过滤器图(一个输入,一个输出),-filter_complex用于复杂的过滤器图(一个或多个输入,一个或多个输出)。的使用-filter_complex意味着您可以跳过movie多媒体源过滤器,这意味着更短、更清晰的命令。

例子:

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

这将使用 Raspberry 的 CPU 进行编码,我猜这不会产生令人满意的性能。

于 2013-06-16T18:51:44.950 回答