Podstawowe informacje o aplikacjach multimedialnych

Derek Herman
Derek Herman
Joe Medley
Joe Medley

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.

  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 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. Umieszczenie Dockerfile bezpośrednio w media-tools spowolniłoby tworzenie obrazu, gdybyś kiedykolwiek musiał go ponownie utworzyć (np. 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. 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 -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 podstawy strumieniowego przesyłania multimediów.