Podstawowe informacje o aplikacjach multimedialnych

Derek Herman
Derek Herman
Joe Medley
Joe Medley

Praca z multimediami często wymaga zmiany charakterystyki plików multimedialnych, takich jak szybkość transmisji bitów lub rozdzielczość. Znalezienie prostego sposobu na rozpoczęcie pracy może być trudnym zadaniem. Na tej stronie znajdują się informacje o używanych narzędziach i o tym, jak je szybko zainstalować.

Najpierw opisujemy podstawowe wykorzystanie 2 popularnych narzędzi multimedialnych uruchamianych w wierszu poleceń: Shaka Packager i FFmpeg. Następnie pomożemy Ci szybko zainstalować te narzędzia. Dlaczego warto uwzględnić 2 aplikacje? Choć oba te narzędzia są skuteczne i przydatne same, nie zapewniają wszystkiego potrzebnego do przygotowania multimediów do wyświetlania w internecie. 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ępnymi w przypadku zadań związanych z manipulacją plikami. Są to 2 najpopularniejsze i najbardziej zaawansowane rozwiązania. Inne opcje to aplikacje GUI Miro, HandBrake i VLC. Dostępne są również usługi kodowania i transkodowania, takie jak Zencoder, Amazon Elastic Encoder czy Google Transcoder API.

Pakowanie Shaka

Shaka Packager to bezpłatny pakiet SDK do pakietów multimedialnych. Jeśli w swojej witrynie korzystasz z odtwarzacza, do przygotowywania plików użyj narzędzia Shaka Packager. Obsługuje konwersję w przypadku 2 najpopularniejszych protokołów strumieniowego przesyłania wideo: dynamicznego adaptacyjnego przesyłania strumieniowego przez HTTP (DASH) i transmisji na żywo przez HTTP (HLS). Shaka Packager obsługuje najważniejsze funkcje zabezpieczeń: popularne szyfrowanie i zarządzanie prawami cyfrowymi (DRM) Widevine. Obsługuje też transmisje na żywo i wideo 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 przydaje się nam ta ostatnia pojemność. Dla twórców mediów internetowych Shaka Packager to jedyny sposób wykonywania niektórych zadań bez wydawania pieniędzy na drogie aplikacje komercyjne.

Oto podstawowy wzorzec polecenia Shaka Packager:

packager stream_descriptor [stream_descriptor-2 [stream_descriptor-n]] [flags]

To nie wszystko się wyświetli, gdy wpiszesz packager -help. Ten przykład jest łatwiejszy do wyciągnięcia i odzwierciedla przykłady z dokumentacji narzędzia Shaka Packager. Zwróć uwagę, że we wzorcu jest 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 zastosowaniem, które wyświetla charakterystykę plików. W przykładzie ułożyliśmy równoważne 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

Zwróć uwagę na cechy omówione w podstawowych informacjach dotyczących 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ą oznaczone 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 brakujących informacji wynik jest bardziej czytelny, dlatego korzystamy z nich, gdy tylko jest to możliwe. Gdy potrzebujemy informacji, których nie może uzyskać aplikacja Shaka Packager, 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ż 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 jego opcji są używane w wielu lokalizacjach i w różny sposób modyfikują dane wyjściowe pliku w zależności od tego, gdzie znajdują się w poleceniu. 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 wymaganych informacji zostanie również wyświetlony komunikat o błędzie, jak pokazano w poniższym przykładzie. Wynika to z technicznie nieprawidłowego użycia 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 przy użyciu Dockera

Jeśli zamierzasz postępować zgodnie z tymi poleceniami i wypróbować nasze polecenia, możesz zainstalować wymagane narzędzia ręcznie lub wybrać prostą ścieżkę i użyć Dockera. Zalecamy korzystanie z Dockera, ponieważ pozwoli to zaoszczędzić mnóstwo czasu. Przygotowaliśmy też instrukcje, które pozwolą Ci szybko skonfigurować tę usługę.

  1. Zacznij od utworzenia na komputerze nowego katalogu o nazwie media-tools. Możesz użyć dowolnej nazwy. W poniższych instrukcjach przyjęliśmy założenie, że nazwa katalogu to media-tools.

  2. Utwórz katalog docker i media w katalogu media-tools. Dzięki temu katalog media nie będzie się znajdował w kontekście kompilacji. To ważne, ponieważ w media są przechowywane pliki, na których planujemy wykonać operacje, a niektóre z nich mogą być dość duże. Umieszczenie elementu Dockerfile bezpośrednio w pliku media-tools spowolniłoby kompilację obrazu, jeśli kiedyś przebudujesz go po drodze – być może w celu zmiany zainstalowanych wersji.

  3. 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"]
    
  4. Utwórz obraz:

    docker build -t media-tools ./docker
    
  5. 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 #
    

Po uruchomieniu obrazu możesz sprawdzić wersje programu FFmpeg i Shaka Packager, aby sprawdzić, czy wszystko zadziałało poprawnie, uruchamiając polecenia 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

Skoro wiesz już, jak korzystać z programów Shaka Packager i FFmpeg, możesz przejść do kolejnego etapu poznawania podstawowych pojęć związanych z podstawami strumieniowania multimediów.