Kontenery i kodeki

Derek Herman
Derek Herman
Jan Kowalski
Joe Medley

Aby umożliwić obsługę wielu przeglądarek, trzeba użyć programu FFmpeg do przekonwertowania pliku .mov na 2 różne kontenery: kontener MP4 i WebM. W praktyce kodek powinien być też określony w tym samym czasie. Na razie pozwalamy FFmpeg używać ustawień domyślnych.

Jeśli nie masz doświadczenia w tych pojęciach, zapoznaj się najpierw z podstawowymi informacjami o plikach multimedialnych. Jeśli nie masz zainstalowanego FFmpega, przeczytaj artykuł Podstawy aplikacji do multimediów, aby skonfigurować go w Dockerze.

Korzystamy z sugerowanej instalacji Dockera oraz pliku glocken.mov z sekcji Prepare media files for the web (Przygotowanie plików multimedialnych do wykorzystania w internecie) dodanego w katalogu media. We wszystkich poleceniach w tej sekcji użyliśmy FFmpeg w wersji 4.3.2.

Kontenery

Najpierw musimy utworzyć nasze 2 kontenery z pliku .mov z rozszerzeniami pliku .mp4 i .webm zawierającymi strumień audio i wideo. Jeśli nie wiesz, czym się różnią, zapoznaj się z podstawowymi informacjami o plikach multimedialnych, aby dowiedzieć się więcej o kontenerach i strumieniach.

  1. MP4

    /media # ffmpeg -i glocken.mov glocken.mp4
    
  2. WebM

    /media # ffmpeg -i glocken.mov glocken.webm
    

Tworzenie WebM trwa dłużej niż format MP4. Nie powinno to dziwić, gdy przyjrzymy się wynikom. MP4 kompresuje się do około 83% rozmiaru oryginalnego pliku, a WebM zmniejsza rozmiar do 78% oryginału, ale może być znacznie mniejszy. Twoje wyniki będą się różnić. Pamiętaj, że FFmpeg 4.2.2 ma ustawioną domyślną szybkość transmisji wideo na 200k, a w 4.3.2 nie ma domyślnej szybkości transmisji. Dlatego film nie jest już tylko4% oryginałem. Możesz to sprawdzić samodzielnie za pomocą polecenia bash ls -a w folderze, w którym znajdują się pliki multimedialne.

Na przykład:

/media # ls -l
-rw-r--r-- 1 root  root  12080306 Mar 7 12:16 glocken.mov
-rwx------ 1 root  root  10106446 Mar 7 12:33 glocken.mp4
-rwx------ 1 root  root   9503301 Mar 7 18:30 glocken.webm

Aby uzyskać niewielki plik, wykonaj te czynności:

/media # ffmpeg -i glocken.mov -b:v 200k glocken.webm
...
frame=  300 fps=3.6 q=0.0 Lsize=     483kB time=00:00:10.01 bitrate= 395.0kbits/s speed=0.121x
video:359kB audio:117kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.356068%
/media # ls -l
-rw-r--r-- 1 root  root  12080306 Mar 7 12:16 glocken.mov
-rwx------ 1 root  root  10106446 Mar 7 12:33 glocken.mp4
-rwx------ 1 root  root    494497 Mar 7 18:45 glocken.webm

Sprawdź swoje zadania

Aby zweryfikować wyniki, użyj narzędzi FFmpeg i Shaka Packager zgodnie z opisem w podstawowych informacjach o aplikacjach multimedialnych:

/media # packager input=glocken.mp4 --dump_stream_info
/media # ffmpeg -i glocken.mp4

Kodeki

Następnym krokiem jest kodek. Zgodnie z podstawowymi informacjami o plikach multimedialnych kodek nie jest tym samym co kontener (typ pliku). Dwa pliki tego samego typu kontenera mogą przechowywać dane skompresowane przy użyciu różnych kodeków. Na przykład format WebM umożliwia kodowanie dźwięku za pomocą elementów Vorbis lub Opus. Do zmiany kodeka używamy FFmpega. Na przykład to polecenie zwraca plik .mkv z kodekiem audio vorbis i kodekiem wideo av1.

/media # ffmpeg -i glocken.mov -c:a vorbis -c:v av1 glocken.mkv

W tym przykładzie flaga -c:a i -c:v służą do określenia kodeków audio i wideo.

Strona Konwersja multimediów zawiera listę poleceń potrzebnych do konwersji kodeków. W tabelach poniżej znajdziesz podsumowanie bibliotek używanych w FFmpeg do przeprowadzania konwersji kodeka z plików WebM i MP4. Oto formaty zalecane w przypadku odpowiednio DASH i HLS.

Wideo

Kodek Rozszerzenie Biblioteka
av1 WebM, MKV libaom-av1
h264 MP4 libx264
vp9 WebM libvpx-vp9

Audio

Kodek Rozszerzenie Biblioteka
AAC MP4 AAC
Opus WebM libopus
Vorbis WebM Libvorbis

Następnie pokażemy Ci, jak zmienić szybkość transmisji bitów nowo tworzonych plików.