L'utilisation de contenus multimédias nécessite souvent de modifier les caractéristiques des fichiers multimédias, telles que le débit ou la résolution. Trouver un moyen simple de commencer peut être assez intimidant. Sur cette page, vous découvrirez les outils utilisés et comment 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 ces outils. Pourquoi couvrir deux applications ? Ces deux outils sont puissants et utiles en eux-mêmes, mais ne fait pas l'un ni l'autre de tout ce qui est nécessaire pour préparer les médias pour le Web. Nous avons également créé les pages Conversion multimédia et Chiffrement multimédia, qui présentent de nombreuses 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 ce sont deux des plus courantes et des plus puissantes. Les autres options incluent les applications IUG Miro, HandBrake et VLC. Il existe également des services d'encodage/transcodage tels que Zencoder, Amazon Elastic Encoder et l'API Google Transcoder.
Shaka Packager
Shaka Packager est un SDK de packaging média sans frais. Si vous utilisiez un lecteur multimédia sur votre site, Shaka Packager est utilisé pour préparer les fichiers. Il accepte la conversion des deux protocoles de streaming vidéo les plus courants: le streaming adaptatif dynamique sur HTTP (DASH) ou le streaming en direct HTTP (HLS). Shaka Packager prend en charge les principales fonctionnalités de sécurité: le chiffrement courant et la gestion des droits numériques (DRM, Digital Rights Management) de Widevine. Il peut également gérer le streaming en direct et la vidéo à la demande.
Malgré ce qu'il indique sur le package, cet utilitaire est destiné à plus que les 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 pour la lecture sur le Web. C'est cette dernière capacité qui nous est utile ici. En fait, Shaka Packager est le seul moyen pour les créateurs de médias Web d'effectuer certaines tâches sans dépenser d'argent dans 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 en saisissant packager -help
. Cet exemple est plus facile à comprendre et reflète les exemples de la documentation de Shaka Packager. Notez que le modèle comporte plusieurs éléments stream_descriptor
. Bien que nous ne le montions pas, vous pouvez manipuler les flux vidéo et audio d'un fichier séparément dans une seule commande.
Comparez ce modèle de base avec une utilisation simple qui affiche les caractéristiques du fichier. 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 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 décrites dans la section Principes de base des fichiers multimédias et observez quelques points importants. La hauteur et la largeur sont correctes pour le Full HD. Les codecs 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 des nombres. Ils sont utiles pour les opérations qui manipulent le son et la vidéo séparément.
Notez que la sortie ci-dessus n'indique pas le débit. Malgré ce qui manque, cette sortie est plus facile à lire, nous l'utilisons donc autant que possible. Lorsque nous avons besoin d'informations que Shaka Packager ne peut pas obtenir, telles que 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 capacités ne sont ni meilleures, ni pires 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 options sont utilisées à plusieurs emplacements et manipulent la sortie du fichier différemment en fonction de l'endroit où elles se trouvent dans la commande. Tenez-en compte lorsque vous consultez les questions FFmpeg sur Stack Overflow et les sites similaires.
Nous comparons à nouveau le modèle de base à l'exemple d'affichage des caractéristiques du fichier.
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. Cela est dû au fait qu'il s'agit techniquement d'une utilisation incorrecte 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 et d'essayer nos commandes, vous pouvez soit installer les outils requis manuellement, soit opter pour la méthode la plus simple et utiliser Docker. Nous vous conseillons d'utiliser Docker, car cela vous fera gagner beaucoup de temps. En plus de cela, nous vous fournissons les instructions pour une configuration rapide.
Commencez par créer un répertoire nommé
media-tools
quelque part sur votre ordinateur. Vous pouvez utiliser le nom de votre choix. Notez toutefois que les instructions suivantes supposent que vous utilisezmedia-tools
comme nom de répertoire.Créez un répertoire
docker
etmedia
dansmedia-tools
. Votre répertoiremedia
sera ainsi hors du contexte de compilation. C'est important, carmedia
est l'emplacement de stockage des fichiers sur lesquels nous prévoyons d'effectuer des opérations, et certains d'entre eux peuvent être assez volumineux. PlacerDockerfile
directement dansmedia-tools
ralentit la création de l'image si vous la reconstruisez par la suite, par exemple pour changer les versions installées.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"]
Créez l'image comme suit :
docker build -t media-tools ./docker
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 #
Lors de l'exécution de l'image, vous pouvez vérifier les versions de FFmpeg et de Shaka Packager afin de vérifier que tout s'est bien passé 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 savez utiliser Shaka Packager et FFmpeg, vous pouvez continuer à découvrir les concepts de base. Pour en savoir plus, consultez la section Principes de base du streaming multimédia.