title: How should I add a transparent watermark.png over my RTMP h264 stream with ffmpeg?
body: <p>I have a Raspberry Pi with the new camera module hooked up to (in this case) Bambuser. <a href="http://j.mp/molencam" rel="nofollow">You can see the stream here</a>, it's from a windmill in The Netherlands (camera position will be better within a few weeks).</p>
  
  <p>I succesfully have the stream running, but now I want to add an image (alpha transparent png) on top of the input-stream which is piped to ffmpeg to be streamed to Bambuser.</p>
  
  <p>I currently use the following command (user specific details wiped out) to succesfully stream the input from the Raspberry Camera module (it's great, HD &amp; all, hardware rendering) to Bambuser, following the <a href="http://www.slickstreamer.info/2013/06/use-raspberrypi-csi-camera-module-to.html" rel="nofollow">great tutorial</a> by Slickstreamer: </p>
  
  <pre><code>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
  </code></pre>
  
  <p>I followed the docs about ffmpeg and it seems to me I should use the '-vf'-command to apply the 'movies:' filter, like so: </p>
  
  <pre><code>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
  </code></pre>
  
  <p>and various other -vf commands, like '-vf vflip' or '-vf mandelbrot'. But it doesn't seem to work, as the stream just shows the direct input from the Raspberry Camera.</p>
  
  <p>This is the output when started with the following -vf command: </p>
  
  <pre><code>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
  </code></pre>
  
  <pre>
  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 
  </pre>
  
  <p>As mentioned above, other -vf filters also don't seem to apply on the output stream on Bambuser, I think I fundamentally do something wrong here. </p>
  
  <ol>
  <li>Should I map the Raspivid-stream and map the image 'watermark.png' on top of that? Would that be the solution? Anyone experience with this?</li>
  </ol>
  
  <p>Thank you very much for your thoughts in advance.</p>