Szybki przewodnik po używaniu FFmpeg do konwersji plików multimedialnych

Jest wiele narzędzi open source do edycji, poprawiania i konwersji multimediów na dokładnie to, czego potrzebujesz. Narzędzia takie jak Audacity czy Handbrake są fantastyczne, ale czasami chcesz po prostu szybko zmienić plik z jednego formatu na inny. Wejdź do FFmpeg.

FFmpeg jest zbiorem różnych projektów do obsługi plików multimedialnych. Jest on często używany za kulisami w wielu innych projektach związanych z mediami. Pomimo swojej nazwy, nie ma nic wspólnego z Moving Picture Experts Group lub niezliczonymi formatami multimedialnymi, które stworzyła.

W tym artykule będę używał FFmpeg poprzez narzędzie wiersza poleceń ffmpeg, które jest tylko pojedynczym, małym fragmentem projektu FFmpeg. Jest on dostępny w wielu różnych systemach operacyjnych i jest domyślnie dołączany do niektórych systemów operacyjnych. Można go pobrać ze strony FFmpeg lub przez większość menedżerów pakietów.

FFmpeg jest potężnym narzędziem, które potrafi zrobić z plikami multimedialnymi prawie wszystko, co można sobie wyobrazić. W tym artykule, jesteśmy zainteresowani używaniem go do konwertowania plików, więc nie będziemy brać głębokiego nurkowania w jego całym zestawie funkcji. Zanim spojrzymy na użycie FFmpeg, najpierw musimy szybko spojrzeć na to, czym dokładnie jest plik multimedialny.

Pliki multimedialne

Na bardzo wysokim poziomie, plik multimedialny jest podzielony na kontener i jego strumienie. Strumienie zawierają rzeczywiste komponenty AV, takie jak audio lub wideo filmu, i są kodowane przy użyciu określonego kodowania mediów lub kodeka. Każdy kodek ma swoje własne właściwości, mocne i słabe strony. Na przykład, kodek FLAC jest dobry dla wysokiej jakości bezstratnego dźwięku, podczas gdy Vorbis został zaprojektowany, aby konkurować z MP3 pod względem rozmiaru pliku, oferując jednocześnie lepszą jakość dźwięku. Oznacza to, że plik w formacie FLAC będzie znacznie większy niż strumień audio Vorbis, ale powinien brzmieć lepiej. Żaden z nich nie jest z natury lepszy od drugiego, ponieważ każdy z nich próbuje robić różne rzeczy.

Kontener jest opakowaniem dla strumieni. Przedstawia on pojedynczy interfejs, z którym mogą współdziałać odtwarzacze multimedialne i narzędzia. Niektóre kontenery są bardzo zaawansowane i pozwalają na dowolny rodzaj strumienia, w tym wiele strumieni wideo i audio wewnątrz jednego kontenera. Strumienie w kontenerze nie muszą być tylko audio lub wideo chociaż. Różne kontenery pozwalają na różne strumienie, np. napisy, informacje o rozdziałach lub inne metadane. Wszystko zależy od tego, na co dany kontener pozwala.

Jest to abstrakcyjna reprezentacja plików multimedialnych i pomija wiele różnic pomiędzy kontenerami. Wiele z nich wymaga pewnych strumieni i metadanych lub nakłada ograniczenia na dozwolone kodeki lub zawartość. To wyjaśnienie jest wystarczające, aby przejść przez ten artykuł. Aby dowiedzieć się więcej, kliknij na linki powyżej.

Bądź świadomy, że kodowanie wideo i audio może zająć bardzo dużo czasu, aby uruchomić. Powinieneś być przygotowany na to, że kiedy używasz FFmpeg, możesz się na chwilę rozsiąść.

Podstawowa konwersja

Rzeczyą, która przeszkadza większości ludzi, gdy chodzi o konwersję audio i wideo, jest wybór odpowiednich formatów i kontenerów. Na szczęście FFmpeg jest całkiem sprytny ze swoimi domyślnymi ustawieniami. Zazwyczaj automatycznie wybiera prawidłowe kodeki i kontenery bez skomplikowanej konfiguracji.

