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