Risposta migliore , con spiegazione, che incorpora suggerimenti intelligenti da slhck e Mulvya, spogliati di parametri non essenziali.
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
strumento di manipolazione audio / video: già selezionato dall'OP, è particolarmente adatto a questo lavoro.
-i video.mp4
primo file di input: un video con un po 'di audio che vogliamo estrarre.
-i cover.jpg
secondo file di input, un'immagine che vogliamo visualizzare quando riproduciamo il file audio risultante.
-acodec libmp3lame
vogliamo creare un file .mp3, usando il codificatore LAME.
-b:a 256k
questo imposta il bitrate per la traccia audio a 256Kb / s costanti. Un'opzione più intelligente sarebbe quella di codificare con un bitrate variabile, specificando il parametro di qualità : -q:a 0
chiede la massima qualità, mentre -q:a 4
spesso rappresenta un buon compromesso tra qualità audio percepita e bitrate (e, quindi, dimensione del file).
-c:v copy
questo indica che il flusso video (l'immagine .jpg) non deve essere ricodificato, ma deve essere copiato così com'è. Ciò è utile per evitare elaborazioni non necessarie e potenziali perdite di qualità durante la ricodifica in un formato con perdita. Nel nostro caso, senza questo parametro l'immagine verrebbe decodificata da .jpg e codificata in .png, che apparentemente è il formato nativo che viene scelto di default. Ciò non significherebbe una perdita di qualità poiché .png è lossles, ma il più delle volte causerà un aumento delle dimensioni del file, in quanto .jpg (essendo lossy) offre generalmente un migliore tasso di compressione.
-map 0:a:0
seleziona il flusso da utilizzare dal primo ( 0:
) file di input: deve essere il primo ( :0
) audio ( a
) flusso che contiene.
-map 1:v:0
questo seleziona il primo ( :0
) video ( v
) stream dal secondo ( 1:
) file di input.
output.mp3
il nome di questo parametro è stato scelto astutamente per suggerire già che questo deve essere il nome da assegnare al file audio di output (.mp3) con l'immagine incorporata che vogliamo creare.
Risposta originale
Questo crea un file audio (.mp3) con un'immagine statica mettendo insieme un video (.mp4) e un'immagine (.jpg) del mio matrimonio:
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
Vedi la documentazione di ffmpeg sulla selezione dei flussi di input con -map
, che è l'opzione pertinente qui.
Per prima cosa ho eseguito il comando semplicemente -map 0 -map 1
e ho ottenuto queste informazioni:
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))
Quindi sapevo che volevo lo streaming 1
(aac audio) dal file che ha un numero indice di 0
, cioè il file video; quindi doveva essere selezionato esplicitamente con -map 0:1 -map 1
.