Próbowałem wymyślić, jak obracać filmy za pomocą FFmpeg. Pracuję z filmami iPhone wykonanymi w trybie portretowym. Wiem, jak określić bieżące stopnie obrotu za pomocą MediaInfo (doskonała biblioteka, btw), ale teraz utknąłem na FFmpeg.
Z tego, co przeczytałem, musisz użyć opcji vfilter . Zgodnie z tym, co widzę, powinno to wyglądać tak:
ffmpeg -vfilters "rotate=90" -i input.mp4 output.mp4
Nie mogę tego jednak uruchomić. Po pierwsze, -vfilters już nie istnieje, teraz jest po prostu -vf . Po drugie, pojawia się ten błąd:
No such filter: 'rotate'
Error opening filters!
O ile mi wiadomo, mam FFmpeg na wszystkie opcje. Uruchomienie ffmpeg -filters pokazuje:
Filters:
anull Pass the source unchanged to the output.
aspect Set the frame aspect ratio.
crop Crop the input video to x:y:width:height.
fifo Buffer input images and send them when they are requested.
format Convert the input video to one of the specified pixel formats.
hflip Horizontally flip the input video.
noformat Force libavfilter not to use any of the specified pixel formats
for the input to the next filter.
null Pass the source unchanged to the output.
pad Pad input image to width:height[:x:y[:color]] (default x and y:
0, default color: black).
pixdesctest Test pixel format definitions.
pixelaspect Set the pixel aspect ratio.
scale Scale the input video to width:height size and/or convert the i
mage format.
slicify Pass the images of input video on to next video filter as multi
ple slices.
unsharp Sharpen or blur the input video.
vflip Flip the input video vertically.
buffer Buffer video frames, and make them accessible to the filterchai
n.
color Provide an uniformly colored input, syntax is: [color[:size[:ra
te]]]
nullsrc Null video source, never return images.
nullsink Do absolutely nothing with the input video.
Opcje vflip i hflip są świetne, ale po prostu nie doprowadzą mnie tam, gdzie potrzebuję. Potrzebuję możliwości obracania filmów co najmniej o 90 stopni. 270 stopni byłoby również doskonałą opcją. Gdzie się podziały opcje obracania?
źródło
-vf "vflip,hflip"
-vf "vflip,hflip"
działa jak urok.Odpowiedzi:
Obróć o 90 w prawo:
Dla parametru transpozycji możesz przekazać:
Użyj
-vf "transpose=2,transpose=2"
do 180 stopni.Upewnij się, że używasz najnowszej wersji ffmpeg stąd (kompilacja statyczna będzie działać poprawnie).
Pamiętaj, że spowoduje to ponowne zakodowanie części audio i wideo. Zwykle możesz skopiować dźwięk bez dotykania go, używając
-c:a copy
. Aby zmienić jakość wideo, ustaw bitrate (na przykład za pomocą-b:v 1M
) lub zajrzyj do przewodnika kodowania H.264, jeśli chcesz opcji VBR.Rozwiązaniem jest również użycie tego skryptu wygody .
źródło
-vcodec libx264
. Ale byłoby wspaniale, gdybym nie musiał sprawdzać, jakiego kodowania użyć, ponieważ ffmpeg powinien go już znać. Jakieś sugestie?-vf "transpose=2,transpose=2"
cclock_flip
,clock
,cclock
lubclock_flip
zamiast0
,1
,2
i3
.Jeśli nie chcesz ponownie kodować wideo ORAZ odtwarzacz obsługuje metadane rotacji, możesz po prostu zmienić rotację metadanych za pomocą ffmpeg:
źródło
ffmpeg -i input.m4v 2>&1 | grep rotate
ffmpeg -i input.m4v -map_metadata 0 -metadata:s:v rotate="90" -codec copy output.m4v
. W ten sposób wszystkie globalne metadane z pliku wejściowego zostaną skopiowane jako globalne metadane do pliku wyjściowego i zmieniane będą tylko metadane rotacyjne.rotate=0
.-metadata:s:v rotate="180"
, nie działało. Czy to powinno działać?ffmpeg -i input.mp4 -codec copy -map_metadata 0 -metadata:s:v:0 rotate=0 output.mp4
Próbowałeś już
transpose
? Jak (z drugiej odpowiedzi)Jeśli używasz starej wersji, musisz zaktualizować ffmpeg, jeśli chcesz skorzystać z funkcji transpozycji, ponieważ została dodana w październiku 2011 r.
Strona pobierania FFmpeg oferuje kompilacje statyczne, które można wykonać bezpośrednio bez konieczności ich kompilacji.
źródło
Natknąłem się na tę stronę, szukając tej samej odpowiedzi. Minęło sześć miesięcy, odkąd pierwotnie o to pytano, a od tego czasu kompilacje były wielokrotnie aktualizowane. Chciałem jednak dodać odpowiedź dla wszystkich osób, które tu przychodzą i szukają tych informacji.
Używam wersji Debian Squeeze i FFmpeg z tych repozytoriów.
Strona MAN ffmpeg zawiera następujące zastosowanie
Kluczowe jest to, że nie należy używać zmiennej stopnia, ale predefiniowaną zmienną ustawienia ze strony MAN.
źródło
Aby obrócić obraz zgodnie z ruchem wskazówek zegara, możesz użyć filtra obrotu wskazującego dodatni kąt w radianach. Dzięki 90 stopniom równym PI / 2 możesz to zrobić w następujący sposób:
dla przeciwnie do ruchu wskazówek zegara kąt musi być ujemny
Filtr transpozycji będzie działał równie dobrze dla 90 stopni, ale dla innych kątów jest to szybszy lub jedyny wybór.
źródło
*
zachowuje się jak mnożenie:ffmpeg -i in.avi -vf "rotate=-8*PI/40" -q 1 out.avi
(nieco mniejszy obrót niż -PI / 4 = -10 * PI / 40)nie będzie działać, nawet z najnowszym źródłem ...
musi zmienić kolejność:
działa w porządku
źródło
rotate=PI/2
lubrotate=90*PI/180
jest potrzebneJeśli pojawia się komunikat „Kodek jest eksperymentalny, ale eksperymentalne kodeki nie są włączone”, użyj tego błędu:
Stało się ze mną dla jakiegoś pliku .mov z dźwiękiem AAC.
źródło
-sameq
Option 'sameq' was removed. If you are looking for an option to preserve the quality (which is not what -sameq was for), use -qscale 0 or an equivalent quality factor option. Failed to set value '1' for option 'sameq': Invalid argument
qscale również daje błąd.Please use -q:a or -q:v, -qscale is ambiguous
, ale nadal działa.Ten skrypt, który wyświetli pliki o strukturze katalogów w „fixedFiles”. W tej chwili jest ustalony na pliki MOV i wykona szereg transformacji w zależności od pierwotnego „obrotu” wideo. Działa z przechwyconymi filmami z iOS na Macu z systemem Mavericks, ale powinien być łatwo eksportowany. Polega na zainstalowaniu zarówno exiftool, jak i ffmpeg .
źródło
[Parsed_pad_2 @ 0x7f8b15c3a580] Input area -420:0:1500:1080 not within the padded area 0:0:1080:1080 or zero-sized
\ n `[Parsed_pad_2 @ 0x7f8b15c3a580] Failed to configure input pad on Parsed_pad_2
\ nError reinitializing filters!
\ nFailed to inject frame into filter network: Invalid argument
\ nError while processing the decoded data for stream #0:0
\ nConversion failed!
Odpowiedź Alexy prawie dla mnie zadziałała, z wyjątkiem tego, że otrzymywałem ten błąd:
Po prostu musiałem dodać parametr (-r 65535/2733) do polecenia i zadziałało. Pełne polecenie brzmiało zatem:
źródło
24000/1001
byłoby bardziej dokładne.Dodatkowym rozwiązaniem z innym podejściem niż ostatnie wspomniane rozwiązania jest sprawdzenie, czy sterownik aparatu obsługuje sterowanie kamerą v4l2 (co jest bardzo częste).
W terminalu wpisz:
Jeśli sterownik aparatu obsługuje sterowanie kamerą v4l2, powinieneś otrzymać coś takiego (poniższa lista zależy od sterowania obsługiwanego przez sterownik aparatu):
A jeśli masz szczęście, obsługuje poziomo i pionowo .
Następnie wszystko, co musisz zrobić, to ustawić horizontal_flip przez:
lub vertical_flip przez:
a następnie możesz zadzwonić do urządzenia wideo, aby przechwycić nowe wideo (patrz przykład poniżej), a wideo zostanie obrócone / odwrócone.
Oczywiście, jeśli potrzebujesz przetworzyć już istniejące wideo, ta metoda nie jest rozwiązaniem, którego szukasz.
Zaletą tego podejścia jest to, że odwracamy obraz na poziomie czujnika, więc czujnik sterownika już daje nam odwrócony obraz, co oszczędza aplikacji (jak FFmpeg) dalsze i niepotrzebne przetwarzanie.
źródło
Niestety, wersja ffmpeg Ubuntu obsługuje filmy wideo.
Aby uzyskać ten sam efekt, musisz użyć avidemux lub innego edytora.
W sposób programowy zalecany jest mencoder.
źródło
Smartfon: Zapisano film w formacie pionowym
Chcesz wysłać go na stronę internetową, to było 90 ° w lewo (przeciwnie do ruchu wskazówek zegara, format poziomy) hmm.
ffmpeg -i input.mp4 -vf "rotate=0" output.mp4
czy to. Znowu dostałem format pionowy
debian buster: ffmpeg - wersja ffmpeg wersja 4.1.4-1 ~ deb10u1 Copyright (c) 2000-2019 deweloperzy FFmpeg
źródło