Konwertuj wideo na stały rozmiar ekranu, przycinając i zmieniając rozmiar

14

Próbowałem to rozgryźć sam, ale niezliczona ilość opcji mnie zaskakuje.

Chcę używać idealnie albo ffmpegczy 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 to 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 mam uruchomić linię poleceń - a przynajmniej przynajmniej zaprowadzić mnie tam? 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.

Andy Jeffries
źródło

Odpowiedzi:

22

Coś takiego powinno działać z odpowiednimi parametrami dla każdego przypadku:

Uwaga: Oryginalna odpowiedź została opublikowana pod tym linkiem: Jak mogę przyciąć wideo za pomocą ffmpeg? które pierwotnie opublikowałem i edytowałem kilka razy w celu aktualizacji do najnowszych opcji w najnowszych wersjach ffmpeg. Wielkie podziękowania dla slhck , Jonathan. , Anton Rudeshko , LordNeckbeard i przyszli opiekunowie.


W najnowszych wersjach FFmpeg użyj cropfiltra :

ffmpeg -i in.mp4 -filter:v "crop=out_w:out_h:x:y" out.mp4

Gdzie opcje są następujące:

  • out_w to szerokość prostokąta wyjściowego
  • out_h to wysokość prostokąta wyjściowego
  • xi yokreśl lewy górny róg prostokąta wyjściowego

Oryginalny obraz

oryginalny obraz
Oryginalny obraz 320 x 240

Przykład 1

80x60

Aby przyciąć sekcję 80 × 60, zaczynając od pozycji (200, 100):

ffmpeg -i in.mp4 -filter:v "crop=80:60:200:100" -c:a copy out.mp4

Przykład 2

dolna prawa ćwiartka

Aby przyciąć prawy dolny kwartał:

ffmpeg -i in.mp4 -filter:v "crop=in_w/2:in_h/2:in_w/2:in_h/2" -c:a copy out.mp4

To jest to samo co:

ffmpeg -i in.mp4 -filter:v "crop=320/2:240/2:320/2:240/2" -c:a copy out.mp4

Który jest taki sam jak:

ffmpeg -i in.mp4 -filter:v "crop=240:120:240:120" -c:a copy out.mp4
  • Możesz odwołać się do rozmiaru obrazu wejściowego za pomocą in_wi in_hjak pokazano w tym pierwszym przykładzie. Szerokość wyjściowa i wysokość mogą być również używane z out_wi out_h.

Przykład 3

20 pikseli od góry i 20 od dołu

Przytnij 20 pikseli od góry i 20 od dołu:

 ffmpeg -i in.mp4 -filter:v "crop=in_w:in_h-40" -c:a copy out.mp4
  • Filtr automatycznie wycentrować w uprawach xi ysą pomijane, tak jak w tym przykładzie.

Podgląd

Możesz pobrać uprawę (heh heh) i obejrzeć ją na żywo za pomocą ffplay:

ffplay -i input -vf "crop=in_w:in_h-40"

W ten sposób możesz eksperymentować i dostosowywać przycinanie bez konieczności kodowania, przeglądania, powtarzania.

Notatki

  • crop filtruj dokumentację

  • Domyślny koder dla MP4 to libx264(wideo H.264) lub mpeg4(wideo MPEG-4 część 2) w zależności od ffmpegwersji. Aby uzyskać więcej informacji, zobacz FFmpeg Wiki: Podręcznik kodowania wideo H.264 .

  • Zamiast przycinania i ponownego kodowania, rozważ przycinanie podczas odtwarzania. Jest to możliwe z każdym graczem, z którego warto skorzystać.

  • Starożytny ffmpegbuduje używane -croptop, -cropbottom, -cropleft, -croprightopcje zamiast tego cropfiltra. Jeśli tak jest w Twoim przypadku, zdobądź nowoczesnośćffmpeg . Rozwój jest bardzo aktywny i nie ma powodu, aby używać antyków.

Geppettvs D'Constanzo
źródło
Dodatkowe punkty za podgląd, dzięki ffplayktórym ffmpegmożna przycinać rozmiar ekranu wideo w praktyce.
SpeedCoder5