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 die Auflösung. Einen einfachen Einstieg zu finden, kann ziemlich einschüchternd 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-Mediendienstprogrammen: Shaka Packager und FFmpeg. Anschließend helfen wir Ihnen, die Tools schnell zu installieren. Warum sollte ich zwei Anwendungen abdecken? Beide Tools sind für sich genommen leistungsstark und nützlich, leisten aber nicht alles, was zur Vorbereitung 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 gezeigt werden.

Diese Anwendungen sind nicht die einzigen Optionen, die für Dateibearbeitungsaufgaben verfügbar sind, sondern zwei der gängigsten und leistungsfähigsten Anwendungen. Weitere Optionen sind die GUI-Anwendungen Miro, HandBrake und VLC. Es gibt auch Codierungs-/Transcodierungsdienste wie Zencoder, Amazon Elastic Encoder und Google Transcoder API.

Shaka Packager

Shaka Packager ist ein kostenloses Media Packing SDK. Wenn Sie auf Ihrer Website einen Mediaplayer verwenden, bereiten Sie die Dateien mit Shaka Packager vor. Die Konvertierung wird für die beiden gängigsten Videostreaming-Protokolle unterstützt: Dynamic adaptives Streaming über HTTP (DASH) oder HTTP Live Streaming (HLS). Shaka Packager unterstützt wichtige Sicherheitsfunktionen: allgemeine Verschlüsselung und Widevine (Digital Rights Management, DRM). Auch Livestreaming und Video-on-Demand werden unterstützt.

Trotz der Informationen im 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 Befehlszeilen-Dienstprogramm zum Vorbereiten von Mediendateien für die Webwiedergabe verwenden. Letzteres ist für uns nützlich. Tatsächlich ist Shaka Packager für Ersteller von Webmedien 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 erhalten, wenn Sie packager -help eingeben. Dieses Beispiel ist leicht verständlich und spiegelt die Beispiele in der Shaka Packager-Dokumentation wider. Das Muster enthält mehrere stream_descriptor-Elemente. Auch wenn wir dies nicht zeigen, können Sie die Video- und Audiostreams einer Datei separat mit einem einzigen Befehl bearbeiten.

Vergleichen Sie dieses Grundmuster mit einer einfachen Verwendung zur Anzeige von Dateieigenschaften. Im Beispiel haben wir äquivalente Teile angeordnet.

packager stream_descriptor [stream_descriptor-n] [flags]

packager input=glocken.mp4                       --dump_stream_info

Der Befehl gibt Folgendes 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

Bei den unter Grundlagen zu Mediendateien beschriebenen Eigenschaften fallen einige Dinge an. 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. Streams sind durch Zahlen gekennzeichnet. Diese sind nützlich für Vorgänge, bei denen Audio und Video getrennt bearbeitet werden.

Beachten Sie, dass die Ausgabe oben nicht die Bitrate anzeigt. Trotz der fehlenden Informationen ist die Ausgabe einfacher zu lesen und wir verwenden sie, wann immer wir können. Wenn wir Informationen benötigen, die Shaka Packager nicht abrufen kann, etwa die Bitrate, verwenden wir FFmpeg.

FFmpeg

FFmpeg ist ebenfalls eine kostenlose Anwendung zum Aufzeichnen, Konvertieren und Streamen von Mediendateien. Seine Fähigkeiten sind nicht besser oder schlechter als die von Shaka Packager. Sie sind nur anders.

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

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

Wie Shaka Packager kann auch diese Anwendung mehrere Streams verarbeiten. Einige der Optionen werden an mehreren Stellen verwendet und die Dateiausgabe wird je nachdem, wo sie sich im Befehl befinden, unterschiedlich bearbeitet. Beachten Sie das bitte, wenn Sie sich FFmpeg-Fragen auf Stack Overflow und ähnlichen Websites ansehen.

Vergleichen wir wieder das Basismuster mit dem Beispiel für die Anzeige von Dateieigenschaften.

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

    ffmpeg                                     -i glocken.mp4

Zusätzlich zu den angeforderten Informationen wird eine Fehlermeldung ausgegeben, wie im folgenden Beispiel dargestellt. Das liegt daran, dass dies eine technisch falsche Verwendung von FFmpeg ist. Wir verwenden sie, weil sie Informationen anzeigen, die 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 fortfahren und unsere Befehle ausprobieren möchten, können Sie die erforderlichen Tools entweder manuell installieren oder den einfachen Pfad nehmen und Docker verwenden. Wir empfehlen die Verwendung von Docker, da Sie so viel Zeit sparen können. Außerdem haben wir eine Anleitung für eine schnelle Einrichtung bereitgestellt.

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

  2. Erstellen Sie innerhalb von media-tools die Verzeichnisse docker und media. Dadurch wird das Verzeichnis media aus dem Build-Kontext ausgeschlossen. Das ist wichtig, da der Speicherort media der Dateien ist, für die Vorgänge ausgeführt werden sollen, und die teilweise sehr groß sein können. Wenn Sie Dockerfile direkt in media-tools einfügen, würde das Erstellen des Images verlangsamen, falls Sie es später neu erstellen, etwa um die installierten Versionen zu ändern.

  3. Erstellen Sie /media-tools/docker/Dockerfile und fügen Sie die folgende Build-Anleitung 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 das Image ausgeführt wird, können Sie Versionen für FFmpeg und Shaka Packager prüfen, um zu prüfen, ob alles erfolgreich war. Dazu führen Sie ffmpeg -version und packager --version aus. 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 nun mit Shaka Packager und FFmpeg vertraut gemacht haben, können Sie mit dem Erlernen der grundlegenden Konzepte fortfahren. Als Nächstes geht es um Grundlagen des Medienstreamings.