Na przykład, powiedzmy, że masz plik MP3 i chcesz go przekonwertować na plik OGG:

ffmpeg -i input.mp3 output.ogg

To polecenie bierze plik MP3 o nazwie input.mp3 i konwertuje go na plik OGG o nazwie output.ogg. Z punktu widzenia FFmpeg oznacza to konwersję strumienia audio MP3 na strumień audio Vorbis i zawijanie tego strumienia w kontener OGG. Nie musiałeś określać typów strumienia lub kontenera, ponieważ FFmpeg zrobił to za Ciebie.

To działa również z plikami wideo:

ffmpeg -i input.mp4 output.webm

Ponieważ WebM jest dobrze zdefiniowanym formatem, FFmpeg automatycznie wie, jakie wideo i audio może obsługiwać i przekonwertuje strumienie na prawidłowy plik WebM.

Zależnie od wybranego kontenera, to nie zawsze będzie działać. Na przykład, kontenery takie jak Matroska są zaprojektowane do obsługi prawie każdego strumienia, który chcesz w nich umieścić, niezależnie od tego, czy jest on poprawny czy nie. Oznacza to, że polecenie:

ffmpeg -i input.mp4 output.mkv

może dać w wyniku plik z takimi samymi kodekami, jakie miał plik input.mp4, co może, ale nie musi być tym, czego chcesz.

Wybieranie kodeków

Co więc zrobić, gdy chcesz użyć kontenera takiego jak Matroska (który może obsłużyć prawie każdy strumień), ale nadal mieć wpływ na to, jakie kodeki znajdą się na wyjściu? FFmpeg na ratunek! Możesz wybrać potrzebne kodeki za pomocą flagi -c.

Ta flaga pozwala ustawić inny kodek do użycia dla każdego strumienia. Na przykład, aby ustawić strumień audio jako Vorbis, użyłbyś następującego polecenia:

ffmpeg -i input.mp3 -c:a libvorbis output.ogg

To samo można zrobić, aby zmienić strumień wideo i audio:

ffmpeg -i input.mp4 -c:v vp9 -c:a libvorbis output.mkv

W ten sposób powstanie kontener Matroska ze strumieniem wideo VP9 i strumieniem audio Vorbis, zasadniczo taki sam jak WebM, który zrobiliśmy wcześniej.

Komenda ffmpeg -codecs wypisze każdy kodek, o którym wie FFmpeg. Wynik tej komendy będzie się zmieniał w zależności od wersji FFmpeg, którą masz zainstalowaną.

Zmiana pojedynczego strumienia

Więcej niż byś chciał, plik, który masz jest częściowo poprawny z tylko jednym strumieniem w złym formacie. Ponowne zakodowanie poprawnego strumienia może być bardzo czasochłonne. FFmpeg może pomóc w tej sytuacji:

ffmpeg -i input.webm -c:v copy -c:a flac output.mkv

Ta komenda kopiuje strumień wideo z input.webm do output.mkv i koduje strumień audio Vorbis do FLAC. Flaga -c jest naprawdę potężna.

Zmiana kontenera

Poprzedni przykład można zastosować zarówno do strumienia audio, jak i wideo, co pozwala na konwersję z jednego formatu kontenera na inny bez konieczności dodatkowego kodowania strumienia:

ffmpeg -i input.webm -c:av copy output.mkv

Wpływanie na jakość

Gdy mamy już informacje o kodekach, następne pytanie brzmi: Jak ustawić jakość każdego strumienia?

Najprostszą metodą jest zmiana bitrate, co może, ale nie musi skutkować inną jakością. Ludzkie zdolności widzenia i słyszenia nie są tak czyste i wyraźne, jak chcielibyśmy myśleć. Czasami zmiana bitrate’u powoduje ogromną różnicę w subiektywnej jakości. Innym razem może nie zrobić nic poza zmianą rozmiaru pliku. Czasami bardzo trudno jest powiedzieć, co się stanie bez wypróbowania tego.

