FFMPEG producing multiple outputs (one streaming and one snapshot)

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

FFMPEG producing multiple outputs (one streaming and one snapshot)

Thomas Chen

i am trying to capture video from a camera and produce to two outputs
1) streaming (h264)
2) taking periodic snapshot of the image (jpg)

is this possible ?   i read
https://trac.ffmpeg.org/wiki/Creating%20multiple%20outputs  that
ffmpeg can have multiple outputs but i am not sure how to handle when
one output is just
snapshot of image (and triggered by an external signal or a periodic
timer ?)

btw, the camera module i am using can support MPEG (/dev/video0) and
H264 (/dev/video1),
if i am streaming with H264 (single output), then the MPEG (video0) is
not operable.

if it is not possible, please advise what other software that can do
this ? gstreamer ?

thanks

_______________________________________________
ffmpeg-user mailing list
[hidden email]
https://ffmpeg.org/mailman/listinfo/ffmpeg-user

To unsubscribe, visit link above, or email
[hidden email] with subject "unsubscribe".
Reply | Threaded
Open this post in threaded view
|

Re: FFMPEG producing multiple outputs (one streaming and one snapshot)

Devin Heitmueller
Hi Thomas,

On Sun, Sep 8, 2019 at 9:33 AM Thomas Chen <[hidden email]> wrote:

>
>
> i am trying to capture video from a camera and produce to two outputs
> 1) streaming (h264)
> 2) taking periodic snapshot of the image (jpg)
>
> is this possible ?   i read
> https://trac.ffmpeg.org/wiki/Creating%20multiple%20outputs  that
> ffmpeg can have multiple outputs but i am not sure how to handle when
> one output is just
> snapshot of image (and triggered by an external signal or a periodic
> timer ?)

Here's a pipeline I've been using in development to stream to Akamai
via HLS push while simultaneously pushing JPGs to a webserver which
hosts thumbnails updated once per second:

ffmpeg -y -i udp://@227.1.1.4:6001?localaddr=192.168.1.200&overrun_nonfatal=1&fifo_size=1048576
-filter_complex
pad=x=-1:y=-2:aspect=16/9:color=yellow,drawtext=fontfile=/home/devin/fonts/DejaVuLGCSans.ttf:text=%{localtime}_%{frame_num}:fontsize=32:x=10:y=200:fontcolor=white:box=1:boxborderw=10:boxcolor=black,split=2[out1][out2],[out1]fps=30000/1001[vid],[out2]fps=1/1[jpg];
aresample -ac 2 -s 320x180 -map [vid] -c:v libx264 -deinterlace
-preset ultrafast -x264-params nal-hrd=cbr -profile:v high -level 4.1
-8x8dct 1 -g 60 -bf 2 -b:v 240k -minrate 240k -maxrate 240k -bufsize
240k -max_muxing_queue_size 1024 -c:a aac -ar 24000 -b:a 32k -f hls
-hls_time 4 -hls_list_size 3 -hls_flags delete_segments -method PUT
-master_pl_publish_rate 15 -hls_start_number_source epoch
https://post.redacted.akamaihd.net/12345678/hls/master_240p.m3u8 -map
[jpg] -s 320x180 -q 8
<a href="https://redacteduser@redactedpw:www.redacted.com/thumbupload/upload.php/foo/869618_%03d.jpg">https://redacteduser@redactedpw:www.redacted.com/thumbupload/upload.php/foo/869618_%03d.jpg

So the pipeline above basically does a single encode, runs it through
a complex filter graph to pad to 16/9 and burn in some text, then
takes the output of that pipeline and routes it to one output where it
gets encoded as H.264/HLS, and the second output encodes as jpeg and
uploads to a webserver.  In the above example both outputs are 320x180
but they don't have to be the same resolution (in fact, in many use
cases you might want the H.264 to be higher resolution and the jpeg
image to be a very small thumbnail).

The filter which burns in the text would be removed from the pipeline
in production (but in fact it's *really* helpful when getting the
pipeline up and running).  And of course the filter which pads
standard definition video to 16/9 can be removed too if you're just
doing HD content.

So, yes, it can be done, and I hope this gives you a reasonable
starting point to play with.

Devin

--
Devin J. Heitmueller - Kernel Labs
http://www.kernellabs.com
_______________________________________________
ffmpeg-user mailing list
[hidden email]
https://ffmpeg.org/mailman/listinfo/ffmpeg-user

To unsubscribe, visit link above, or email
[hidden email] with subject "unsubscribe".