Kontenery i kodeki

Derek Herman
Derek Herman
Joe Medley
Joe Medley

Aby zapewnić obsługę wielu przeglądarek, musisz użyć FFmpeg do przekonwertowania pliku .mov do dwóch różnych kontenerów: MP4 i WebM. W praktyce prawdopodobnie określisz kodek w tym samym czasie. Na razie FFmpeg używa domyślnych ustawień.

Jeśli te zagadnienia są dla Ciebie nowe, przed kontynuacją zapoznaj się z podstawami dotyczącymi plików multimedialnych. Jeśli nie masz zainstalowanego FFmpeg, przeczytaj artykuł Podstawy aplikacji do obsługi multimediów, aby dowiedzieć się, jak skonfigurować tę aplikację za pomocą Dockera.

Używamy sugerowanej instalacji Dockera i pliku glocken.mov z dokumentu Przygotowanie plików multimedialnych do internetu dodanego w katalogu media. Do wszystkich poleceń w tej sekcji użyliśmy FFmpeg w wersji 4.3.2.

Kontenery

Najpierw musimy utworzyć 2 kontenery z pliku .mov z rozszerzeniem .mp4.webm z obiema ścieżkami audio i wideo. Jeśli nie wiesz, czym różnią się kontenery i strumienie, zapoznaj się z podstawami dotyczącymi plików multimedialnych.

  1. MP4

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

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

Tworzenie pliku WebM zajmuje więcej czasu niż MP4. Patrząc na wyniki, nie jest to zaskoczeniem. Plik MP4 jest kompresowany do około 83% pierwotnego rozmiaru, a plik WebM do 78% pierwotnego rozmiaru, ale może być znacznie mniejszy. Wyniki mogą się różnić. Należy pamiętać, że w FFmpeg 4.2.2 domyślna szybkość transmisji wideo to 200k, a w 4.3.2 nie jest ustawiana domyślna szybkość transmisji. Film nie jest już tylko4% kopią oryginału. Możesz to sprawdzić samodzielnie, używając polecenia ls -a bash w folderze, w którym znajdują się Twoje 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ć mały 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

Sprawdzanie efektów pracy

Aby zweryfikować wyniki, użyj FFmpeg i Shaka Packager, jak pokazano w artykule Podstawy aplikacji multimedialnych:

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

Kodeki

Kolejnym elementem jest kodek. Jak wyjaśniono w artykule Podstawy dotyczące plików multimedialnych, kodek nie jest tym samym co kontener (typ pliku). Dwa pliki tego samego typu kontenera mogą zawierać dane skompresowane przy użyciu różnych kodeków. Na przykład format WebM umożliwia kodowanie dźwięku za pomocą kodeka Vorbis lub Opus. Do zmiany kodeka używamy FFmpeg. Na przykład to polecenie generuje 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żą odpowiednio do określenia kodeków audio i wideo.

Na stronie Konwersja multimediów znajdują się polecenia potrzebne do konwersji kodeków. W tabelach poniżej znajdziesz podsumowanie bibliotek używanych w FFmpeg do konwersji kodeków w przypadku plików WebM i MP4. Oto formaty zalecane odpowiednio dla 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, jak zmienić bitrate nowo utworzonych plików.