Aby ustawić bitrate każdego strumienia, używasz flagi -b, która działa w podobny sposób jak flaga -c, z wyjątkiem tego, że zamiast opcji kodeków ustawiasz bitrate.

Na przykład, aby zmienić bitrate wideo, użyłbyś jej w następujący sposób:

ffmpeg -i input.webm -c:a copy -c:v vp9 -b:v 1M output.mkv

To skopiuje audio (-c:a copy) z input.webm i przekonwertuje wideo do kodeka VP9 (-c:v vp9) z prędkością bitową 1M/s (-b:v), wszystko zapakowane w kontener Matroska (output.mkv).

Innym sposobem, w jaki możemy wpłynąć na jakość, jest dostosowanie liczby klatek na sekundę w wideo za pomocą opcji -r:

ffmpeg -i input.webm -c:a copy -c:v vp9 -r 30 output.mkv

Tworzy to nową Matroskę ze skopiowanym strumieniem audio i wymuszoną liczbą klatek na sekundę w strumieniu wideo do 30, zamiast używać liczby klatek na sekundę z wejścia (-r 30).

Możesz także dostosować wymiary wideo za pomocą FFmpeg. Najprostszym sposobem jest użycie z góry ustalonego rozmiaru wideo:

ffmpeg -i input.mkv -c:a copy -s hd720 output.mkv

To modyfikuje wideo do 1280×720 na wyjściu, ale możesz ustawić szerokość i wysokość ręcznie, jeśli chcesz:

ffmpeg -i input.mkv -c:a copy -s 1280x720 output.mkv

To produkuje dokładnie to samo wyjście, co wcześniejsze polecenie. Jeśli chcesz ustawić niestandardowe rozmiary w FFmpeg, pamiętaj, że parametr szerokości (1280) pojawia się przed wysokością (720).

Dostosowanie liczby klatek na sekundę i bitrate to dwie prymitywne, ale skuteczne techniki wpływania na jakość mediów. Ustawienie tych wartości na bardzo wysokim poziomie nie poprawi jakości istniejącego źródła, jeśli jego jakość jest już niska.

Zmiana tych ustawień jest najbardziej skuteczna w przypadku szybkiego zmniejszania strumienia o wysokiej jakości w celu uzyskania pliku o mniejszym rozmiarze. Dostosowanie rozmiaru filmu nie poprawi jakości, ale może sprawić, że będzie on lepiej pasował do tabletu zamiast do telewizora. Zmiana rozmiaru wideo 640×480 na 4K nie poprawi go.

Zmiana jakości plików jest sprawą bardzo subiektywną, co oznacza, że nie ma jednego sposobu, który będzie działał za każdym razem. Najlepszą metodą jest dokonanie pewnych zmian i przetestowanie, czy wygląda lub brzmi lepiej dla Ciebie.

Modyfikowanie strumieni

Często masz plik, który jest prawie doskonały, i po prostu trzeba przyciąć kilka części off. Można to zrobić łatwiej za pomocą narzędzia, które pokazuje, co zmieniasz, ale jeśli wiesz dokładnie, gdzie chcesz go przyciąć, bardzo łatwo to zrobić w FFmpeg:

ffmpeg -i input.mkv -c:av copy -ss 00:01:00 -t 10 output.mkv

To skopiuje strumienie wideo i audio (-c:av copy), ale przytnie wideo. Opcja -t ustawia czas trwania przycinania na 10 sekund, a opcja -ss ustawia punkt początkowy wideo do przycięcia, w tym przypadku na jedną minutę (00:01:00). Możesz być bardziej precyzyjny niż tylko godziny, minuty i sekundy, schodząc do milisekund w razie potrzeby.

Wyodrębnianie audio

Czasami nie zależy ci na wideo, chcesz tylko audio. Na szczęście jest to bardzo proste w FFmpeg z flagą -vn:

ffmpeg -i input.mkv -vn audio_only.ogg

Ta komenda wyodrębnia tylko dźwięk z wejścia, koduje go jako Vorbis i zapisuje w pliku audio_only.ogg. Teraz masz odizolowany strumień audio. Możesz także użyć flag -an i -sn w ten sam sposób do usunięcia strumieni audio i napisów.

