Question

I have a Raspberry Pi with the new camera module hooked up to (in this case) Bambuser. You can see the stream here, it's from a windmill in The Netherlands (camera position will be better within a few weeks).

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.

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 & all, hardware rendering) to Bambuser, following the great tutorial by Slickstreamer:

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

I followed the docs about ffmpeg and it seems to me I should use the '-vf'-command to apply the 'movies:' filter, like so:

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

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.

This is the output when started with the following -vf command:

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 

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.

  1. 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?

Thank you very much for your thoughts in advance.

Was it helpful?

Solution

You must re-encode if you want to use filters, so ffmpeg will ignore -vf if you are also trying to copy streams with -vcodec copy/-codec:v copy/-c:v copy. From the stream copy documentation:

Since there is no decoding or encoding, stream copy mode is very fast and there is no quality loss. However, it might not work in some cases because of many factors. Applying filters is obviously also impossible, since filters work on uncompressed data.

Other stuff:
-vf is used for simple filtergraphs (one input, one output), and -filter_complex is used for complex filtergraphs (one or more inputs, one or more outputs). Usage of -filter_complex means you can skip the movie multimedia source filter which means a shorter, cleaner command.

Example:

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

This will use the Raspberry's CPU to encode, that, I guess, will not result in satisfactory performance.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top