W moim telefonie mam funkcję nagrywania filmów w podwyższonych fps (czyli krótko mówiąc: slow-motion). Oglądając dzisiaj jeden z takich filmików zapragnąłem zobaczyć go od tyłu. I… pojawił się problem – jak to, do diabła, zrobić szybko i wygodnie? No i – oczywiście – używając tylko darmowych narzędzi? Jak zwykle, skorzystałem z mencodera, ale tym razem w połączeniu z mplayerem i tworząc cały skrypt, gdyż cały proces jest kilkustopniowy. Zatem – do dzieła!
Pierwszą czynnością, jaką musimy wykonać, jest rozbiórka naszego video do pojedynczych klatek. Użyjemy do tego mplayera:
mplayer -vo png:outdir=klatki video.avi
W efekcie otrzymamy katalog klatki, a w nim pliki png z poszczególnymi klatkami z całego video. Zanim przekujemy je w video, musimy przygotować listę plików – w kolejności odwróconej. Z pomocą przyjdzie nam zwykła komenda dir:
dir klatki /b /s /o-n >> klatki.txt
W pliku zapisane zostaną pliki wraz z pełnymi ścieżkami, w porządku alfabetycznym malejącym. Taki plik może już posłużyć nam do zakodowania naszego nowego video:
mencoder mf://@klatki.txt -mf fps=30:type=png -ovc x264 .... itd.
Ja, w celu wygodnego używania, napisałem sobie mały skrypt, który przyjmuje jeden lub dwa parametry. Pierwszy, to oczywiście nazwa pliku video do obrobienia, a drugi, to docelowy fps. Jeśli drugiego parametru nie podamy, zostanie użyta wartość 30 klatek na sekundę. Na końcu, skrypt sprząta po sobie 🙂 Życzę miłego używania!
set MPLAYER="C:\Program Files (x86)\mplayer\mplayer.exe" set MENCODER="C:\Program Files (x86)\mplayer\mencoder.exe" mkdir %1.images %MPLAYER% -vo png:outdir=%1.images %1 dir %1.images /b /s /o-n >> %1.frames.txt set H264_FAST=-ovc x264 -x264encopts subq=4:bframes=2:b_pyramid=normal:weight_b set H264_HIGH=-ovc x264 -x264encopts subq=5:8x8dct:frameref=2:bframes=3:b_pyramid=normal:weight_b set H264_VHIGH=-ovc x264 -x264encopts subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid=normal:weight_b set FPS=%2 if [%2] == [] set FPS=30 %MENCODER% mf://@%1.frames.txt -mf fps=%FPS%:type=png %H264_HIGH% -nosound -o %1.reversed.avi rd /s /q %1.images del %1.frames.txt