Nie mam żadnej wiedzy na temat kodowania wideo, mam aplikację napisaną w OpenGL i mam Zapisuję wygenerowane klatki w obrazach png
. Klatki z mojej aplikacji mają szybkość 7 kl./s i próbuję utworzyć z nich wideo.
W tym celu używam ffmpeg w ten sposób
ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
który został pobrany z tej witryny , jednak zastanawiałem się, czy można mieć wideo pokazujące animację przy 30 FPS?
Komentarze
Odpowiedź
Używam poniższego kodu, aby zrobić to samo.
ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -pix_fmt yuv420p -crf 23 output.mp4
Podział polecenia:
ffmpeg <- call ffmpeg -framerate 30 <- set the input framerate to 30 -i img%03d.png <- read PNG images with filename img001, img002, img003, etc.. img can be changed to another prefix %03d can be changed to %04d for 0001, %05d for 00001 formats, etc... -c:v libx264 <- Set the codec to libx264 -pix_fmt yuv420p <- Set the pixel format to planar YUV 4:2:0, 12bpp -crf 23 <- set the Constant Rate Factor to 23 (default value) -output.mp4 <- the output filename
Czyta dane wejściowe przy 30 fps (-framerate 30
) i koduje go za pomocą kodeka libx264
z współczynnikiem stałej szybkości wynoszącym 23 (-crf 23
).
Odpowiedź
Należy wziąć pod uwagę dwie liczby klatek na sekundę: wejściową i wyjściową.
Domyślnie wejściowa liczba klatek na sekundę wynosi 25 , a wyjście będzie używać tej samej liczby klatek na sekundę co wejście, chyba że powiesz inaczej.
Ta sama liczba klatek na sekundę dla wejścia i wyjścia
Jeśli chcesz wprowadzić i mają taką samą liczbę klatek na sekundę, a następnie po prostu podaj wejściową liczbę klatek na sekundę. Ten przykład ustawi liczbę klatek na sekundę 30000/1001 (wideo NTSC):
ffmpeg -framerate 30000/1001 -i input output.mp4
-
Alternatywnie, w tym przykładzie możesz użyć
ntsc
zamiast30000/1001
, ale nie używaj29.97
, ponieważ jest to niedokładne lub poprawnie. Zobacz inne aliasy liczby klatek na sekundę . -
Ponieważ domyślna liczba klatek na sekundę to 25, a jeśli ustawia tylko wyjściową liczbę klatek na sekundę, a następnie klatki zostaną odrzucone lub zduplikowane w celu skompensowania. Dlatego w tej sytuacji ustawiana jest wejściowa liczba klatek na sekundę.
Inna liczba klatek na sekundę i wyjście
Czasami możesz chcieć, aby częstotliwość klatek wejściowych i wyjściowych różniły się. Na przykład możesz chcieć wprowadzić klatki z określoną częstotliwością, a następnie zduplikować lub upuścić klatki, aby wynik miał Może to być konieczne ze względu na problemy ze zgodnością z kontenerem formatu wyjściowego, odtwarzaczem i / lub urządzeniem:
-
W tym przykładzie klatki zostaną zduplikowane, aby przejść od 10 do 25. Dane wyjściowe konsoli poinformują Cię, czy ramki są gubione czy powielane.
-
demukser plików graficznych używa
-framerate
, podczas gdy wyjściowa liczba klatek na sekundę jest ustawiana za pomocą-r
. -
Może być konieczne dodanie opcji
-pix_fmt yuv420p
w w pewnych okolicznościach, jeśli „ponownie wyprowadzasz wideo H.264 (ffmpeg
konsola wyświetli ostrzeżenie, jeśli zajdzie taka potrzeba). Spowoduje to użycie schematu podpróbkowania barwy, który jest kompatybilny ze wszystkimi odtwarzaczami.
Komentarze
- ffmpeg wersja 3.2.2 mówi mi:
Option framerate not found.
🙁 - Tak, masz rację. Mimo to opcja
-framerate
nie istnieje już. Usunę swój komentarz, ponieważ tak naprawdę nie ma on nic wspólnego z konwersją serii obrazów do filmu z określoną liczbą klatek na sekundę. - @erik
-framerate
istnieje. ' s używane przez demuxery obrazu i rawvideo oraz niektóre urządzenia wejściowe, takie jak x11grab i v4l2. - Gdzie jest opcja
-framerate
udokumentowane? ' przeczytałem stronęman ffmpeg
, ale nie mogłem ' nie znaleźć. Może jakiś wskaźnik? - OK, znalazłem …
FFMPEG-DEVICES(1)
.
Odpowiedź
ffmpeg -framerate 30 -i img%03d.png output.mp4
wystarczy na koniec t wersja ffmpeg.
Komentarze
- Nie zapomnij o
-pix_fmt yuv420p
albo możesz otrzymać pliki tyle narzędzi programowych nie ' nie lubi: trac.ffmpeg.org/ticket/8856
Odpowiedź
Mówisz o interpolacji wideo. Nie ma możliwości, aby 7 fps zmieniło się w 30 fps bez interpolacji wideo … Zasadniczo chcesz uzyskać 30 fps od samego początku, w procesie tworzenia filmów … Ponieważ interpolacja wideo zajmie dużo zasobów i czasu, a może być wypełnione artefaktami.Słyszałem, że możesz zamienić jedno ujęcie w krótkie filmy, używając Adobe, ale dużo pracy ręcznej …
-framerate
, aby uzyskać pożądane wyniki.