Praca z multimediami często wymaga zmiany charakterystyki plików multimedialnych, takich jak szybkość transmisji bitów 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. Utworzyliśmy też strony Konwersja multimediów i Szyfrowanie multimediów, na których znajdziesz więcej typowych operacji wykonywanych w tych 2 aplikacjach.
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 pakietów multimedialnych. Jeśli w swojej witrynie używasz odtwarzacza multimediów, do przygotowania plików użyjesz 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.
Wbrew temu, co widnieje 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ń do przygotowywania plików multimedialnych do odtwarzania w internecie. 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 jest ona widoczna, możesz za pomocą jednego polecenia osobno edytować strumienie wideo i audio z pliku.
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ą odpowiednie dla Full HD, a kodeki audio i wideo należą do preferowanych przez nich kodeków – AAC dla audio oraz H264 dla wideo. Zwróć też uwagę, że strumienie są identyfikowane za pomocą liczb. Przydają się one podczas działań, które umożliwiają osobną pracę z dźwiękiem i obrazem.
Zwróć uwagę, że dane wyjściowe nie pokazują szybkości transmisji bitów. 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 również bezpłatna aplikacja do nagrywania, konwertowania i strumieniowania 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, czytając pytania FFmpeg w Stack Overflow i na podobnych stronach.
Ponownie porównamy podstawowy wzorzec 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. Przyczyną jest to, że technicznie jest to nieprawidłowe użycie FFmpeg. Używamy go, ponieważ pokazuje on informacje, na których nam zależy.
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 skorzystać z łatwej opcji i użyć Docker. Zalecamy korzystanie z Dockera, ponieważ pozwoli to zaoszczędzić mnóstwo 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 się znajdował 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. Umieszczenie elementuDockerfile
bezpośrednio w plikumedia-tools
spowolniłoby kompilację obrazu, jeśli kiedyś przebudujesz go po drodze – być może 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
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 #
Podczas uruchamiania obrazu możesz sprawdzić wersje FFmpeg i Shaka Packager, aby potwierdzić, że wszystko przebiegło pomyślnie. W tym celu 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 zapoznać się z podstawami strumieniowego przesyłania multimediów.