Convertir Mp4 a Mp3 con miniatura


8

Puedo convertir un mp4 a un mp3 en ffmpeg, pero no estoy seguro de cómo agregaría una miniatura del video.

Actualmente tengo esto para convertir de mp4 a mp3

ffmpeg -i video.mp4 -acodec libmp3lame -metadata title=video -b:a 256 -f input.mp3

¿Tendría que ejecutar eso a través de ffmpeg nuevamente con este comando?

ffmpeg -i input.mp3 -i cover.jpg -map_metadata 0 -map 0 -map 1 output.mp3

¿O hay alguna forma de usar filtros complejos para lograr esto?

Sé que esto funciona para FLV pero no parece funcionar para mp4

ffmpeg -i video.flv -i cover.jpg -map 0:a -map 1 -c:v copy -metadata title=video -b:a 256k out.mp3

¿Realmente quieres que la conversión establezca automáticamente la miniatura? Porque de lo contrario, podría cambiarlo manualmente, pero no estoy seguro de si está buscando eso. Si puede hacerlo con FLV pero no con MP4, simplemente haría un script que ejecute ambos comandos.
RamonRobben

@RamonRobben Estoy tratando de evitar tener que ejecutar ffmpeg dos veces
nadermx

puede intentar algo como esto ffmpeg -i in.mp4 -i test.png -map 0: 0 -map 1: 0 -c copy -id3v2_version 3 -metadata: s: v title = "Album cover" -metadata: s: v comment = "Cover (Front)" out.mp3 Estoy descargando ffmpeg para comenzar a probarlo.
RamonRobben

Respuestas:


3

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 256kEsto 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 0pide la calidad máxima, mientras que a -q:a 4menudo 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 copyesto 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:0esto selecciona la secuencia que se utilizará desde el primer 0:archivo de entrada ( ): tiene que ser la primera secuencia de :0audio ( a) que contiene.

-map 1:v:0esto selecciona la primera transmisión de :0video ( 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 1y 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.


He intentado esto, pero me da Stream map '0:1' matches no streams. To ignore this, add a trailing '?' to the map.
nadermx

Ejecútelo con ´-map 0 -map 1´ y vea cuáles son las transmisiones disponibles.
simlev

Stream mapping: Stream #0:0 -> #0:0 (aac (native) -> mp3 (libmp3lame)) Stream #1:0 -> #0:1 (mjpeg (native) -> png (native))
nadermx

1
@nadermx Puede -map 0:a:0 -map 1:v:0seleccionar las primeras transmisiones de audio y video del primer y segundo archivo, respectivamente.
slhck

1
Evite codificar la entrada de imagen, especialmente con JPG. -c:v copy.
Gyan

2

puedes usar vlc media player -

Paso 1: Abra el VLC y seleccione "Medios". Haga clic en convertir / guardar.

Paso 2: En la siguiente ventana que aparece, seleccione "agregar" y elija el archivo de video (MP4) para convertir.

Paso 3: A continuación, haga clic en la flecha hacia abajo en "Convertir / Guardar" y luego haga clic en "Convertir".

Paso 4: en la siguiente ventana que aparece, asegúrese de que esté seleccionado el botón "Convertir". Proceda a elegir el tipo de archivo de audio que desea crear. En nuestro caso, estamos convirtiendo su archivo MP3.

Paso 5: Elija un destino de salida, y luego presione "Inicio". El VLC comenzará la conversión.

para agregar una miniatura, puede consultar este enlace (explicado muy bien).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.