Sam próbowałem to rozgryźć, ale niezliczona ilość opcji mnie zaskakuje.
Chcę używać idealnie albo ffmpeg
czy mencoder
(lub coś innego, ale te dwa Wiem, że pracuje) przekonwertować dowolny film przychodzące do ustalonej wielkości ekranu.
Jeśli wideo jest na niego szersze lub za krótkie, należy je przyciąć do środka. Jeśli nie jest to odpowiedni rozmiar, zmień rozmiar w górę lub w dół, aby uzyskać dokładnie stały rozmiar ekranu.
Dokładnie ostatnia rzecz, której potrzebuję, to 720x480 w XVid AVI ze ścieżką audio MP3.
Znalazłem wiele stron pokazujących, jak zmienić rozmiar do maksymalnej rozdzielczości, ale muszę mieć dokładnie taką rozdzielczość wideo (z przyciętymi dodatkowymi częściami, bez czarnych pasków).
Czy ktoś może mi powiedzieć, że powinienem uruchomić wiersz poleceń - a przynajmniej doprowadzić mnie tam / w większości? Jeśli musi to być wiele wierszy poleceń (uruchom X, aby uzyskać rozdzielczość, wykonaj te obliczenia, a następnie uruchom Y z wynikiem tych obliczeń), mogę to skrypty.
źródło
Odpowiedzi:
Nie jestem guru ffmpeg, ale to powinno wystarczyć.
Przede wszystkim możesz uzyskać rozmiar wejściowego wideo w następujący sposób:
Dzięki stosunkowo nowej wersji ffmpeg możesz zmienić rozmiar swojego filmu za pomocą następujących opcji:
Możesz ustawić szerokość lub wysokość na
-1
, aby umożliwićffmpeg
zmianę rozmiaru wideo z zachowaniem proporcji. W rzeczywistości-2
jest lepszym wyborem, ponieważ obliczona wartość powinna być parzysta. Więc możesz wpisać:Po uzyskaniu wideo może być większe niż oczekiwano,
720x480
ponieważ pozwalaszffmpeg
obliczyć wysokość, więc musisz go przyciąć. Można to zrobić w następujący sposób:Na koniec możesz napisać taki skrypt (można go łatwo zoptymalizować, ale zapewniłem czytelność):
źródło
echo "scale=3; ${in_width}/${out_width}*1000"| bc | awk '{printf "%d", $0}'
h_rate =echo "scale=3; ${in_height}/${out_height}*1000"| bc | awk '{printf "%d", $0}'
# Weźmy krótszy bok, więc film będzie co najmniej tak duży # jak pożądany rozmiar, i przyciąć dłuższy bok: crop_side = 'n' jeśli [$ {w_rate} -gt $ {h_rate}]; następnie scale = "- 2: $ {out_height}" crop_side = 'w' else scale = "$ {out_width}: - 2" crop_side = 'h' fi 'Zamień „input.file” na nazwę pliku wejściowego.
źródło
-c:a copy scaled_result.mp4
Jeśli chcesz przycinać i skalować za jednym razem, możesz utworzyć łańcuch filtrów przycinania i skalowania w następujący sposób:
Powyższe pierwsze przycina wideo do portretu 16: 9, a następnie skaluje do wysokości 400 pikseli x odpowiedniej (parzystej liczby) szerokości.
źródło
Jestem nowy w ffmpeg, ale teraz mam ładny, mały konwerter w VB.NET, który tworzy surowe filmy o różnych formatach wyjściowych do użytku w małych urządzeniach, które mają dostęp do karty SD, ale nie mają wystarczającej mocy, aby dekodować złożone wideo.
Ze względu na sposób, w jaki działa podczas zmiany rozmiaru i przycinania, musiałem go kodować ręcznie i budować parametry. Zasadniczo muszę znać wynikową szerokość i wysokość.
Mam 2 pola wyboru dla opcji: -
Zachowaj proporcje obrazu (X) Wypełnij wszystkie piksele (X)
Potrzebne są tylko 4 zmienne jako dane wejściowe (1) Oryginalna szerokość wideo, (2) Oryginalna wysokość wideo, (3) Szerokość urządzenia, (4) Wysokość urządzenia.
Chociaż dla VB.NET można dostosować dość łatwo dla dowolnego języka.
źródło