ffmpeg -i myvid.mp4 -r 25 -t 100 image-%d.jpeg
To polecenie, którego używam do wyodrębnienia ramek i działa tak, jak się spodziewałem. Chciałbym jednak również spojrzeć na znaczniki czasu ramek. Z dowolną precyzją. 100 milisekund jest dla mnie wystarczająco dobre. Czy ffmpeg może to zrobić?
Podając dodatkowe szczegóły,
Kiedy uruchamiam powyższe polecenie, otrzymuję około 100 plików JPEG, myślę, że istnieje zgodność od 1 do 1 (lub wiele do 1) między tymi plikami JPEG i ramkami wideo. Chciałbym poznać sygnaturę czasową ramki, która została wydrukowana jako obraz JPEG „i”.
Dodatkowo próbowałem ffprobe, ale okazuje się, że raportuje nawet czas trwania filmu niedokładnie :(
capture
czasu.ffmpeg
dane wyjściowe konsoli z twojego polecenia.Odpowiedzi:
Możesz „zasymulować” proces zapisu obrazu, filtrując go za pomocą
fps
filtra, a następnie używając,ffprobe
aby wyświetlić znaczniki czasu generowanych ramek. Oznacza to, że przy 25 klatkach na sekundę 50. klatka (podobnie jak twój 50. obraz) będzie miała PTS wynoszący 2,00 sekundy.Robisz to w ten sposób:
Wyjdzie:
Są to znaczniki czasu dla każdego obrazu wyjściowego. Możesz połączyć listę ramek i znaczniki czasu:
Utworzy plik z:
Zauważ, że może to powodować powstawanie obcych linii, jeśli jest zbyt wiele ramek lub zbyt wiele wierszy informacji wyjściowej. Wydaje się tam trochę niedokładne.
źródło
-vsync drop
, ale dzieje się tak po filtrowaniu IIRC.