Praca z multimediami często wymaga zmiany cech plików multimedialnych, np. szybkości transmisji bitów lub rozdzielczości. Znalezienie prostego sposobu może być trudne. Na tej stronie poznasz używane narzędzia i dowiesz się, jak szybko je zainstalować.
Najpierw opisujemy podstawowe zastosowania 2 popularnych narzędzi multimedialnych wiersza poleceń: Shaka Packager i FFmpeg, a następnie pomagamy Ci szybko zainstalować te narzędzia. Po co uwzględnić 2 aplikacje? Obie opcje są skuteczne i przydatne, ale żadne z nich nie pomaga przygotować mediów do wyświetlania w internecie. Utworzyliśmy też strony Konwersja multimediów oraz Szyfrowanie multimediów, na których pokazano o wiele więcej czynności wykonywanych za pomocą tych 2 aplikacji.
Aplikacje te nie są jedynymi dostępnymi opcjami w przypadku zadań związanych z manipulacją plikami, ale są to 2 najpopularniejsze i najbardziej zaawansowane rozwiązania. Inne opcje to m.in. aplikacje GUI: Miro, HandBrake i VLC. Dostępne są też usługi kodowania i transkodowania, takie jak Zencoder, Amazon Elastic Encoder czy Google Transcoder API.
Program do pakowania Shaka
Shaka Packager to bezpłatny pakiet SDK do obsługi multimediów. Jeśli korzystasz w witrynie z odtwarzacza, do przygotowania plików użyj Shaka Packager. Obsługuje on 2 najpopularniejsze protokoły strumieniowego przesyłania wideo: dynamiczne adaptacyjne strumieniowe przesyłanie danych przez HTTP (DASH) i transmitowanie na żywo przez HTTP (HLS). Narzędzie Shaka Packager obsługuje najważniejsze zabezpieczenia: popularne szyfrowanie i zarządzanie prawami cyfrowymi (DRM) Widevine. Obsługuje również transmisje na żywo i filmy na żądanie.
Wbrew informacji na opakowaniu to narzędzie jest przeznaczone dla więcej niż programistów C++. Można jej używać zarówno jako biblioteki do tworzenia oprogramowania multimedialnego, jak i jako narzędzia wiersza poleceń służącego do przygotowywania plików multimedialnych do odtwarzania w internecie. To właśnie ta możliwość przydaje się nam w tym przypadku. Dla twórców mediów internetowych Shaka Packager to jedyny sposób na wykonanie pewnych zadań bez wydawania pieniędzy na drogie aplikacje komercyjne.
Oto podstawowy wzór polecenia Shaka Packager:
packager stream_descriptor [stream_descriptor-2 [stream_descriptor-n]] [flags]
Nie otrzymasz tego efektu, gdy wpiszesz packager -help
. Ten przykład jest łatwiejszy do wyjaśnienia i odzwierciedla przykłady z dokumentacji narzędzia Shaka Packager. Zwróć uwagę, że wzór zawiera wiele elementów stream_descriptor
. Chociaż tego nie pokazujemy, możesz za pomocą jednego polecenia manipulować oddzielnie strumieniami wideo i audio.
Porównaj ten podstawowy wzorzec z prostym zastosowaniem, które pokazuje właściwości pliku. W przykładzie wyrównaliśmy części równoważne.
packager stream_descriptor [stream_descriptor-n] [flags]
packager input=glocken.mp4 --dump_stream_info
Polecenie wyświetli następujący wynik:
File "glocken.mp4":
Found 2 stream(s).
Stream [0] type: Video
codec_string: avc1.640028
time_scale: 30000
duration: 300300 (10.0 seconds)
is_encrypted: false
codec: H264
width: 1920
height: 1080
pixel_aspect_ratio: 1:1
trick_play_factor: 0
nalu_length_size: 4
Stream [1] type: Audio
codec_string: mp4a.40.2
time_scale: 48000
duration: 481280 (10.0 seconds)
is_encrypted: false
codec: AAC
sample_bits: 16
num_channels: 2
sampling_frequency: 48000
language: eng
seek_preroll_ns: 20833
Zapoznaj się z cechami omówionymi w sekcji Podstawowe informacje o plikach multimedialnych i zwróć uwagę na kilka kwestii. Wysokość i szerokość są prawidłowe w przypadku Full HD, a kodeki audio i wideo należą do preferowanych kodeków w przypadku typów kontenerów: AAC dla audio i H264 dla wideo. Zwróć też uwagę, że strumienie są oznaczone liczbami. Są one przydatne przy operacjach, które wymagają oddzielnego manipulowania dźwiękiem i obrazem.
Zwróć uwagę, że powyższe dane nie pokazują szybkości transmisji bitów. Mimo że brakuje niektórych danych, dane wyjściowe są czytelniejsze, więc korzystamy z nich, gdy tylko jest to możliwe. Gdy potrzebujemy informacji, których Shaka Packager nie może uzyskać, takich jak szybkość transmisji bitów, używamy FFmpeg.
FFmpeg
FFmpeg to również bezpłatna aplikacja do nagrywania, konwertowania i strumieniowania plików multimedialnych. Jej możliwości nie są lepsze ani gorsze niż rozwiązania Shaka Packager. Są po prostu inne.
Podstawowy wzorzec polecenia FFmpeg wygląda tak:
ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output
Podobnie jak Shaka Packager, ta aplikacja może obsługiwać wiele strumieni. Niektóre z nich są używane w wielu lokalizacjach i manipulują danymi wyjściowymi pliku w różny sposób w zależności od tego, gdzie się znajdują w poleceniu. Pamiętaj o tym, przeglądając pytania FFmpeg na stronie Stack Overflow i podobnych.
Ponownie porównamy podstawowy wzorzec z przykładem wyświetlania cech pliku.
ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output
ffmpeg -i glocken.mp4
Oprócz wymaganych informacji wyświetla się też komunikat o błędzie, jak widać w poniższym przykładzie. To dlatego, że technicznie jest to nieprawidłowe użycie FFmpeg. Używamy ich, aby wyświetlać informacje, które są dla nas ważne.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'glocken.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.17.100
Duration: 00:01:47.53, start: 0.000000, bitrate: 10715 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 1920x1080, 10579 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
At least one output file must be specified
Instalowanie aplikacji za pomocą Dockera
Jeśli zamierzasz się tego trzymać i wypróbować nasze polecenia, możesz zainstalować wymagane narzędzia ręcznie lub skorzystać z łatwego sposobu i użyć Dockera. Zalecamy skorzystanie z Dockera, ponieważ pozwoli to zaoszczędzić dużo czasu. Znajdziesz tam również instrukcje, aby szybko przeprowadzić konfigurację.
Zacznij od utworzenia na komputerze nowego katalogu o nazwie
media-tools
. Możesz użyć dowolnej nazwy, pamiętaj jednak, że w poniższych instrukcjach przyjęto założenie, że jako nazwy katalogu używaszmedia-tools
.Utwórz katalog
docker
imedia
w folderzemedia-tools
. Dzięki temu katalogmedia
nie będzie się pojawiać w kontekście kompilacji. Jest to ważne, ponieważmedia
to miejsce, w którym przechowywane są pliki i na których planujemy wykonać operacje, a niektóre z nich mogą być dość duże. Umieszczenie atrybutuDockerfile
bezpośrednio w obrębiemedia-tools
spowolniłoby jego budowanie, jeśli kiedykolwiek zechcesz go przebudować (na przykład w celu zmiany zainstalowanych wersji).Utwórz
/media-tools/docker/Dockerfile
i dodaj te instrukcje:FROM google/shaka-packager:release-v2.4.3 as packager FROM jrottenberg/ffmpeg:4.3.2-alpine38 COPY --from=packager /usr/bin /usr/bin ENTRYPOINT ["sh"]
Utwórz obraz:
docker build -t media-tools ./docker
Uruchomić obraz jako interaktywną powłokę. W systemie Linux:
docker run -w /media -v ${PWD}/media:/media -it --rm media-tools /media #
W systemie Windows:
docker run -w /media -v %cd%/media:/media -it --rm media-tools /media #
Gdy uruchamiasz obraz, możesz sprawdzić wersje FFmpeg i Shaka Packager, aby zweryfikować, czy wszystko przebiegło pomyślnie. W tym celu użyj poleceń ffmpeg -version
i packager --version
. Dane wyjściowe powinny wyglądać tak:
/media # ffmpeg -version
ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 6.4.0 (Alpine 6.4.0)
configuration: --disable-debug --disable-doc --disable-ffplay --enable-shared --enable-avresample --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-gpl --enable-libass --enable-fontconfig --enable-libfreetype --enable-libvidstab --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libxcb --enable-libx265 --enable-libxvid --enable-libx264 --enable-nonfree --enable-openssl --enable-libfdk_aac --enable-postproc --enable-small --enable-version3 --enable-libbluray --enable-libzmq --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-libopenjpeg --enable-libkvazaar --enable-libaom --extra-libs=-lpthread --enable-libsrt --enable-libaribb24 --extra-cflags=-I/opt/ffmpeg/include --extra-ldflags=-L/opt/ffmpeg/lib
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
/media # packager --version
packager version v2.4.3-dd9870075f-release
Masz już opanowaną obsługę Shaka Packager i FFmpeg, więc możesz kontynuować naukę podstawowych zagadnień. Czas przejść do podstaw strumieniowania multimediów.