Converti .flac in .mp3 con ffmpeg, mantenendo tutti i metadati


89

Come posso convertire .flac in .mp3 con ffmpeg, mantenendo tutti i metadati (cioè convertendo i commenti Vorbis nei file .flac in metadati ID3v2 di .mp3)?


5
Tieni presente che per la prossima volta dovresti porre ffmpegdomande sull'utilizzo del cli a Super User . Stack Overflow è solo per domande che coinvolgono la programmazione. Inoltre, FLAC supporta ufficialmente solo i commenti di Vorbis , quindi presumo che tu voglia convertire in ID3v2 invece di "mantenere".
llogan

Ok, ho risolto la mia domanda. Ho chiesto qui perché ho visto domande come questa su StackOverflow (ad esempio questo o questo ) e ho pensato che potesse essere interessante condividere le mie conoscenze. Inoltre, vedo che c'è un tag ffmpeg , quindi perché non condividere la mia soluzione qui? ffmpeg è utilizzato in molte applicazioni da molti sviluppatori.
Vito Gentile

4
Il tag ffmpeg dice: "Le domande sull'uso interattivo dello strumento della riga di comando FFmpeg dovrebbero essere poste su Super User.". Non è un grosso problema, ma volevo solo farlo notare poiché a mio parere ci sono troppe domande fuori tema qui.
llogan,

Risposte:


156

Il comando seguente mantiene l'alta qualità su .mp3 (320 kbps) ei metadati del file .flac vengono convertiti nel formato ID3v2, che può essere incluso nei file .mp3:

ffmpeg -i input.flac -ab 320k -map_metadata 0 -id3v2_version 3 output.mp3

1
Vale la pena notare che "ffmpeg" potrebbe dover essere sostituito da "avconv".
shockburner

6
FWIW ffmpeg3.2 copia automaticamente i metadati in ID3v2 da FLAC senza bisogno di specificarli -map_metadata 0 -id3v2_version 3, sebbene non venga copiato nei tag ID3v1. Uso uno strumento separato per questo.
Dai

1
i testi non vengono comunque copiati
user151496

1
Divide flac se ci sono più parti?
Artyom

1
@Artyom Probabilmente dovresti avere il file cue insieme al tuo flac dove sono contrassegnati i punti di divisione. Se è così, puoi usare shnsplit (console) o flacon (GUI) per dividere il tuo file e convertire le parti in mp3. Se hai un solo flac puoi scrivere un cui per esso o usare le opzioni -ss e -t di ffmpeg per tagliare ogni canzone.

58

Risposta perfetta sopra. Lo uso insieme a find per aggiungere tutti i file FLAC in una sottostruttura ad iTunes con questo comando

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

Per aggiungere automaticamente i file risultanti a iTunes, ottieni la directory di importazione di iTunes con

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

risultato es

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

Quindi esegui ad es

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

Per aggiungere automaticamente tutte le tracce convertite su iTunes.


3
" / Users / sir ", lmao.
Harry Svensson

Aneddoto: tutti gli utenti nella nostra azienda hanno nomi di stelle, abbreviati in 3-5 caratteri. Il mio è "sirius", breve signore;)
user2707001

Opzione "nome" non riconosciuta.
MonsterMMORPG

14

Se vuoi risparmiare un po 'di spazio, prova la raccomandazione di hydrogenaud.io :

Molto alta qualità: Hi-Fi, a casa, o silenziosa di ascolto, con la migliore dimensione del file -V0 (~245 kbps), -V1 (~225 kbps),-V2 (~190 kbps) o -V3 (~175 kbps)sono raccomandati. Queste impostazioni VBR normalmente producono risultati trasparenti. Possono esistere differenze udibili tra questi preset, ma sono rari.

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

Se vuoi usare questa opzione in ffmpeg, dovresti usare il -q:a 0 alias.

Controlla la qualità con -qscale:a(o l'alias -q:a). I valori sono specifici del codificatore, quindi per libmp3lame l'intervallo è 0-9 dove un valore inferiore è una qualità superiore. 0-3 normalmente produrrà risultati trasparenti, 4 (predefinito) dovrebbe essere vicino alla trasparenza percettiva e 6 produrrà una qualità "accettabile". L'opzione -qscale:aè mappata -Vall'opzione nello strumento di interfaccia della riga di comando lame autonomo.

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

Se vuoi anche i metatag ID3v1, dovresti aggiungere il -write_id3v1 1parametro.

Quindi il mio comando finale è:

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

8

Stavo testando il seguente comando per convertire il infile.flacfile in outfile.mp3:

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

A partire da Ubuntu 16.04, il comando precedente sembra copiare (la maggior parte? Tutti?) I metadati.

-q:a 0dice ffmpegdi utilizzare VBR della massima qualità.

Tuttavia, è ffmpegstata la transcodifica della copertina del mio album da jpega png, il che ha aumentato le dimensioni della copertina.

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

(Immagino che la conversione di cui sopra abbia senso visto come ffmpegfunziona .)

Dopo un po 'di ricerca, ho trovato l' -c:v copyopzione, che specifica che il flusso video deve essere copiato, anziché transcodificato. Il comando completo è:

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

Il comando precedente risulta in:

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

3

Per convertire ricorsivamente in mp3 tutti i file flac nelle cartelle nidificate, ho usato questo 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"' \;

Creerà una cartella denominata "mp3" all'interno di quella con i file flac e, all'interno della cartella mp3, salverà i relativi file mp3 con bitrate di 320kbps, senza mantenere nel nome la vecchia estensione del file.


3

Una riga per convertire tutti i .flacfile .mp3in una singola directory, mantenendo la maggior parte dei metadati:

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

(Nota: ${file:r}rimuove l'estensione del percorso file specificato)

ffmpeg: da flac a mp3


Basta citare la variabile $filecome "$file".
Chazy Chaz

:rsembra essere un zshmodificatore, che non funziona in bash. In Bash potresti sostituire "${file:r}.mp3"con "${file%.flac}.mp3".
mivk

per mostrare solo il nome del file dal file, in uso bash${file%.*}
Evhz

2

So che questo non è stato chiesto, ma considerando che uno dei motivi per cui è stato fatto (almeno questo è quello che volevo fare) è che la musica può essere importata in Apple iTunes che non supporta FLAC. In tal caso ha più senso convertire FLAC nel formato lossless di Apple, m4a. Ho usato questo comando per convertire tutti i file nella cartella corrente, pur mantenendo dimensioni di file simili.

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


Opzione "nome" non riconosciuta. Errore durante la divisione dell'elenco degli argomenti: opzione non trovata
MonsterMMORPG

@MonsterMMORPG probabilmente ti sei perso la digitazione del file. dopo il comando find. Il . dice a find di cercare nella cartella corrente e -name gli dice di cercare i nomi dei file corrispondenti.
Dhiraj Gupta

2

Questo script flac2mp3.sh utilizza ffmpegper convertire un albero di cartelle di file FLAC in un altro albero di cartelle di file MP3. La copertina è inclusa, se presente. È possibile impostare una CORESvariabile per creare processi in background per convertire più file contemporaneamente.


restituisce l'errore sed: -e espressione # 1, carattere 26: comando `s 'non terminato
MonsterMMORPG

Esattamente quello che stavo cercando, grazie! Ho modificato un po 'lo script per incorporare VBR e altre risposte, caricate qui: gist
aksh1618
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.