Transcodifica di massa .flac -> .mp3: come scrivere uno script shell che conserva le informazioni del tag ID3?


9

Nelle ultime settimane sono passato da un approccio abbastanza "pratico" alla transcodifica .flac -> .mp3, a uno che è molto più "imposta e dimentica".

Il primo passo è stato smettere di usare un front-end della GUI (Audacity con un plug-in LAME) e utilizzare invece il metodo che ho descritto qui .

Il secondo passo è stato quello di trovare uno script della shell bash che dicesse a quel ciclo di comandi di funzionare in modo ricorsivo, permettendo alle directory con molte sottodirectory contenenti file .flac di essere transcodificate in un semplice passaggio. Questa risposta è stata fornita da un utente su askubuntu.com.

Ora desidero imparare come perfezionare ulteriormente le cose in modo da preservare le informazioni sui tag ID3. I metodi collegati sopra rimuovono i dati dei tag ID3, lasciando il minimo indispensabile (ovvero rimane solo il campo del titolo).

Qualcuno può insegnarmi come scrivere un tale script shell?


Lo script della shell è stato aggiornato in questo modo:

#!/bin/bash
file="$1"
flac -cd "$file" | lame --preset fast extreme - "${file%.flac}.mp3"
id3cp "$file" "${file%.flac}.mp3"

Facendo find . -name '*.flac' -exec ~/bin/flac2mp3 '{}' \;in ~ / Desktop / stack si ottiene il seguente output:

