Conversion média

Derek Herman
Derek Herman
Joe Medley
Joe Medley

Dans cet article, nous allons découvrir quelques commandes courantes pour convertir et manipuler des caractéristiques spécifiques des fichiers multimédias. Bien que nous ayons essayé de montrer des opérations équivalentes pour toutes les procédures, toutes les opérations ne sont pas possibles dans les deux applications.

Dans de nombreux cas, les commandes que nous présentons peuvent être combinées dans une seule opération de ligne de commande et le seront lorsqu'elles seront réellement utilisées. Par exemple, rien ne vous empêche de définir le débit d'un fichier de sortie dans la même opération qu'une conversion de fichier. Pour cet article, nous présentons souvent ces opérations sous forme de commandes distinctes par souci de clarté.

La conversion est effectuée avec les applications suivantes:

Caractéristiques d'affichage

Shaka Packager et FFmpeg peuvent tous deux être utilisés pour inspecter le contenu d'un fichier multimédia, puis afficher les caractéristiques d'un flux. Toutefois, les deux fournissent une sortie différente pour le même support.

Caractéristiques à l'aide de Shaka Packager

packager input=glocken.mp4 --dump_stream_info

Le résultat ressemble à ceci:

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

Caractéristiques utilisant FFmpeg

ffmpeg -i glocken.mp4

Le résultat ressemble à ceci:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'glocken.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.83.100
  Duration: 00:00:10.03, start: 0.000000, bitrate: 8063 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 1920x1080, 7939 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, 127 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
At least one output file must be specified

Démultiplexer (séparer) les flux audio et vidéo

Shaka Packager nécessite un démultiplexage lors de la conversion de fichiers. Cela est également nécessaire pour utiliser les frameworks multimédias.

Démultiplexage du packageur Shaka

MP4

packager input=myvideo.mp4,stream=video,output=myvideo_video.mp4
packager input=myvideo.mp4,stream=audio,output=myvideo_audio.m4a

soit :

packager \
  input=myvideo.mp4,stream=video,output=myvideo_video.mp4 \
  input=myvideo.mp4,stream=audio,output=myvideo_audio.m4a

WebM

packager \
  input=myvideo.webm,stream=video,output=myvideo_video.webm \
  input=myvideo.webm,stream=audio,output=myvideo_audio.webm

Démultiplexage FFmpeg

MP4

ffmpeg -i myvideo.mp4 -vcodec copy -an myvideo_video.mp4
ffmpeg -i myvideo.mp4 -acodec copy -vn myvideo_audio.m4a

WebM

ffmpeg -i myvideo.webm -vcodec copy -an myvideo_video.webm
ffmpeg -i myvideo.webm -acodec copy -vn myvideo_audio.webm

Remuxer (combiner) les flux audio et vidéo

Dans certains cas, vous devrez combiner l'audio et la vidéo dans un seul conteneur. en particulier lorsque vous n'utilisez pas de framework multimédia. FFmpeg peut gérer cela très bien, ce qui n'est pas le cas de Shaka Packager pour le moment.

ffmpeg -i myvideo_video.webm -i myvideo_audio.webm -c copy myvideo.webm

Modifier les caractéristiques

Débit

Pour FFmpeg, vous pouvez le faire lors de la conversion en .mp4 ou .webm.

ffmpeg -i myvideo.mov -b:v 350K myvideo.mp4
ffmpeg -i myvideo.mov -vf setsar=1:1 -b:v 350K myvideo.webm

Dimensions (résolution)

ffmpeg -i myvideo.webm -s 1920x1080 myvideo_1920x1080.webm

File type

Shaka Packager ne peut pas traiter les fichiers .mov et ne peut donc pas être utilisé pour convertir des fichiers de ce format.

.mov vers .mp4

ffmpeg -i myvideo.mov myvideo.mp4

.mov vers .webm

ffmpeg -i myvideo.mov myvideo.webm

Synchroniser l'audio et la vidéo

Pour vous assurer que l'audio et la vidéo se synchronisent pendant la lecture, insérez des images clés.

ffmpeg -i myvideo.mp4 -keyint_min 150 -g 150 -f webm -vf setsar=1:1 out.webm

MP4/H.264

ffmpeg -i myvideo.mp4 -c:v libx264 -c:a copy myvideo.mp4

Audio pour un MP4

ffmpeg -i myvideo.mp4 -c:v copy -c:a aac myvideo.mp4

WebM/VP9

ffmpeg -i myvideo.webm -v:c libvpx-vp9 -v:a copy myvideo.webm

Audio pour un fichier WebM

ffmpeg -i myvideo.webm -v:c copy -v:a libvorbis myvideo.webm
ffmpeg -i myvideo.webm -v:c copy -v:a libopus myvideo.webm

Vidéo à la demande et diffusion en direct

Dans cet article, nous allons présenter deux types de protocoles de streaming. Le premier est le streaming adaptatif dynamique sur HTTP (DASH), qui est une technique de streaming à débit adaptatif et une méthode de présentation de la vidéo à la demande basée sur les normes Web. Le second est HTTP Live Streaming (HLS), qui est la norme d'Apple pour le streaming en direct et la vidéo à la demande sur le Web.

DASH/MPD

Cet exemple génère le fichier de sortie de la description de la présentation du média (MPD) à partir des flux audio et vidéo.

packager \
  input=myvideo.mp4,stream=audio,output=myvideo_audio.mp4 \
  input=myvideo.mp4,stream=video,output=myvideo_video.mp4 \
  --mpd_output myvideo_vod.mpd

HLS

Ces exemples génèrent un fichier de sortie M3U8 à partir des flux audio et vidéo, qui est une playlist multimédia encodée en UTF-8.

ffmpeg -i myvideo.mp4 -c:a copy -b:v 8M -c:v copy -f hls \
  -hls_time 10 -hls_list_size 0 myvideo.m3u8

OU :

packager \
  'input=myvideo.mp4,stream=video,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \
  'input=myvideo.mp4,stream=audio,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \
  --hls_master_playlist_output="master_playlist.m3u8"

Maintenant que nous avons une bonne compréhension de la conversion de fichiers, nous pouvons nous appuyer sur ce que nous avons appris dans cet article et découvrir le chiffrement multimédia.