Używanie każdego N-tego zdjęcia w sekwencji do tworzenia wideo za pomocą FFmpeg

1

Mam serię zdjęć poklatkowych, których używam do generowania wideo. Te obrazy są duże (1080p), więc staram się zająć jak najmniej miejsca na komputerze. Obecnie mam około 3500 zdjęć. Jeśli używam FFmpeg do generowania wideo przy 30 klatkach na sekundę i 3500 kb / s, plik ma około 50 MB, co nie jest tak naprawdę możliwym rozmiarem do zastosowania w prezentacjach PowerPoint. Chciałbym więc użyć FFmpeg do wygenerowania wideo, ale używaj tylko każdej N-tej klatki z tej sekwencji obrazów w filmie. Znalazłem kilka postów, które sugerują sposoby na zrobienie tego, ale wszystkie biorą istniejący film i ograniczają go. Próbowałem użyć selectpolecenia, aby to osiągnąć, ale bezskutecznie. Oto polecenie, którego używałem:

ffmpeg -framerate 30 -i Image%08d.jpg -filter:v select='not(mod(n\,5))' -b:v 3500k Output.mp4

Czy ktoś ma jakieś sugestie?

Kyle Jones
źródło

Odpowiedzi:

2

Możesz po prostu użyć trybu CRF, zamiast określać szybkość transmisji:

ffmpeg -framerate 30 -i Image%08d.jpg -crf 23 Output.mp4

Niższe wartości są lepsze, ale dają większe pliki. 18–28 to przyzwoity zakres.


Aby użyć co piątą klatkę,

ffmpeg -framerate 30 -i Image%08d.jpg -vf "select='not(mod(n,5))',setpts=N/30/TB" -crf 23 Output.mp4
Gyan
źródło
1
To działa! Czy możesz wyjaśnić, dlaczego musiałem dodać tę setptsczęść?
Kyle Jones,
Jeśli wyjściowa liczba klatek na sekundę nie jest ustawiona, wykorzystuje wejściową liczbę klatek na sekundę, tutaj 30. Filtr wyboru przechodzi wzdłuż każdej piątej ramki ze swoim znacznikiem czasu, tj. X,00 sekund, X.16 sekund, X,33 sekund, X,50 sekund, X .66 sekund, X.83 sekund..etc, więc ffmpeg powiela klatki, aby uzyskać 30 fps. Ustawienia przestawiają wyjście tak, aby każde 30 klatek z zaznaczonego pasowało w ciągu sekundy.
Gyan