11
ffmpeg -i myvid.mp4  -r  25  -t  100  image-%d.jpeg 

Является ли команда, которую я использую для извлечения кадров, и она работает так, как я ожидал. Однако я также хотел бы посмотреть на временные метки кадров. С любой точностью. 100 миллисекунд это достаточно хорошо для меня. Может ли ffmpeg сделать это?

Предоставление дополнительных деталей,

Когда я запускаю вышеупомянутую команду, я получаю около 100 JPEG, я предполагаю, что между этими JPEGS и кадрами видео есть соответствие 1 к 1 (или много к 1). Я хотел бы знать временную метку кадра, который был выведен как изображение JPEG «i».

Кроме того, я попытался ffprobe, но я считаю, что он даже неточно сообщает продолжительность видео :(

1 ответ1

11

Что вы можете сделать, это "смоделировать" процесс записи изображения, отфильтровывая его с помощью фильтра fps , а затем используя ffprobe чтобы показать временные метки сгенерированных кадров. Это означает, что при 25 кадрах в секунду 50-й кадр (как и ваше 50-е изображение) будет иметь PTS 2,00 секунды.

Вы делаете это так:

ffprobe -f lavfi -i "movie=input.mp4,fps=fps=25[out0]" -show_frames -show_entries frame=pkt_pts_time -of csv=p=0

Будет выводить:

0
0.04
0.08
0.12
0.16
...

Это временные метки для каждого выходного изображения. Вы действительно можете объединить список кадров и отметок времени:

ls -1 image-*.jpeg > images.txt
ffprobe -f lavfi -i "movie=input.mp4,fps=fps=25[out0]" -show_frames -show_entries frame=pkt_pts_time -of csv=p=0 > frames.txt
paste images.txt frames.txt > combined.txt

Создаст файл с:

image-0001.jpeg 0
image-0002.jpeg 0.04
image-0003.jpeg 0.08
image-0004.jpeg 0.12

Обратите внимание, что это может привести к лишним строкам, если слишком много кадров или слишком много строк вывода информации. Кажется, немного неточно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .