Grundlagen der Medienanwendung

Derek Herman
Derek Herman
Joe Medley
Joe Medley

Bei der Arbeit mit Medien müssen häufig die Eigenschaften der Mediendateien geändert werden, zum Beispiel die Bitrate oder 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 diese schnell installieren.

Zuerst beschreiben wir die grundlegende Verwendung der beiden gängigen Befehlszeilendienstprogramme: Shaka Packager und FFmpeg. Anschließend helfen wir Ihnen, die Tools schnell zu installieren. Warum sollten Sie zwei Anwendungen abdecken? Beide sind zwar leistungsstark und an sich nützlich, können aber auch nicht alles tun, 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 aufgeführt sind.

Diese Anwendungen sind nicht die einzigen Optionen, die für Aufgaben zur Dateibearbeitung verfügbar sind, aber sie sind zwei der gängigsten und leistungsfähigsten. 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.

Logo: Shaka Packager

Shaka Packager ist ein kostenloses SDK für die Medienverpackung. Wenn Sie einen Mediaplayer auf Ihrer Website verwenden, würden Sie die Dateien mit Shaka Packager vorbereiten. Die Konvertierung wird für die beiden gängigsten Videostreaming-Protokolle unterstützt: Dynamic Adaptive Streaming over HTTP (DASH) oder HTTP Live Streaming (HLS). Shaka Packager unterstützt wichtige Sicherheitsfunktionen wie allgemeine Verschlüsselung und Widevine Digital Rights Management (DRM). Er kann auch Livestreaming und Video-on-Demand verarbeiten.

Trotz der Angaben im Paket ist dieses Dienstprogramm nur für C++-Entwickler gedacht. Sie können sie sowohl als Bibliothek zum Erstellen von Mediensoftware als auch als Befehlszeilenprogramm zum Vorbereiten von Mediendateien für die Webwiedergabe verwenden. Die letztere Kapazität ist hier für uns nützlich. Für Ersteller von Webmedien ist Shaka Packager die einzige Möglichkeit, bestimmte 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]

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

Vergleichen Sie dieses Basismuster mit einer einfachen Verwendung, die Dateimerkmale anzeigt. In dem Beispiel haben wir die äquivalenten 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

Suchen Sie nach den unter Grundlagen von Mediendateien beschriebenen Eigenschaften und beachten Sie ein paar Dinge. 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. Diese sind nützlich für Vorgänge, bei denen Audio und Video separat bearbeitet werden.

Beachten Sie, dass in der obigen Ausgabe keine Bitrate angezeigt wird. Trotz der fehlenden Informationen ist diese Ausgabe leichter zu lesen, daher verwenden wir sie, wann immer wir können. Wenn wir Informationen benötigen, die Shaka Packager nicht abrufen kann, z. B. die Bitrate, verwenden wir FFmpeg.

FFmpeg

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

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 bearbeiten die Dateiausgabe unterschiedlich, je nachdem, wo sie sich im Befehl befinden. Beachten Sie dies, wenn Sie sich FFmpeg-Fragen auf Stack Overflow und ähnlichen Websites ansehen.

Wir vergleichen das Grundmuster noch einmal mit dem Beispiel zur Anzeige von Dateieigenschaften.

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

    ffmpeg                                     -i glocken.mp4

Zusätzlich zu den angeforderten Informationen wird hier auch eine Fehlermeldung ausgegeben, wie im folgenden Beispiel gezeigt. Das liegt daran, dass es sich hierbei technisch gesehen um eine falsche Verwendung von FFmpeg handelt. Wir verwenden sie, weil sie Informationen anzeigt, 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 vorhaben, unserem Beispiel zu folgen und unsere Befehle auszuprobieren, können Sie die erforderlichen Tools entweder manuell installieren oder einfach Docker verwenden. Wir empfehlen die Verwendung von Docker, da Sie so viel Zeit sparen. Außerdem haben wir eine Anleitung für eine schnelle Einrichtung bereitgestellt.

  1. Erstellen Sie zuerst auf Ihrem Computer ein neues Verzeichnis 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 die Verzeichnisse docker und media in media-tools. Dadurch wird das Verzeichnis media außerhalb des Build-Kontexts gehalten. Das ist wichtig, weil media der Speicherort für Dateien ist, mit denen Vorgänge durchgeführt werden sollen. Einige von ihnen können recht groß sein. Wenn Sie Dockerfile direkt in media-tools einfügen, würde das Erstellen des Images langsamer werden, falls Sie es später neu erstellen würden, z. B. um die installierten Versionen zu ändern.

  3. Erstellen Sie /media-tools/docker/Dockerfile und fügen Sie die folgenden Build-Anweisungen 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 Sie das Image ausführen, können Sie die Versionen von FFmpeg und Shaka Packager prüfen, um zu prüfen, ob alles erfolgreich war. Führen Sie dazu 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 unter Grundlagen des Mediastreamings die grundlegenden Konzepte kennenlernen.