Praca z multimediami często wymaga zmiany właściwości plików multimedialnych, takich jak bitrate lub rozdzielczość. Znajdowanie prostego sposobu na rozpoczęcie może być dość przytłaczające. Na tej stronie dowiesz się więcej o używanych narzędziach i sposobie ich szybkiego instalowania.
Najpierw opisujemy podstawowe zastosowanie dwóch popularnych narzędzi do obsługi multimediów w wierszu poleceń: Shaka Packager i FFmpeg. Następnie pomożemy Ci szybko zainstalować te narzędzia. Dlaczego należy uwzględnić 2 aplikacje? Oba te formaty są przydatne i skuteczne, ale żaden z nich nie zapewnia wszystkich funkcji potrzebnych do przygotowania multimediów na potrzeby internetu. Stworzyliśmy też strony Konwersja multimediów i Szyfrowanie multimediów, na których znajdziesz więcej typowych operacji związanych z tymi dwoma aplikacjami.
Te aplikacje nie są jedynymi opcjami dostępnych do manipulowania plikami, ale są 2 najczęściej używanymi i najbardziej zaawansowanymi. Inne opcje to aplikacje GUI Miro, HandBrake i VLC. Istnieją też usługi kodowania/transkodowania, takie jak Zencoder, Amazon Elastic Encoder i Google Transcoder API.
Shaka Packager
Shaka Packager to bezpłatny pakiet SDK do pakowania multimediów. Jeśli w swojej witrynie używasz odtwarzacza multimediów, do przygotowania plików możesz użyć narzędzia Shaka Packager. Obsługuje konwersję dla dwóch najpopularniejszych protokołów strumieniowego przesyłania wideo: dynamicznego adaptacyjnego strumieniowego przesyłania danych przez HTTP (DASH) lub transmisji na żywo przez HTTP (HLS). Paker Shaka obsługuje najważniejsze funkcje zabezpieczeń: szyfrowanie wspólne i zarządzanie prawami cyfrowymi (DRM) Widevine. Może też obsługiwać transmisje na żywo i filmy na żądanie.
Pomimo informacji na opakowaniu to narzędzie nie jest przeznaczone tylko dla programistów C++. Możesz go używać zarówno jako biblioteki do tworzenia oprogramowania multimedialnego, jak i jako narzędzia wiersza poleceń do przygotowywania plików multimedialnych do odtwarzania w przeglądarce. W tym przypadku przydatna jest ta druga wartość. W zasadzie dla twórców mediów internetowych narzędzie Shaka Packager jest jedynym sposobem na wykonywanie niektórych 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 jest to jednak wynik, jaki uzyskasz, wpisując packager -help
. Ten przykład jest łatwiejszy do zrozumienia i odzwierciedla przykłady w dokumentacji Shaka Packager. Zwróć uwagę, że w tym wzorze występuje wiele elementów stream_descriptor
. Chociaż nie pokazujemy tego na ekranie, możesz manipulować strumieniami wideo i dźwięku w pliku oddzielnie za pomocą jednego polecenia.
Porównaj ten podstawowy wzorzec z prostym użyciem, które wyświetla właściwości pliku. W tym przykładzie pokazaliśmy równe części.
packager stream_descriptor [stream_descriptor-n] [flags]
packager input=glocken.mp4 --dump_stream_info
Wynik polecenia:
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
Sprawdź cechy opisane w sekcji Podstawy dotyczące plików multimedialnych i zwróć uwagę na kilka kwestii. Wysokość i szerokość są prawidłowe dla Full HD, a kodek audio i wideo należy do preferowanych kodeków dla ich typów kontenerów, AAC dla dźwięku i H264 dla wideo. Zwróć też uwagę, że strumienie są identyfikowane za pomocą liczb. Są one przydatne do operacji, które manipulują dźwiękiem i obrazem oddzielnie.
Zwróć uwagę, że dane wyjściowe powyżej nie zawierają informacji o przepływności. Pomimo braku niektórych informacji, dane wyjściowe są łatwiejsze do odczytania, dlatego używamy ich zawsze, gdy jest to możliwe. Gdy potrzebujemy informacji, których nie może uzyskać Shaka Packager, np. bitrate, używamy FFmpeg.
FFmpeg
FFmpeg to też bezpłatna aplikacja do nagrywania, konwertowania i przesyłania strumieniowego plików multimedialnych. Jego możliwości nie są lepsze ani gorsze niż w przypadku Shaka Packager. Są po prostu inne.
Podstawowy wzór 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 tych opcji są używane w różnych miejscach i w zależności od ich położenia w postanowie zmieniają sposób działania wyjściowego pliku. Pamiętaj o tym, gdy przeglądasz pytania dotyczące FFmpeg na Stack Overflow i na podobnych stronach.
Ponownie porównamy podstawowy wzór z przykładem wyświetlania właściwości pliku.
ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output
ffmpeg -i glocken.mp4
Oprócz informacji, o które prosimy, drukuje też komunikat o błędzie, jak w przykładzie poniżej. Wynika to z tego, że technicznie jest to nieprawidłowe użycie FFmpeg. Używamy go, ponieważ 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 chcesz wykonać te czynności razem z nami i wypróbować nasze polecenia, możesz ręcznie zainstalować wymagane narzędzia lub wybrać łatwiejsze rozwiązanie i użyć Dockera. Zalecamy użycie Dockera, ponieważ pozwoli to zaoszczędzić dużo czasu. Dodatkowo udostępniliśmy instrukcje, które pomogą Ci szybko skonfigurować konto.
Najpierw utwórz nowy katalog gdzieś na komputerze o nazwie
media-tools
. Możesz użyć dowolnej nazwy, ale pamiętaj, że w tych instrukcjach zakładamy, że używasz nazwymedia-tools
.Utwórz katalogi
docker
imedia
w katalogumedia-tools
. Dzięki temu katalogmedia
nie będzie uwzględniany w kontekście kompilacji. Jest to ważne, ponieważmedia
to miejsce, w którym przechowywane są pliki, na których chcemy wykonać operacje, a niektóre z nich mogą być dość duże. UmieszczenieDockerfile
bezpośrednio wmedia-tools
spowolniłoby tworzenie obrazu, gdybyś kiedykolwiek musiał go ponownie utworzyć (np. w celu zmiany zainstalowanych wersji).Utwórz
/media-tools/docker/Dockerfile
i dodaj te instrukcje kompilacji: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
Uruchom 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 #
Podczas uruchamiania obrazu możesz sprawdzić wersje FFmpeg i Shaka Packager, aby potwierdzić, że wszystko przebiegło pomyślnie. Aby to zrobić, uruchom 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
Teraz, gdy już wiesz, jak używać Shaka Packager i FFmpeg, możesz kontynuować naukę podstawowych pojęć, a następnie podstawy strumieniowego przesyłania multimediów.