Convierta .flac a .mp3 con ffmpeg, manteniendo todos los metadatos

88

¿Cómo puedo convertir .flac a .mp3 con ffmpeg, manteniendo todos los metadatos (es decir, convertir el comentario de Vorbis en archivos .flac a metadatos ID3v2 de .mp3)?

Vito Gentile
fuente
5
Tenga en cuenta que la próxima vez debe hacer ffmpegpreguntas sobre el uso de cli en Super User . Stack Overflow es solo para preguntas relacionadas con la programación. Además, FLAC admite oficialmente solo los comentarios de Vorbis , así que supongo que desea convertir a ID3v2 en lugar de "mantener".
llogan
Ok, arreglé mi pregunta. Pregunté aquí porque vi preguntas como esta en StackOverflow (por ejemplo, esto o esto ), y asumí que podría ser interesante compartir mi conocimiento. Además, veo que hay una etiqueta ffmpeg , entonces, ¿por qué no compartir mi solución aquí? ffmpeg es utilizado en muchas aplicaciones por muchos desarrolladores.
Vito Gentile
3
La etiqueta ffmpeg dice: "Las preguntas sobre el uso interactivo de la herramienta de línea de comandos FFmpeg deben hacerse en Superusuario". No es gran cosa, pero solo quería señalarlo ya que, en mi opinión, hay demasiadas preguntas fuera de tema aquí.
llogan

Respuestas:

152

El siguiente comando mantiene alta calidad en .mp3 (320 kbps) y los metadatos del archivo .flac se convierten al formato ID3v2, que se puede incluir en archivos .mp3:

ffmpeg -i input.flac -ab 320k -map_metadata 0 -id3v2_version 3 output.mp3
Vito Gentile
fuente
1
Vale la pena señalar que "ffmpeg" puede necesitar ser reemplazado por "avconv".
shockburner
5
FWIW ffmpeg3.2 copia automáticamente metadatos en ID3v2 desde FLAC sin necesidad de especificar -map_metadata 0 -id3v2_version 3, aunque no copia en etiquetas ID3v1. Utilizo una herramienta separada para eso.
Dai
1
letras todavía no se copian aunque
user151496
1
¿Divide flac si hay varias partes?
Artyom
1
@Artyom Probablemente debería tener el archivo cue junto con su flac donde están marcados los puntos de división. Si es así, puede usar shnsplit (consola) o flacon (GUI) para dividir su archivo y convertir las partes a mp3. Si solo tiene un flac , puede escribir un cui para él o usar las opciones -ss y -t de ffmpeg para cortar cada canción.
56

Respuesta perfecta arriba. Lo uso junto con find para agregar todos los archivos FLAC en un subárbol a iTunes con este comando

find . -name "*.flac" -exec ffmpeg -i {} -ab 160k -map_metadata 0 -id3v2_version 3 {}.mp3 \;

Para agregar automáticamente los archivos resultantes a iTunes, obtenga el directorio de importación de iTunes con

find ~/Music/ -name "Automatically Add*"

resultado, por ejemplo

/Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized

Entonces ejecuta, por ejemplo

find . -name "*.mp3" -exec mv {} "/Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized/" \;

Para agregar automáticamente todas las pistas convertidas a iTunes.

user2707001
fuente
3
" / Usuarios / señor ", lmao.
Harry Svensson
Anécdota: todos los usuarios de nuestra empresa tienen nombres de estrellas, abreviados a 3-5 caracteres. El mío es "sirius", breve señor;)
user2707001
Opción 'nombre' no reconocida.
MonsterMMORPG
14

Si quieres ahorrar un poco de espacio, prueba la recomendación de hydrogenaud.io :

De muy alta calidad: alta fidelidad, casa, o escucha silenciosa, con el mejor tamaño de archivo -V0 (~245 kbps), -V1 (~225 kbps), -V2 (~190 kbps)o -V3 (~175 kbps)se recomiendan. Estos ajustes de VBR normalmente producirán resultados transparentes. Pueden existir diferencias audibles entre estos preajustes, pero son raras.

Fuente: http://wiki.hydrogenaud.io/index.php?title=LAME

Si desea usar esta opción en ffmpeg, debe usar el -q:a 0alias.

Controle la calidad con -qscale:a(o el alias -q:a). Los valores son específicos del codificador, por lo que para libmp3lame el rango es 0-9 donde un valor más bajo es una calidad más alta. 0-3 normalmente producirá resultados transparentes, 4 (predeterminado) debería estar cerca de la transparencia perceptiva y 6 produce una calidad "aceptable". La opción -qscale:ase asigna a la -Vopción en la herramienta de interfaz de línea de comandos lame independiente.

