Почему фильтр showinfo FFMPEG выводит меньше временных меток, чем фреймы - PullRequest
0 голосов
/ 06 марта 2020

Я использую FFMPEG для извлечения меток времени каждого кадра видео. Я использую команду: ffmpeg.exe -i input.mp4 -an -vf showinfo frames\%04d.jpg 2> log.txt. Затем я анализирую выходной файл для извлечения временных меток.

Проблема в том, что я обнаружил, что для некоторых видео количество временных меток меньше, чем количество кадров. Некоторый контент в файле журнала:

...
[Parsed_showinfo_0 @ 000001c68efd5d40] n:   0 pts:      0 pts_time:0       pos:   744736 fmt:yuvj420p sar:1/1 s:1920x1080 i:P iskey:1 type:I checksum:C086C8AD plane_checksum:[967F2494 DE1FDB06 FA11C904] mean:[97 125 129 ] stdev:[48.3 8.0 6.7 ]
[Parsed_showinfo_0 @ 000001c68efd5d40] color_range:pc color_space:bt709 color_primaries:bt709 color_trc:bt709
...
[Parsed_showinfo_0 @ 000001c68efd5d40] n:9003 pts: 300793 pts_time:300.493 pos:248599172 fmt:yuvj420p sar:1/1 s:1920x1080 i:P iskey:0 type:P checksum:2A3F467C plane_checksum:[B8AFA4CB 96D8FC10 1EE5A583] mean:[99 130 126 ] stdev:[44.4 9.3 6.0 ]
[Parsed_showinfo_0 @ 000001c68efd5d40] color_range:pc color_space:bt709 color_primaries:bt709 color_trc:bt709
frame= 9007 fps= 32 q=24.8 Lsize=N/A time=00:05:00.53 bitrate=N/A dup=3 drop=0 speed=1.05x    
video:633532kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown

Я получаю 9007 кадров, но только 9004 метки времени. Временная метка первого и последнего кадра кажется вполне нормальной, поэтому в начале или конце видео не должно быть пропущенных кадров. Итак, я хотел бы знать причину и какие метки времени имеют 9004 из 9007 кадров?

Спасибо!

1 Ответ

0 голосов
/ 06 марта 2020

Модуль записи последовательности изображений в ffmpeg по умолчанию использует постоянную частоту кадров, когда целевая частота совпадает с частотой кадров на входе, если не указано иное вручную.

Ваш ввод имеет несколько пробелов, и ffmpeg продублирован кадры для поддержания постоянной частоты кадров. См. dup=3 drop=0 в итоговой строке состояния.

Добавьте -vsync 0, чтобы предотвратить это дублирование.

...