Mejor respuesta , con explicación, incorporando sugerencias inteligentes de slhck y Mulvya, desprovistas de parámetros no esenciales.
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
Herramienta de manipulación de audio / video: ya seleccionada por el OP, es particularmente adecuada para este trabajo.
-i video.mp4
primer archivo de entrada: un video con algo de audio que queremos extraer.
-i cover.jpg
segundo archivo de entrada, una imagen que queremos mostrar cuando reproducimos el archivo de audio resultante.
-acodec libmp3lame
queremos crear un archivo .mp3, usando el codificador LAME.
-b:a 256k
Esto establece la velocidad de bits para la pista de audio a 256Kb / s constantes. Una opción más inteligente sería codificar con una tasa de bits variable, especificando el parámetro de calidad : -q:a 0
pide la calidad máxima, mientras que a -q:a 4
menudo representa un buen compromiso entre la calidad de audio percibida y la tasa de bits (y, por lo tanto, el tamaño del archivo).
-c:v copy
esto indica que la transmisión de video (la imagen .jpg) no debe volver a codificarse, sino que debe copiarse tal como está. Esto es útil para evitar el procesamiento innecesario y la posible pérdida de calidad al volver a codificar a un formato con pérdida. En nuestro caso, sin este parámetro, la imagen se decodificaría de .jpg y se codificaría a .png, que aparentemente es el formato nativo que se elige por defecto. Esto no representaría una pérdida de calidad, ya que .png es de pérdida, pero la mayoría de las veces hará que el tamaño del archivo aumente, debido a que .jpg (con pérdida) generalmente ofrece una mejor tasa de compresión.
-map 0:a:0
esto selecciona la secuencia que se utilizará desde el primer 0:
archivo de entrada ( ): tiene que ser la primera secuencia de :0
audio ( a
) que contiene.
-map 1:v:0
esto selecciona la primera transmisión de :0
video ( v
) del segundo 1:
archivo de entrada ( ).
output.mp3
El nombre de este parámetro se eligió astutamente para sugerir que este debe ser el nombre que se le dará al archivo de audio de salida (.mp3) con la imagen incorporada que queremos crear.
Respuesta original
Esto crea un archivo de audio (.mp3) con una imagen estática al juntar un video (.mp4) y una imagen (.jpg) de mi boda:
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
Consulte la documentación de ffmpeg sobre la selección de flujos de entrada con -map
, que es la opción relevante aquí.
Primero ejecuté el comando simplemente -map 0 -map 1
y obtuve esta información:
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))
Por lo tanto, sabía que quería transmisión 1
(audio aac) del archivo que tiene un número de índice 0
, es decir, el archivo de video; por lo tanto, tuvo que seleccionarse explícitamente con -map 0:1 -map 1
.