01 - Amon Tobin - Chomp Samba.flac: done         
LAME 3.98.4 64bits (http://www.mp3dev.org/)
Using polyphase lowpass filter, transition band: 19383 Hz - 19916 Hz
Encoding <stdin> to ./01 - Amon Tobin - Chomp Samba.mp3
Encoding as 44.1 kHz j-stereo MPEG-1 Layer III VBR(q=0)
Parsing ./01 - Amon Tobin - Chomp Samba.flac: done.  Copying to ./01 - Amon Tobin - Chomp Samba.mp3: done

id3info per l'originale .flac e il risultante .mp3 danno rispettivamente:

*** Tag information for 01 - Amon Tobin - Chomp Samba.flac

(cioè niente);

*** Tag information for 01 - Amon Tobin - Chomp Samba.mp3
*** mp3 info
MPEG1/layer III
Bitrate: 128KBps
Frequency: 44KHz

.Flac ha sicuramente informazioni sui tag. Posso verificarlo aprendo EasyTAG. EasyTAG si riferisce a questo come "tag Vorbis FLAC" ma "tag ID3" per .mp3. È questo il problema?


Hai provato a usare ffmpeg?
Hello71,

No non l'ho fatto. A dire il vero, non l'ho mai usato prima sulla CLI. Qualcuno mi ha parlato di questo script Perl. Ci proverò domani e riferirò come è tardi ora.
Boehj,

Risposte:


7
#!/bin/sh

file="$1"
outfile=${file%.flac}.mp3

eval $(metaflac --export-tags-to - "$file" | sed "s/=\(.*\)/='\1'/")

flac -cd "$file" | lame --preset fast extreme \
        --add-id3v2 --tt "$TITLE" --ta "$ARTIST" --tl "$ALBUM" \
        --ty "$DATE" --tn "$TRACKNUMBER" --tg "$GENRE" \
        - "$outfile"

Grazie Kambus! Questo fa praticamente il trucco. La maggior parte dei tag che voglio ora sono lì, post-transcodifica: titolo, album, artista, anno, numero di traccia. Il campo CD (1/1, 1/2, ecc.) Non ha attraversato il campo e non ha nemmeno il campo per il 'Numero traccia di '. Ma questo non mi disturba davvero. È interessante notare che ho provato questo script in una directory contenente musica "Trip Hop". I tag sono stati mantenuti intatti ma la sceneggiatura ha cambiato il genere da "Trip Hop" a "Trip-Hop". Quindi immagino che si basi su un database di generi noti lì. Grazie ancora per il tuo contributo!
Boehj,

@pedrogent: sono felice di poterti aiutare! Puoi controllare manualmente quali sono gli altri tag con "metaflac --export-tags-to - file" e usarli allo stesso modo di $ TITLE e degli altri, ma il problema è che non ci sono campi equivalenti per loro in id3 AFAIK. Forse puoi inserirli nel tag di commento. Sì, esiste un elenco predefinito di generi: link
Kambus

Ciao Kambus. Sì, penso che parte del problema qui sia che non esiste un chiaro "standard" per i dati dei tag ID3. Il tag Comment viene interpretato in modo molto diverso da giocatore a giocatore (o per niente). La tua sceneggiatura è fantastica. Grazie ancora.
Boehj,

1

Come usare mp3fs per codificare in massa flac in mp3

Invece di utilizzare un programma per convertire i file flac in mp3, è possibile utilizzare mp3fs per presentarli come mp3 virtuali e un programma in grado di mettere in coda i lavori di copia. Funziona meravigliosamente bene per me.

Scarica e installa mp3fs e ultracopier:

sudo apt-get install mp3fs ultracopier

Crea un paio di directory flac e mp3 per ogni mp3fs che vuoi eseguire. Ho una CPU dual core quindi ne eseguo due. Se si mantengono le directory flac sulla partizione in cui si trovano i file flac, è possibile spostarle rapidamente. Quella partizione si chiama "Archiviazione" sul mio sistema.

cd /media/Storage
mkdir mp3fs mp3fs/flac_1 mp3fs/mp3_1 mp3fs/flac_2 mp3fs/mp3_2

È possibile montare le directory dalla riga di comando o aggiungendole a /etc/fstab. Puoi anche configurare l'algoritmo bitrate e di codifica degli mp3 virtuali al momento del montaggio. Voglio mp3 con un bitrate costante di 320kbps e lame potrebbe impiegare tutto il tempo necessario per produrre il miglior mp3 possibile.

Sulla riga di comando:

mp3fs -b 320 -oquality=0 /media/Storage/mp3fs/flac_1 /media/Storage/mp3fs/mp3_1 -o allow_other,ro
mp3fs -b 320 -oquality=0 /media/Storage/mp3fs/flac_2 /media/Storage/mp3fs/mp3_2 -o allow_other,ro

Se il fusibile si lamenta, come

fusermount: impossibile aprire /etc/fuse.conf: autorizzazione negata
fusermount: opzione allow_other consentita solo se 'user_allow_other' è impostato in etc / fuse.conf

quindi decommenta l' user_allow_otheropzione in /etc/fuse.confe / o rendila leggibile con

sudo chmod 644 /etc/fuse.conf

O da /etc/fstab:

mp3fs#/media/Storage/mp3fs/flac_1 /media/Storage/mp3fs/mp3_1 fuse user,ro,allow_other,bitrate=320,quality=0 0 0
mp3fs#/media/Storage/mp3fs/flac_2 /media/Storage/mp3fs/mp3_2 fuse user,ro,allow_other,bitrate=320,quality=0 0 0

Dopo aver aggiunto le directory a /etc/fstab, è possibile montarle utilizzando

sudo mount -a

Fatto! Inizia ultracopier. Metterà un'icona indicatore nel tuo pannello di gnome o qualunque cosa tu usi. Fare clic su di esso, selezionare Aggiungi copia. L'ho fatto due volte per usare due core. Usa il tuo browser di file per spostare alcuni flac in flac_1. Passa alla directory mp3_1 e trascina i tuoi mp3 in una delle finestre ultracopier per avviare una coda di copia. Ultracopier chiederà la destinazione dei file. Ora hai un core occupato a codificare un batch di flacs in mp3.

Per usare l'altro core, sposta i file flac su flac_2 e trascina gli mp3 da mp3_2 nella seconda finestra ultracopier.

Aggiornamento: Invece di ultracopier ora sto usando MiniCopier, è un po 'più facile da usare. Vedi i commenti qui sotto.


Sembra che ci sia un bug con l'elenco delle directory con le versioni recenti di mp3fs e miccia: sourceforge.net/tracker/…
Ophidian

@Ophidian: interessante. Ho eseguito alcuni test su alcune macchine utilizzando diverse distribuzioni. Li ho fatti correre, in un minuto ciascuno, senza errori. La versione mp3fs che sto usando è la stessa, 0.30. Ho usato i kernel 2.3.38, 2.3.39 e 3.0.0, versioni libfuse 2.8.4 e 2.8.6. Libfuse menzionato nelle segnalazioni di bug è 2.8.5. Non è abbastanza per concludere che il colpevole è la miccia, tuttavia, potrebbe valere la pena provare una versione diversa se si verificano problemi durante l'utilizzo di 2.8.5. Hai forse provato mp3fs? Su quale kernel e con quale libfuse? Hai riscontrato problemi?
Arjan Drieman,

Invece di ultracopier ora sto usando MiniCopier , è un po 'più facile da usare. È un'app Java, non richiede installazione ma ha bisogno di un JRE. Ha un'icona del cestino e un'icona della casella. Puoi trascinare una o più origini da un file manager sull'icona del carrello, una directory di destinazione sull'icona della casella e questo è tutto ciò che devi fare per aggiungere un lavoro di copia alla coda. MiniCopier ha una scheda separata per gli articoli non riusciti. MiniCopier utilizza meno cicli di CPU rispetto a Ultracopier, 1% vs 3% sul mio sistema. Ciò potrebbe
farti

Se vuoi una coda di copia basata su shell, ho trovato una soluzione su superutente . Senza aggiustamenti, non sarai in grado di eseguire 2 code con esso e non sono sicuro di cosa farà con gli errori.
Arjan Drieman,

0

id3cpnon può funzionare poiché FLAC non utilizza ID3; utilizza invece i tag Vorbis.

avconvha un'opzione per mantenere i tag attraverso la conversione. È un po 'instabile, il suo valore dipende dalla combinazione di codec , ma funziona così nel tuo caso (versione 9.16-6):

avconv -i in.flac -map_metadata 0:g:0 out.mp3

Applicare tutti questi file FLAC in una cartella (ricorsivamente) è facile come questo: (usando bash)

for f in */**/*.flac; do
  avconv -i "${f}" -map_metadata 0:g:0 "`echo "${f}" | sed -e s/flac$/mp3/`";
done

Nota che avconvusa lame automaticamente; esistono altre opzioni per controllare la qualità e quant'altro. Controlla i man avconvdettagli.

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.