Principes de base des applications multimédias

Derek Herman
Derek Herman
Joe Medley
Joe Medley

Travailler avec des médias implique souvent de changer les caractéristiques des fichiers multimédias, comme le débit ou la résolution. Pour vous lancer plus facilement, être assez intimidants. Sur cette page, vous découvrirez les outils utilisés et comment pour les installer rapidement.

Tout d'abord, nous décrivons l'utilisation de base de deux utilitaires multimédias de ligne de commande courants: Shaka Packager et FFmpeg, puis nous vous aidons à installer rapidement les outils. Pourquoi couvrir deux applications ? Bien que les deux soient puissants et utiles en soi, ni tout ce qui est nécessaire pour préparer les médias pour le Web. Nous avons également créé Conversion multimédia et chiffrement multimédia qui présentent beaucoup plus d'opérations courantes avec ces deux applications.

Ces applications ne sont pas les seules options disponibles pour les tâches de manipulation de fichier, mais ce sont deux des plus courants et des plus puissants. Les autres options incluent l'interface graphique les applications Miro, HandBrake et VLC. Il y a aussi l'encodage/le 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, Shaka Packager est ce que vous utiliseriez pour préparer les fichiers. Il est compatible avec la conversion des deux protocoles de streaming vidéo les plus courants : Streaming adaptatif sur HTTP (DASH) ou streaming en direct HTTP (HLS) Shaka Le packageur prend en charge des fonctionnalités de sécurité clés: le chiffrement commun et Widevine Digital gestion des droits (DRM, Rights Management, DRM). Il peut également gérer le streaming en direct et la vidéo à la demande.

Malgré ce qui est indiqué sur le package, cet utilitaire est destiné à plus que C++ développeurs. Vous pouvez l'utiliser à la fois comme bibliothèque pour créer des logiciels multimédias et comme utilitaire de ligne de commande permettant de préparer des fichiers multimédias pour la lecture Web. Il s'agit qui nous est utile ici. Pour les créateurs de médias Web, Shaka Packager est le seul moyen d'effectuer certaines tâches sans dépenser d'argent d'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 le résultat que vous obtenez si vous saisissez packager -help. Cet exemple est plus facile à comprendre, et cela reflète les exemples du Documentation de Shaka Packager Notez qu'il existe plusieurs stream_descriptor éléments dans le modèle. Bien que nous ne le montrons pas, vous pouvez manipuler la vidéo et audio d'un fichier séparément dans une seule commande.

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

packager stream_descriptor [stream_descriptor-n] [flags]

packager input=glocken.mp4                       --dump_stream_info

La commande renvoie 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 décrites dans la section Principes de base des fichiers multimédias. et vous remarquez quelques choses. La hauteur et la largeur sont correctes pour le Full HD. audio et vidéo font partie des codecs préférés pour leurs types de conteneurs, AAC pour l'audio et H264 pour la vidéo Notez également que les flux sont identifiés par de chiffres. Ils sont utiles pour les opérations qui manipulent les fichiers audio et vidéo séparément.

Notez que la sortie ci-dessus n'affiche pas le débit. Malgré ce qui manque, cette sortie est plus facile à lire, nous l'utilisons chaque fois que nous le pouvons. Lorsque nous avons besoin 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 du contenu en streaming. fichiers multimédias. Ses capacités ne sont ni meilleures ni moins bonnes que celles de Shaka Packager. Ils sont juste différents.

Le schéma 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 Les options sont utilisées à plusieurs emplacements et manipulent différemment la sortie du fichier en fonction de leur emplacement dans la commande. Soyez conscient de cela lorsque vous consultez les questions FFmpeg sur Stack Overflow et des sites similaires.

Comparons à nouveau le modèle de base à l'exemple d'affichage du fichier caractéristiques.

    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, techniquement, il s'agit d'une erreur de FFmpeg. Nous l'utilisons parce qu'elle affiche les 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 les étapes et d'essayer nos commandes, vous pouvez soit installer manuellement les outils nécessaires, ou opter pour le chemin simple et utiliser Docker. Nous vous suggérons d'utiliser à Docker, car cela vous fera gagner beaucoup de temps. En plus de cela, nous avons m'a fourni les instructions pour une configuration rapide.

  1. Commencez par créer un répertoire sur votre ordinateur nommé media-tools. vous pouvez utiliser le nom de votre choix, notez simplement que les instructions suivantes partons du principe que vous utilisez media-tools comme nom de répertoire.

  2. Créez un répertoire docker et media dans media-tools. Votre répertoire media sera ainsi exclu du contexte de compilation. C'est important car media est l'endroit où sont stockés les fichiers sur lesquels nous prévoyons d'effectuer des opérations. certains d'entre eux pourraient être assez volumineux. Placer directement Dockerfile media-tools ralentirait la création de l'image si vous la reconstruisiez plus tard route, peut-être pour changer les versions installées.

  3. Créez /media-tools/docker/Dockerfile, puis 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 a bien été effectué 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 vous êtes essayé à l'utilisation de Shaka Packager et FFmpeg, vous pouvez continuer les concepts de base, passez à la section Principes de base du streaming multimédia.