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ść. 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.

  1. 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 nazwy media-tools.

  2. Utwórz katalogi dockermedia w katalogu media-tools. Dzięki temu katalog media 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 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 #
    

Podczas uruchamiania obrazu możesz sprawdzić wersje FFmpeg i Shaka Packager, aby potwierdzić, że wszystko przebiegło pomyślnie. W tym celu uruchom ffmpeg -versionpackager --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.