Grundlagen der Medienanwendung

Derek Herman
Derek Herman
Joe Medley
Joe Medley

Bei der Arbeit mit Medien müssen häufig die Eigenschaften von Mediendateien geändert werden, z. B. die Bitrate oder Auflösung. Einen einfachen Einstieg zu finden, kann ziemlich entmutigend sein. Auf dieser Seite erfahren Sie mehr über die verwendeten Tools und wie Sie sie schnell installieren.

Zuerst beschreiben wir die grundlegende Verwendung von zwei gängigen Befehlszeilen-Medien-Dienstprogrammen: Shaka Packager und FFmpeg. Anschließend zeigen wir dir, wie du die Tools schnell installierst. Warum werden zwei Anwendungen abgedeckt? Beide Programme sind zwar leistungsstark und nützlich, bieten aber nicht alles, was zum Optimieren von Medien für das Web erforderlich ist. Außerdem haben wir die Seiten Medienkonvertierung und Medienverschlüsselung erstellt, auf denen viele weitere gängige Vorgänge mit diesen beiden Anwendungen zu sehen sind.

Diese Anwendungen sind nicht die einzigen Optionen für die Dateimanipulation, aber zwei der gängigsten und leistungsstärksten. Weitere Optionen sind die GUI-Anwendungen Miro, HandBrake und VLC. Es gibt auch Codierungs-/Transcodierungsdienste wie Zencoder, Amazon Elastic Encoder und die Google Transcoder API.

Shaka Packager

Shaka Packager ist ein kostenloses Media-Packaging-SDK. Wenn du auf deiner Website einen Mediaplayer verwendest, kannst du die Dateien mit Shaka Packager vorbereiten. Es unterstützt die Umwandlung für die beiden gängigsten Videostreaming-Protokolle: Dynamic Adaptive Streaming over HTTP (DASH) oder HTTP Live Streaming (HLS). Shaka Packager unterstützt wichtige Sicherheitsfunktionen: die gängige Verschlüsselung und die Digital Rights Management (DRM) von Widevine. Außerdem unterstützt es Livestreaming und On-Demand-Videos.

Entgegen der Angaben auf dem Paket ist dieses Dienstprogramm nicht nur für C++-Entwickler gedacht. Sie können es sowohl als Bibliothek zum Erstellen von Mediensoftware als auch als Befehlszeilentool zum Vorbereiten von Mediendateien für die Webwiedergabe verwenden. Letztere Kapazität ist hier nützlich. Für Webmedien-Creator ist Shaka Packager in der Tat die einzige Möglichkeit, einige Aufgaben zu erledigen, ohne Geld für teure kommerzielle Anwendungen auszugeben.

Hier ist das grundlegende Muster für einen Shaka Packager-Befehl:

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

Das ist nicht ganz das, was Sie sehen, wenn Sie packager -help eingeben. Dieses Beispiel ist leichter zu verstehen und spiegelt die Beispiele in der Shaka Packager-Dokumentation wider. Beachten Sie, dass das Muster mehrere stream_descriptor-Elemente enthält. Obwohl wir es hier nicht zeigen, können Sie die Video- und Audiostreams einer Datei mit einem einzigen Befehl separat bearbeiten.

Vergleichen Sie dieses grundlegende Muster mit einer einfachen Verwendung, bei der Dateimerkmale angezeigt werden. Im Beispiel haben wir die entsprechenden Teile nebeneinander gestellt.

packager stream_descriptor [stream_descriptor-n] [flags]

packager input=glocken.mp4                       --dump_stream_info

Die Ausgabe des Befehls sieht so aus:

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

Achte auf die Merkmale, die im Abschnitt Grundlagen von Mediendateien beschrieben wurden, und behalte Folgendes im Auge: Höhe und Breite sind für Full HD korrekt und die Audio- und Video-Codecs gehören zu den bevorzugten Codecs für ihre Containertypen: AAC für Audio und H264 für Video. Beachten Sie auch, dass Streams mit Zahlen gekennzeichnet sind. Sie eignen sich für Vorgänge, bei denen Audio und Video getrennt bearbeitet werden.

