Bartosz
Bartosz

Reputation: 1088

How to get frame number given a timestamp using ffmpeg

How can I get the frame number closest to a given time (relative to the start of the video) using ffmpeg? The video has variable frame rate. I do not need any other metadata or the actual frame (image) itself. Speed is more important than precision (unless the possible error is more than a couple of seconds).

Example:

Input

Output

Upvotes: 1

Views: 1765

Answers (1)

Doug Sillars
Doug Sillars

Reputation: 1765

ffmpeg -t 01:05 -i input.mp4 -nostats -vcodec copy -y -f rawvideo /dev/null 2>&1  |\
   grep frame |\
   awk '{print $2}'

This ffmpeg command takes your input.mp4, truncates it to -t (in the example above 01:05, and writes the file to /dev/null. the -y overwrites whatever is on /dev/null.

The grep command grabs the number of frames and awk gives you the 2nd "word" (space-delimited) on the line.

INPUT:
ffmpeg -t 01:05 -i baywatch.mp4 -nostats -vcodec copy -y -f rawvideo /dev/null 2>&1 | grep frame | awk '{print $2}'

OUTPUT:
1559

Upvotes: 6

Related Questions