23

When using ffmpeg to output a series of frames as images, the only format I can find documentation for is frame_%d.jpg. The %d identifier is replaced by the sequential frame count.

Are there other parameters I can use in the output file format? Specifically, I need the ability to add the timestamp of the specific frame.

1

6 Answers 6

12

Turns out this behavior was not yet implemented at the time.

I implemented an initial version of %t support on my fork of FFmpeg (https://github.com/yuvadm/FFmpeg), and am currently working on cleaning up the patch so that it can be merged upstream.

Sign up to request clarification or add additional context in comments.

3 Comments

Did you ever submit this to the core project? There's an open 3yr-old request (that I found while trying to do this myself).
@YuvalAdam take a look to your ffmpeg repo on github please. :)
@florida I've added an updated patch to trac.ffmpeg.org/ticket/1452 which is Works on My Machine™ certified since I was searching for this functionality.
10

The strftime option allows you to expand the filename with date and time information. Check the documentation of the strftime() function for the syntax.

For example to generate image files from the strftime() %Y-%m-%d_%H-%M-%S pattern, the following ffmpeg command can be used:

ffmpeg -f v4l2 -r 1 -i /dev/video0 -f image2 -strftime 1 "%Y-%m-%d_%H-%M-%S.jpg"

3 Comments

As far as I understand, this will output the actual time and date, while my requirement is for the running time of the video.
Unfortunately only "second" granularity (gives wall clock time) but it does work...
For those of us on Ubuntu 14 who a forced to use avconv the strftime option is not available for segmentation. I couldn't find a workaround, but was able to install FFMPEG on ubuntu 14 by doing sudo add-apt-repository ppa:mc3man/trusty-media sudo apt-get update sudo apt-get dist-upgrade sudo apt-get install ffmpeg
2

I hacked up a bash script that creates file names based on time into the film. It uses a format: "hh_mm_ss" in the file name. You can see it at:

https://github.com/pozar/makemoviethumbs

1 Comment

Appears to require "constant" frame rate, which unfortunately I do not have :|
1

Another option you'd have would be to run ffprobe -show_packets on it, and use that data to "infer" the timestamp of each generated jpg file (assuming you generate one per incoming video frame). Yikes!

Comments

0

For number of frames can use report with special debug mode:

FFREPORT=file=\'file.log\':level=48 && ffmpeg ... -vf select=eq(pict_type\,PICT_TYPE_I) -vsync vfr -f image2 OUTPUT

then you can match the name with preg_match_all:

preg_match_all("/] n:(\\d+)\\.[^>]+pict_type:I/Us",$log,$m,PREG_PATTERN_ORDER,5000);
$frames=$m[1];

Please enjoy!

Comments

-1

You can try %s with -strftime if you want to attach epoch.

Example :

ffmpeg -rtsp_transport tcp -i 'input.mp4' -vf fps=1 -strftime 1 "%s_frame.png"

1 Comment

This uses the current time, not the video timestamp, just like the other strftime answer.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.