Beachte, dass in der obigen Ausgabe keine Bitrate angezeigt wird. Trotz der fehlenden Informationen ist diese Ausgabe leichter zu lesen. Wir verwenden sie daher nach Möglichkeit. Wenn wir Informationen benötigen, die Shaka Packager nicht abrufen kann, z. B. die Bitrate, verwenden wir FFmpeg.

FFmpeg

FFmpeg ist eine kostenlose Anwendung zum Aufzeichnen, Konvertieren und Streamen von Mediendateien. Seine Funktionen sind nicht besser oder schlechter als die von Shaka Packager. Sie unterscheiden sich nur.

Das grundlegende Muster für einen FFmpeg-Befehl sieht so aus:

ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output

Wie Shaka Packager kann diese Anwendung mehrere Streams verarbeiten. Einige seiner Optionen werden an mehreren Stellen verwendet und bearbeiten die Dateiausgabe je nach Position im Befehl unterschiedlich. Berücksichtige dies, wenn du dir FFmpeg-Fragen auf Stack Overflow und ähnlichen Websites ansiehst.

Wir vergleichen noch einmal das grundlegende Muster mit dem Beispiel für die Anzeige von Dateieigenschaften.

    ffmpeg [GeneralOptions] [InputFileOptions] -i input        [OutputFileOptions] output

    ffmpeg                                     -i glocken.mp4

Neben den angeforderten Informationen wird auch eine Fehlermeldung ausgegeben, wie im Beispiel unten dargestellt. Das liegt daran, dass dies technisch gesehen eine falsche Verwendung von FFmpeg ist. Wir verwenden sie, weil sie Informationen enthält, die für uns wichtig sind.

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

Anwendungen mit Docker installieren

Wenn Sie die Anleitung durchgehen und die Befehle ausprobieren möchten, können Sie die erforderlichen Tools entweder manuell installieren oder Docker verwenden. Wir empfehlen die Verwendung von Docker, da Sie damit viel Zeit sparen. Außerdem haben wir eine Anleitung für eine schnelle Einrichtung zusammengestellt.

  1. Erstellen Sie zuerst ein neues Verzeichnis auf Ihrem Computer mit dem Namen media-tools. Sie können einen beliebigen Namen verwenden. Beachten Sie jedoch, dass in der folgenden Anleitung davon ausgegangen wird, dass Sie media-tools als Verzeichnisnamen verwenden.

  2. Erstellen Sie in media-tools die Verzeichnisse docker und media. Dadurch wird das Verzeichnis media nicht in den Build-Kontext aufgenommen. Das ist wichtig, da in media Dateien gespeichert werden, an denen wir Vorgänge ausführen möchten. Einige davon können recht groß sein. Wenn Sie Dockerfile direkt in media-tools einfügen, wird das Erstellen des Images verlangsamt, wenn Sie es später noch einmal erstellen müssen, z. B. um die installierten Versionen zu ändern.

  3. Erstellen Sie /media-tools/docker/Dockerfile und fügen Sie die folgende Buildanleitung hinzu:

    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. Erstellen Sie das Image:

    docker build -t media-tools ./docker
    
  5. Führen Sie das Image als interaktive Shell aus. Unter Linux:

    docker run -w /media -v ${PWD}/media:/media -it --rm media-tools
    /media #
    

    Unter Windows:

    docker run -w /media -v %cd%/media:/media -it --rm media-tools
    /media #
    

Während der Ausführung des Images kannst du die Versionen von FFmpeg und Shaka Packager prüfen, um sicherzustellen, dass alles erfolgreich war. Dazu musst du ffmpeg -version und packager --version ausführen. Die Ausgabe sollte in etwa so aussehen:

/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

Nachdem Sie sich mit Shaka Packager und FFmpeg vertraut gemacht haben, können Sie mit den grundlegenden Konzepten fortfahren. Als Nächstes geht es um die Grundlagen des Mediastreamings.