Несогласованные результаты между ffprobe и ffmpeg для идентификации ключевых кадров - PullRequest
1 голос
/ 30 января 2020

Пытаясь определить как миниатюры, так и временные метки ключевых кадров в наборе видеороликов, я получаю разные результаты от ffmpeg и ffprobe.

Занимая 1 мин. длинное видео в качестве примера:

youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4' 'https://www.youtube.com/watch?v=BHlAlN3z4ss' --output "test.mp4"

1 / Я извлекаю миниатюры и пишу на изображении отметку времени, с которой оно было извлечено:

ffmpeg -i test.mp4 -q:v 2 -vf select="eq(pict_type\,PICT_TYPE_I)","drawtext=fontfile=/path/to/Arial.ttf:fontsize=45:fontcolor=yellow:box=1:boxcolor=black:x=(W-tw)/2:y=H-th-10:text='Time\: %{pts\:hms}'" -vsync 0 thumbs/preview%05d.jpg

2 / Я извлекаю и сохраняю отметки времени из всех ключевых кадров:

ffprobe -v error -skip_frame nokey -show_entries frame=pkt_pts_time -select_streams v -of csv=p=0 test.mp4 | sort -n > keyframes_timestamps.txt

3 / Сравнивая результаты, я считаю, ffprobe найдено 29 ключевых кадров, в то время как ffmpeg найдено только 32. Сравнивая вручную, мы видим, что указанные c ключевые кадры не обнаружены by `` ffprobe` пока большинство очень похожи.

ffprobe_ts  ffmpeg_ts
0.000000    00:00:00.00
5.366667    00:00:05.367
7.200000    00:00:07.200
8.666667    00:00:08.667
10.100000   00:00:10.100
11.500000   00:00:11.500
14.233333   00:00:14.233
15.333333   00:00:15.333
17.366667   00:00:17.367
NO_TS       00:00:18.833
20.800000   00:00:20.800
24.533333   00:00:24.533
25.700000   00:00:25.700
26.033333   00:00:26.033

На больших видео это происходит примерно для 5% ключевых кадров.

Я не могу найти объяснения по этому поводу, есть у кого-нибудь подсказка? или совет, где / что мне следует узнать дальше?

Спасибо за помощь!

1 Ответ

1 голос
/ 30 января 2020

Не все I-кадры являются ключевыми кадрами. -skip_frame nokey пропустит I-кадры без KF.

...