Fuente: https://trac.ffmpeg.org/wiki/Encode/MP3

Si también desea metaetiquetas ID3v1, debe agregar el -write_id3v1 1parámetro.

Entonces mi comando final es:

ffmpeg.exe -y -i input.flac -codec:a libmp3lame -q:a 0 -map_metadata 0 -id3v2_version 3 -write_id3v1 1 output.mp3
wiktor
fuente
8

Estaba probando el siguiente comando para convertir el infile.flacarchivo a outfile.mp3:

ffmpeg  -i infile.flac  -q:a 0  outfile.mp3

A partir de Ubuntu 16.04, el comando anterior parece copiar (¿la mayoría? ¿Todos?) Los metadatos.

-q:a 0indica ffmpegque utilice VBR de la más alta calidad.

Sin embargo, ffmpegestaba transcodificando la carátula de mi álbum de jpega png, lo que aumentó el tamaño de la carátula.

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

(Supongo que la conversión anterior tiene sentido dado cómo ffmpegfunciona ).

Después de investigar un poco, encontré la -c:v copyopción, que especifica que la transmisión de video debe copiarse, en lugar de transcodificarse. El comando completo es:

ffmpeg  -i infile.flac  -c:v copy  -q:a 0  outfile.mp3

El comando anterior da como resultado:

Stream mapping:
  Stream #0:1 -> #0:0 (copy)
  Stream #0:0 -> #0:1 (flac (native) -> mp3 (libmp3lame))
mpb
fuente
3

Para convertir de forma recursiva en mp3 todos los archivos flac en carpetas anidadas, utilicé este comando:

find '~/Music/' -iname '*.flac' -exec bash -c 'D=$(dirname "{}"); B=$(basename "{}"); mkdir "$D/mp3/"; ffmpeg -i "{}" -ab 320k -map_metadata 0 -id3v2_version 3 -acodec libmp3lame "$D/mp3/${B%.*}.mp3"' \;

Creará una carpeta llamada "mp3" dentro de la que contiene los archivos flac y, dentro de la carpeta mp3, guardará archivos mp3 relativos con una tasa de bits de 320 kbps, sin mantener la extensión de archivo anterior en el nombre.

Riccardo Volpe
fuente
3

Una línea para convertir todos los .flacarchivos .mp3en un solo directorio, manteniendo la mayoría de los metadatos:

for file in *.flac; do ffmpeg -i $file -q:a 0 ${file:r}.mp3; done

(Nota: ${file:r}elimina la extensión de la ruta de archivo dada)

ffmpeg: flac a mp3

woudsma
fuente
Simplemente cite la variable $filecomo "$file".
Chazy Chaz
:rparece ser un zshmodificador, que no funciona en bash. En Bash puedes reemplazarlo "${file:r}.mp3"con "${file%.flac}.mp3".
mivk
para mostrar solo el nombre de archivo del archivo, en el uso de bash${file%.*}
Evhz
2

Sé que esto no se preguntó, pero considerando que una de las razones por las que se hace (al menos eso es lo que quería hacer) es para que la música se pueda importar a Apple iTunes que no es compatible con FLAC. En tal caso, tiene más sentido convertir FLAC al formato sin pérdidas de Apple, m4a. Utilicé este comando para convertir todos los archivos en la carpeta actual, conservando tamaños de archivo similares.

find . -name "*.flac" -exec ffmpeg -i {} -map_metadata 0 -acodec alac {}.m4a \;

Dhiraj Gupta
fuente
Opción 'nombre' no reconocida. Error al dividir la lista de argumentos: opción no encontrada
MonsterMMORPG
@MonsterMMORPG probablemente te perdiste escribir el. después del comando de búsqueda. Los . le dice a find que busque en la carpeta actual, y -name le dice que busque nombres de archivo coincidentes.
Dhiraj Gupta
2

Este script flac2mp3.sh se utiliza ffmpegpara convertir un árbol de carpetas de archivos FLAC en otro árbol de carpetas de archivos MP3. Se incluye la portada, cuando está presente. Puede establecer una CORESvariable para crear trabajos en segundo plano para convertir varios archivos a la vez.

Rick O'Sullivan
fuente
da error sed: -e expresión # 1, char 26: comando `s 'sin terminar
MonsterMMORPG
Exactamente lo que estaba buscando, gracias! Ajusté el guión un poco para incorporar VBR y otras respuestas, subido aquí: GIST
aksh1618