2016-05-14 3 views
0

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

ffprobe -show_frames -of compact=p=0 -f lavfi "movie=input.mov,select=gt(scene\,.02)" > results.txt 

Выходы все это:

media_type=video stream_index=0 key_frame=1 pkt_pts=31031 pkt_pts_time=1.292958 pkt_dts=31031 pkt_dts_time=1.292958 best_effort_timestamp=31031 best_effort_timestamp_time=1.292958 pkt_duration=N/A pkt_duration_time=N/A pkt_pos=82320 pkt_size=629760 width=640 height=328 pix_fmt=rgb24 sample_aspect_ratio=1:1 pict_type=I coded_picture_number=0 display_picture_number=0 interlaced_frame=0 top_field_first=0 repeat_pict=0 tag:lavfi.scene_score=0.025551 

ответ

1

Чтобы получить только индексные номера кадров, которые удовлетворяют критериям изменения сцены, используйте

ffprobe -select_streams v -show_entries frame=pkt_pts -of compact=p=0:nk=1 \ 
     -f lavfi "movie=abc.mov,setpts=N+1,select=gt(scene\,.02)" > log.txt 

Файл журнала будет просто содержать индексные номера кадра , по одному на строку, например

135 
136 
137 
141 
143 
145 

В setpts начинает нумерацию с 1.

+0

Спасибо за это. Любая идея, почему она дает гораздо больше сцен, которые я ожидаю? Мой оригинальный код выше обнаруживает 6 сцен. Ваш дайте мне список из 297 кадров. ? – JulianJ

+0

Проверить значение изменения сцены - '.02' или' 0.2' – Mulvya

+0

Работает согласно вашему исходному коду. Большое спасибо. – JulianJ

Смежные вопросы