Convertissez .flac en .mp3 avec ffmpeg, en conservant toutes les métadonnées

88

Comment puis-je convertir .flac en .mp3 avec ffmpeg, en conservant toutes les métadonnées (c'est-à-dire en convertissant les commentaires Vorbis dans les fichiers .flac en métadonnées ID3v2 de .mp3)?

Vito Gentile
la source
5
Veuillez noter que pour la prochaine fois, vous devriez poser ffmpegdes questions sur l'utilisation de cli à Super User . Stack Overflow est uniquement pour les questions impliquant la programmation. De plus, FLAC ne prend officiellement en charge que les commentaires Vorbis , donc je suppose que vous voulez convertir en ID3v2 au lieu de "garder".
llogan le
Ok, j'ai résolu ma question. J'ai posé la question ici parce que j'ai vu des questions comme celle-ci sur StackOverflow (par exemple ceci ou cela ), et j'ai supposé qu'il pourrait être intéressant de partager mes connaissances. Aussi, je vois qu'il y a une balise ffmpeg , alors pourquoi ne pas partager ma solution ici? ffmpeg est utilisé dans de nombreuses applications par de nombreux développeurs.
Vito Gentile
3
La balise ffmpeg dit: "Les questions sur l'utilisation interactive de l'outil de ligne de commande FFmpeg doivent être posées sur Super User.". Ce n'est pas un gros problème, mais je voulais juste le souligner car il y a trop de questions hors sujet ici à mon avis.
llogan le

Réponses:

152

La commande suivante conserve une qualité élevée sur .mp3 (320 kbps) et les métadonnées du fichier .flac sont converties au format ID3v2, qui peut être inclus dans les fichiers .mp3:

ffmpeg -i input.flac -ab 320k -map_metadata 0 -id3v2_version 3 output.mp3
Vito Gentile
la source
1
Il est à noter que "ffmpeg" devra peut-être être remplacé par "avconv".
shockburner
5
FWIW ffmpeg3.2 copie automatiquement les métadonnées dans ID3v2 à partir de FLAC sans avoir besoin de spécifier -map_metadata 0 -id3v2_version 3, bien qu'il ne copie pas dans les balises ID3v1. J'utilise un outil séparé pour cela.
Dai
1
les paroles ne sont toujours pas copiées
user151496
1
Est-ce qu'il divise flac s'il y a plusieurs parties?
Artyom
1
@Artyom Vous devriez probablement avoir le fichier de repère avec votre flac où les points de partage sont marqués. Si tel est le cas, vous pouvez utiliser shnsplit (console) ou flacon (GUI) pour diviser votre fichier et convertir les parties en mp3. Si vous n'avez qu'un seul flac, vous pouvez soit lui écrire un cui , soit utiliser les options -ss et -t de ffmpeg pour couper chaque morceau.
56

Réponse parfaite ci-dessus. Je l'utilise avec find pour ajouter tous les fichiers FLAC d'un sous-arbre à iTunes avec cette commande

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

Pour ajouter automatiquement les fichiers résultants à iTunes, obtenez le répertoire d'importation iTunes avec

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

résultat par exemple

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

Puis exécutez par exemple

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

Pour ajouter automatiquement toutes les pistes converties à iTunes.

user2707001
la source
3
" / Utilisateurs / monsieur ", lmao.
Harry Svensson
Anecdote: tous les utilisateurs de notre entreprise ont des noms d'étoiles, abrégés en 3 à 5 caractères. Le mien est "sirius", bref monsieur;)
user2707001
Option "nom" non reconnue.
MonsterMMORPG
14

Si vous souhaitez gagner un peu d'espace, essayez la recommandation de hydrogenaud.io :

Très haute qualité: HiFi, maison ou écoute calme, avec la meilleure taille du fichier -V0 (~245 kbps), -V1 (~225 kbps), -V2 (~190 kbps)ou -V3 (~175 kbps)sont recommandés. Ces paramètres VBR produiront normalement des résultats transparents. Des différences audibles entre ces préréglages peuvent exister, mais sont rares.

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

Si vous souhaitez utiliser cette option dans ffmpeg, vous devez utiliser l' -q:a 0alias.

Contrôlez la qualité avec -qscale:a(ou l'alias -q:a). Les valeurs sont spécifiques à l'encodeur, donc pour libmp3lame, la plage est comprise entre 0 et 9 où une valeur inférieure est une qualité supérieure. 0-3 produira normalement des résultats transparents, 4 (par défaut) devrait être proche de la transparence perceptuelle et 6 produira une qualité "acceptable". L'option -qscale:aest mappée à l' -Voption dans l'outil d'interface de ligne de commande lame autonome.

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

Si vous souhaitez également des balises méta ID3v1, vous devez ajouter le -write_id3v1 1paramètre.

Ma commande finale est donc:

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

Je testais la commande suivante pour convertir le infile.flacfichier en outfile.mp3:

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

Depuis Ubuntu 16.04, la commande ci-dessus semble copier (surtout? Toutes?) Les métadonnées.

-q:a 0dit ffmpegd'utiliser le VBR de la plus haute qualité.

Cependant, ffmpegj'ai transcodé la pochette de mon album de jpegà png, ce qui a augmenté la taille de la pochette.

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

(Je suppose que la conversion ci-dessus a du sens étant donné son ffmpegfonctionnement .)

Après quelques recherches, j'ai trouvé l' -c:v copyoption, qui spécifie que le flux vidéo doit être copié plutôt que transcodé. La commande complète est:

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

La commande ci-dessus entraîne:

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

Pour convertir récursivement en mp3 tous les fichiers flac dans des dossiers imbriqués, j'ai utilisé cette commande:

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"' \;

Il créera un dossier nommé "mp3" à l'intérieur de celui contenant les fichiers flac et, à l'intérieur du dossier mp3, il enregistrera les fichiers mp3 relatifs avec un débit binaire de 320 kbps, sans conserver l'ancienne extension de fichier dans le nom.

Riccardo Volpe
la source
3

Une seule ligne pour convertir tous les .flacfichiers .mp3dans un seul répertoire, en conservant la plupart des métadonnées:

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

(Remarque: ${file:r}supprime l'extension du chemin de fichier donné)

ffmpeg: flac en mp3

woudsma
la source
Citez simplement la variable $filecomme "$file".
Chazy Chaz
:rsemble être un zshmodificateur, qui ne fonctionne pas bash. Dans Bash, vous pouvez remplacer "${file:r}.mp3"par "${file%.flac}.mp3".
mivk
pour afficher uniquement le nom de fichier du fichier, en utilisation bash${file%.*}
Evhz
2

Je sais que cela n'a pas été demandé, mais étant donné que l'une des raisons pour lesquelles cela est fait (du moins c'est ce que je voulais faire) est que la musique puisse être importée dans Apple iTunes qui ne prend pas en charge FLAC. Dans ce cas, il est plus judicieux de convertir FLAC au format sans perte d'Apple, m4a. J'ai utilisé cette commande pour convertir tous les fichiers du dossier actuel, tout en conservant des tailles de fichier similaires.

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

Dhiraj Gupta
la source
Option "nom" non reconnue. Erreur lors du fractionnement de la liste des arguments: Option introuvable
MonsterMMORPG
@MonsterMMORPG vous avez probablement manqué de taper le fichier. après la commande find. Le . indique à find de chercher dans le dossier courant et -name lui demande de rechercher les noms de fichiers correspondants.
Dhiraj Gupta
2

Ce script flac2mp3.sh utilise ffmpegpour convertir une arborescence de dossiers de fichiers FLAC en une autre arborescence de dossiers de fichiers MP3. La pochette est incluse, lorsqu'elle est présente. Vous pouvez définir une CORESvariable pour créer des travaux d'arrière-plan afin de convertir plusieurs fichiers à la fois.

Rick O'Sullivan
la source
donne l'erreur sed: -e expression # 1, char 26: commande `s 'non
terminée
Exactement ce que je cherchais, merci! J'ai ajusté un peu le script pour incorporer VBR et d'autres réponses, téléchargé ici: gist
aksh1618