[FFmpeg-user] live stream - get data from multimedia filter continuously

Gyan ffmpeg at gyani.pro
Mon May 13 07:49:19 EEST 2019

On 13-05-2019 12:36 AM, Thomas Seilund wrote:
> On 12/05/2019 19.25, Gyan wrote:
>> On 12-05-2019 10:43 PM, Thomas Seilund wrote:
>>> Hi All
>>> I capture video stream from webcam and show video on screen.
>>> The same stream goes through the 'metadata' multimedia filter as 
>>> shown below:
>>> ffmpeg -y -f v4l2 -input_format mjpeg -s hd480 -r 30 -i /dev/video2 
>>> -filter_complex 
>>> "[0:0]select='gte(scene,0)',metadata=print:file='movement.txt',null[X]" 
>>> -map '[X]' -pix_fmt yuv420p -f xv Title
>>> The text file 'movement.txt' gets information about each frame. BUT 
>>> data is written to text file 'movement.txt' buffered. Is there any 
>>> way to write data to text file 'movement.txt' as each frame is 
>>> processed?
>> Not at present. The file protocol will buffer up to 256 kB and then 
>> write out. There is an option to write immediately but it isn't 
>> applied to the metadata filter as its I/O context is isolated. I plan 
>> to patch that soon-ish.
>> Gyan
>> _______________________________________________
>> ffmpeg-user mailing list
>> ffmpeg-user at ffmpeg.org
>> https://ffmpeg.org/mailman/listinfo/ffmpeg-user
>> To unsubscribe, visit link above, or email
>> ffmpeg-user-request at ffmpeg.org with subject "unsubscribe".
> Thanks Gyan.
> Is there another way to get the metadata, ie. lavfi.scene_score, as 
> the frame is processed?
> Basically, I want to take some action when there is motion in the video!

If you increase the log level to debug or higher, you should see lines 
of the form

[Parsed_select_0 @ 00000000006feb80] n:1524.000000 pts:780288.000000 
t:60.960000 key:0 interlace_type:P pict_type:B scene:0.000987 -> 
select:1.000000 select_out:0

The "scene:" value is what you want.

To capture this, you either redirect stderr to a file or add -report to 
your command. The latter will generate a text file in PWD.


More information about the ffmpeg-user mailing list