mercredi 6 mars 2013

Créer une vidéo avec juste une seule image.

Il m'est arrivé à plusieurs reprises de vouloir faire une vidéo avec une image statique et une piste son, juste pour pouvoir diffuser une musique sur YouTube ou Facebook comme pour cet exemple là:

L'image ne bouge pas, elle ne sert que pour décorer et prétexter la diffusion de la musique.
Aussi, cela peut-être réalisé avec une simple commande ffmpeg.
En général je me sert d'une image sans perte (PNG, BMP, etc) d'une résolution supérieure ou égale à 1080 pixels de hauteur (peu importe la largeur) et d'une piste audio elle aussi sans perte (FLAC, WAV, etc).

Déjà, pourquoi créer une vidéo avec un son et une image sans perte. Tout simplement parce que la vidéo et le son seront recompressés par le site qui reçoit la vidéo.
Donc si vous compressez votre vidéo une fois, le tout sera compressé deux fois.
Et j'aime bien l'idée que tout soit le moins compressé possible.

Ensuite, pourquoi utiliser une image supérieure ou égale à 1080 pixels de hauteur ?
Car la qualité du son va varier en fonction de la taille de l'image, si votre vidéo est disponible en haute définition, le son aussi bénéficiera d'un meilleur traitement.
Alors autant ne pas rester bloqué à une qualité de son moyenne.

La commande à utliser est la suivante:
ffmpeg -loop 1 -i <image> -i <piste_son> -shortest -c:v <codec_video> -c:a <codec_audio> rendu.mkv

Vous devez scrupuleusement respecter l'ordre des paramètres.
Ici, -loop 1 est placé avant -i <image> car cela signifie que que l'image sera répétée pour créer une vidéo.
L'option -shortest signifie que la vidéo devra durer aussi longtemps que le son.

Par exemple, à supposer que je possède une image ciel.bmp et une musique classique.wav, j'exécute généralement la commande suivante:
ffmpeg -loop 1 -i ciel.bmp -i classique.wav -shortest -c:v libx264 -preset ultrafast -qp 0 -c:a flac rendu.mkv

Ici vous pouvez voir que j'utilise le codec h264 pour la vidéo et FLAC pour l'audio. Cela me permet de ne perdre absolument aucunement la qualité visuelle et sonore mais de prendre considérablement moins de place que s'il s'agissait de codecs bruts.