Robiąc z tego GIF-a

Ostatnio animowane GIF-y (z twardym g, ponieważ nie jestem potworem) powróciły. Osobiście uważam, że GIF jest najgorszym formatem, jaki można wybrać dla wideo. Ma straszną jakość kompresji i rozmiar; ma bardzo twarde ograniczenia dotyczące kolorów, liczby klatek na sekundę i metadanych kontenera; i nie może obsługiwać dźwięku. Mimo to, jest dość popularny. Więc, jak możesz zrobić z klipu wideo animowanego GIF-a?

Użycie flagi -an, podobnej do tego, co zrobiliśmy powyżej, jest lepsze niż tworzenie animowanego GIF-a, jeśli chcesz zrobić wideo bez dźwięku, ale jest wiele miejsc, które obsługują GIF-y, które nie obsługują innego formatu wideo. Dla wszystkich tych:

ffmpeg -i input.mkv output.gif

To polecenie tworzy GIF-a o takich samych wymiarach jak plik wejściowy. Jest to często zły pomysł, ponieważ GIF-y nie kompresują się dobrze w porównaniu z innymi formatami wideo (z mojego doświadczenia wynika, że GIF będzie około ośmiokrotnie większy niż źródłowy plik wideo). Pomocne może być użycie opcji -s do zmiany rozmiaru GIF-a na nieco mniejszy, zwłaszcza jeśli źródło wejściowe jest dość duże, jak wideo HD.

Inne narzędzia

Mimo że FFmpeg jest narzędziem do większości zadań AV, nie jest doskonały do wszystkiego. Istnieją pewne narzędzia, które, używane w połączeniu z FFmpeg, mogą sprawić, że wszystko będzie trochę łatwiejsze.

Pobieranie filmów z YouTube

Może być bardzo łatwo przesłać coś do YouTube, stracić oryginalny film źródłowy i pozostać tylko wersja z YouTube. Jaki jest najłatwiejszy sposób na odzyskanie kopii filmów z YouTube?

Youtube-dl to małe narzędzie, którego możesz użyć do pobierania filmów z YouTube i kilku innych serwisów strumieniowania wideo. Jest bardzo proste w użyciu:

youtube-dl https://www.youtube.com/watch?v=2m5nW9CQLJ0

Ta komenda pobiera wideo pod wskazanym adresem URL i zapisuje je lokalnie.

Youtube-dl ma kilka opcji kontroli jakości i formatu pobieranego wideo, ale ja uważam, że łatwiej jest użyć powyższej komendy. Pobiera ono najwyższej jakości audio i wideo do jednego pliku, a następnie używam FFmpeg do przekonwertowania ich na żądany format.

Uzyskiwanie informacji o mediach

Czasami wszystko, co musisz wiedzieć, to co jest wewnątrz kontenera mediów. Chociaż istnieje kilka narzędzi, które mogą to zrobić, moim preferowanym jest MediaInfo. MediaInfo pokazuje wszystkie informacje wewnątrz kontenera medialnego, dla każdego z różnych strumieni, jak również metadane dla pliku wejściowego. To daje ci wszystko, co możesz chcieć wiedzieć – i prawdopodobnie masę rzeczy, których nie wiedziałeś.

Wykonanie polecenia mediainfo inputFile.mkv wypluwa listę informacji o pliku wejściowym w formie czytelnej dla człowieka.

I więcej…

To jest tylko zarysowanie powierzchni tego, co FFmpeg może zrobić. Na szczęście dokumentacja dla FFmpeg i innych narzędzi projektu jest bardzo dobra i warta sprawdzenia. Dowiesz się z niej wszystkiego o wielu różnych sztuczkach, które ten pies potrafi.

Jeśli szukasz narzędzia z interfejsem graficznym do konwertowania multimediów, Handbrake jest wyjątkowo dobrym programem dostępnym w systemach Linux, Mac OS X i Windows. Handbrake używa FFmpeg (wśród innych narzędzi) pod maską.

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.