Meilleure réponse , avec explication, incorporant des suggestions intelligentes de slhck et Mulvya, dépourvues de paramètres non essentiels.
ffmpeg -i video.mp4 -i cover.jpg -acodec libmp3lame -b:a 256k -c:v copy -map 0:a:0 -map 1:v:0 output.mp3
ffmpeg
outil de manipulation audio / vidéo: déjà sélectionné par l'OP, il est particulièrement adapté à ce métier.
-i video.mp4
premier fichier d'entrée: une vidéo avec de l'audio que nous voulons extraire.
-i cover.jpg
deuxième fichier d'entrée, une image que nous voulons afficher lors de la lecture du fichier audio résultant.
-acodec libmp3lame
nous voulons créer un fichier .mp3, en utilisant l'encodeur LAME.
-b:a 256k
cela définit le débit binaire de la piste audio à 256 Ko / s constants. Une option plus intelligente serait d'encoder avec un débit binaire variable, en spécifiant le paramètre de qualité : -q:a 0
demande la qualité maximale, tout en -q:a 4
représentant souvent un bon compromis entre la qualité audio perçue et le débit binaire (et donc la taille du fichier).
-c:v copy
cela indique que le flux vidéo (l'image .jpg) ne doit pas être réencodé mais doit être copié tel quel. Ceci est utile pour éviter un traitement inutile et une perte potentielle de qualité lors du réencodage dans un format avec perte. Dans notre cas, sans ce paramètre, l'image serait décodée de .jpg et encodée en .png, qui est apparemment le format natif qui est choisi par défaut. Cela ne représenterait pas une perte de qualité car .png est lossles, mais le plus souvent, la taille du fichier augmentera, car le .jpg (avec perte) offre généralement un meilleur taux de compression.
-map 0:a:0
cela sélectionne le flux à utiliser dans le premier 0:
fichier d'entrée ( ): il doit être le premier :0
flux ( a
) audio ( ) qu'il contient.
-map 1:v:0
cela sélectionne le premier ( :0
) v
flux vidéo ( ) du deuxième ( 1:
) fichier d'entrée.
output.mp3
le nom de ce paramètre a été judicieusement choisi afin de suggérer déjà qu'il doit s'agir du nom à donner au fichier audio de sortie (.mp3) avec l'image incorporée que nous voulons créer.
Réponse originale
Cela crée un fichier audio (.mp3) avec une image statique en assemblant une vidéo (.mp4) et une image (.jpg) de mon mariage:
ffmpeg -i video.mp4 -i cover.jpg -acodec libmp3lame -metadata title=video -b:a 256k -map_metadata 0 -map 0:1 -map 1 output.mp3
Voir la documentation de ffmpeg sur la sélection des flux d'entrée avec -map
, qui est l'option pertinente ici.
J'ai d'abord exécuté la commande avec simplement -map 0 -map 1
et obtenu ces informations:
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> png (native))
Stream #0:1 -> #0:1 (aac (native) -> mp3 (libmp3lame))
Stream #1:0 -> #0:2 (mjpeg (native) -> png (native))
Ainsi, je savais que je voulais un flux 1
(audio aac) à partir du fichier qui a un numéro d'index 0
, c'est-à-dire le fichier vidéo; il fallait donc le sélectionner explicitement avec -map 0:1 -map 1
.