Principes de base des applications multimédias

Derek Herman
Derek Herman
Joe Medley
Joe Medley

Travailler avec des contenus multimédias nécessite souvent de modifier les caractéristiques des fichiers multimédias, comme le débit ou la résolution. Trouver un moyen simple de se lancer peut être assez intimidant. Sur cette page, vous allez découvrir les outils utilisés et comment les installer rapidement.

Nous décrivons d'abord l'utilisation de base de deux utilitaires multimédias de ligne de commande courants : Shaka Packager et FFmpeg, puis nous vous aidons à installer rapidement ces outils. Pourquoi couvrir deux applications ? Bien que ces deux outils soient puissants et utiles, ils ne font pas tout ce qui est nécessaire pour préparer des contenus multimédias pour le Web. Nous avons également créé les pages Conversion de contenu multimédia et Chiffrement de contenu multimédia, qui présentent de nombreuses autres opérations courantes avec ces deux applications.

Ces applications ne sont pas les seules options disponibles pour les tâches de manipulation de fichiers, mais elles sont deux des plus courantes et des plus puissantes. Parmi les autres options figurent les applications GUI Miro, HandBrake et VLC. Il existe également des services d'encodage/de transcodage tels que Zencoder, Amazon Elastic Encoder et l'API Google Transcoder.

Shaka Packager

Shaka Packager est un SDK de packaging multimédia sans frais. Si vous utilisiez un lecteur multimédia sur votre site, vous utiliseriez Shaka Packager pour préparer les fichiers. Il est compatible avec la conversion pour les deux protocoles de streaming vidéo les plus courants: le streaming adaptatif dynamique sur HTTP (DASH) ou le streaming HTTP en direct (HLS). Shaka Packager est compatible avec les principales fonctionnalités de sécurité: le chiffrement commun et la gestion des droits numériques (DRM) Widevine. Il peut également gérer le streaming en direct et les vidéos à la demande.

Malgré ce qui est indiqué sur le package, cet utilitaire s'adresse à plus de développeurs C++. Vous pouvez l'utiliser à la fois comme bibliothèque pour créer des logiciels multimédias et comme utilitaire de ligne de commande pour préparer des fichiers multimédias à la lecture sur le Web. C'est cette dernière capacité qui nous est utile ici. En fait, pour les créateurs de contenus multimédias Web, Shaka Packager est le seul moyen d'effectuer certaines tâches sans dépenser d'argent pour des applications commerciales coûteuses.

Voici le modèle de base d'une commande Shaka Packager:

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

Ce n'est pas tout à fait ce que vous obtenez si vous saisissez packager -help. Cet exemple est plus facile à comprendre, ce qui reflète les exemples de la documentation de Shaka Packager. Notez qu'il existe plusieurs éléments stream_descriptor dans le modèle. Bien que nous ne l'indiquions pas, vous pouvez manipuler les flux vidéo et audio d'un fichier séparément en une seule commande.

Comparez ce modèle de base à une utilisation simple qui affiche les caractéristiques des fichiers. Dans l'exemple, nous avons aligné les pièces équivalentes.

packager stream_descriptor [stream_descriptor-n] [flags]

packager input=glocken.mp4                       --dump_stream_info

La commande génère le résultat suivant:

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

Recherchez les caractéristiques abordées dans la section Principes de base des fichiers multimédias et notez quelques points. La hauteur et la largeur sont correctes pour la Full HD, et les codecs audio et vidéo font partie des codecs recommandés pour leurs types de conteneurs, AAC pour l'audio et H.264 pour la vidéo. Notez également que les flux sont identifiés par des nombres. Ils sont utiles pour les opérations qui manipulent l'audio et la vidéo séparément.

Notez que la sortie ci-dessus n'affiche pas le débit. Malgré les éléments manquants, cette sortie est plus facile à lire. Nous l'utilisons donc chaque fois que possible. Lorsque nous avons besoin d'informations que Shaka Packager ne peut pas obtenir, comme le débit, nous utilisons FFmpeg.

FFmpeg

FFmpeg est également une application sans frais permettant d'enregistrer, de convertir et de diffuser des fichiers multimédias. Ses fonctionnalités ne sont ni meilleures ni moins bonnes que celles de Shaka Packager. Ils sont simplement différents.

Le format de base d'une commande FFmpeg se présente comme suit:

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

Comme Shaka Packager, cette application peut gérer plusieurs flux. Certaines de ses options sont utilisées à plusieurs endroits et manipulent la sortie du fichier différemment en fonction de leur emplacement dans la commande. Gardez cela à l'esprit lorsque vous consultez les questions sur FFmpeg sur Stack Overflow et des sites similaires.

Nous allons à nouveau comparer le modèle de base à l'exemple d'affichage des caractéristiques des fichiers.

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

    ffmpeg                                     -i glocken.mp4

En plus des informations que nous avons demandées, un message d'erreur s'affiche, comme illustré dans l'exemple ci-dessous. En effet, il s'agit d'une utilisation techniquement incorrecte de FFmpeg. Nous l'utilisons, car il affiche des informations qui nous intéressent.

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

Installer des applications avec Docker

Si vous prévoyez de suivre et d'essayer nos commandes, vous pouvez installer manuellement les outils requis ou prendre le chemin le plus simple et utiliser Docker. Nous vous suggérons d'utiliser Docker, car cela vous fera gagner beaucoup de temps. Nous vous avons également fourni les instructions pour vous permettre de configurer rapidement votre compte.

  1. Commencez par créer un répertoire nommé media-tools sur votre ordinateur. Vous pouvez utiliser le nom de votre choix. Notez que les instructions suivantes supposent que vous utilisez media-tools comme nom de répertoire.

  2. Créez des répertoires docker et media dans media-tools. Votre répertoire media sera ainsi exclu du contexte de compilation. Cette information est importante, car media est l'emplacement où sont stockés les fichiers sur lesquels nous prévoyons d'effectuer des opérations, et certains d'entre eux peuvent être très volumineux. Placer le Dockerfile directement dans media-tools ralentirait la compilation de l'image si vous la reconstruisez plus tard, par exemple pour modifier les versions installées.

  3. Créez /media-tools/docker/Dockerfile et ajoutez les instructions de compilation suivantes:

    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. Créez l'image comme suit :

    docker build -t media-tools ./docker
    
  5. Exécutez l'image en tant que shell interactif. Sous Linux :

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

    Sous Windows :

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

Lorsque vous exécutez l'image, vous pouvez vérifier les versions de FFmpeg et de Shaka Packager pour vérifier que tout s'est bien déroulé en exécutant ffmpeg -version et packager --version. Le résultat doit se présenter comme suit :

/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

Maintenant que vous avez essayé Shaka Packager et FFmpeg, vous pouvez continuer à découvrir les concepts de base. Poursuivez avec les principes de base du streaming multimédia.