Transkodowanie Mass .flac -> .mp3: Jak napisać skrypt powłoki, który zachowuje informacje o znacznikach ID3?


9

W ostatnich tygodniach przeszedłem z dość praktycznego podejścia do transkodowania plików .flac -> .mp3, na takie, które jest znacznie bardziej „ustawione i zapomnij”.

Pierwszym krokiem było zaprzestanie korzystania z interfejsu GUI (Audacity z wtyczką LAME), a zamiast tego użycie metody opisanej tutaj .

Drugim krokiem było znalezienie skryptu powłoki bash, który powiedziałby pętli poleceń, aby działała rekurencyjnie, umożliwiając transkodowanie katalogów z wieloma podkatalogami zawierającymi pliki .flac w jednym prostym kroku. Że odpowiedź została dostarczona przez użytkownika w askubuntu.com.

Teraz chcę dowiedzieć się, jak dalej udoskonalać, aby zachować informacje o znacznikach ID3. Metody powiązane z powyższymi danymi tagu ID3 paska, pozostawiając absolutne minimum (tzn. Pozostaje tylko pole tytułu).

Czy ktoś może mnie nauczyć, jak napisać taki skrypt powłoki?


Skrypt powłoki został zaktualizowany w następujący sposób:

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

Wykonanie find . -name '*.flac' -exec ~/bin/flac2mp3 '{}' \;w ~ / Desktop / stos daje następujące dane wyjściowe:

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 dla oryginalnego .flac i wynikowego .mp3 daje odpowiednio:

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

(tj. nic);

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

Plik .flac zdecydowanie zawiera informacje o znacznikach. Mogę to sprawdzić, otwierając EasyTAG. EasyTAG nazywa to „FLAC Vorbis Tag”, ale „ID3 Tag” dla .mp3. Czy to jest problem?


Próbowałeś używać ffmpeg?
Cześć71,

Nie, nie mam. Szczerze mówiąc, nigdy tak naprawdę nie korzystałem z niego w CLI. Ktoś powiedział mi o tym skrypcie Perla. Spróbuję to jutro i zdam relację, ponieważ jest już późno.
boehj

Odpowiedzi:


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"

Dzięki Kambus! To właściwie załatwia sprawę. Większość tagów, które chcę, są teraz dostępne, po transkodowaniu: tytuł, album, wykonawca, rok, numer utworu. Pole CD (1/1, 1/2, itd.) Nie stało się po drugiej stronie, i nie ma pola dla „Numer ścieżki Of ”. Ale tak naprawdę nie przeszkadza mi to. Co ciekawe, wypróbowałem ten skrypt w katalogu zawierającym muzykę „Trip Hop”. Tagi były taktowane, ale skrypt zmienił gatunek z „Trip Hop” na „Trip-Hop”. Sądzę więc, że opiera się ona na bazie znanych gatunków. Jeszcze raz bardzo dziękuję za Twój wkład!
boehj

@pedrogent: Cieszę się, że mogłem pomóc! Możesz ręcznie sprawdzić, jakie są inne tagi za pomocą „metaflac --export-tags-to - file” i użyć ich w taki sam sposób jak $ TITLE i innych, ale problem polega na tym, że nie ma dla nich równoważnych pól w id3 AFAIK. Może możesz umieścić je w tagu komentarza. Tak, istnieje wstępnie zdefiniowana lista gatunków: link
Kambus

Cześć Kambus. Tak, myślę, że część problemu polega na tym, że nie ma wyraźnego „standardu” dla danych znaczników ID3. Tag komentarza jest interpretowany bardzo różnie w zależności od gracza (lub wcale). Twój skrypt jest niesamowity. Dzięki jeszcze raz.
boehj

1

Jak używać mp3fs do masowego kodowania flac do mp3

Zamiast używać programu do konwersji plików FLAC do formatu MP3, możesz użyć mp3fs do prezentacji ich jako wirtualnych plików MP3 oraz programu, który może umieszczać w kolejce zadania kopiowania. Działa dla mnie cudownie.

Pobierz i zainstaluj mp3fs i ultrakopiarkę:

sudo apt-get install mp3fs ultracopier

Utwórz parę katalogów flac i mp3 dla każdego pliku mp3fs, który chcesz uruchomić. Mam dwurdzeniowy procesor, więc uruchamiam dwa. Jeśli przechowujesz katalogi flac na partycji, na której znajdują się twoje pliki flac, możesz je szybko przenieść. Ta partycja nazywa się „Storage” w moim systemie.

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

Możesz montować katalogi z wiersza poleceń lub dodając je /etc/fstab. Możesz także skonfigurować bitrate i algorytm kodowania wirtualnych plików mp3 w czasie montowania. Chcę plików mp3 o stałej przepływności 320 kb / s, a lame może potrzebować całego czasu, aby wyprodukować najlepsze mp3, jakie może.

W wierszu polecenia:

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

Jeśli bezpiecznik narzeka

fusermount: nie można otworzyć /etc/fuse.conf: Odmowa zezwolenia
fusermount: opcja allow_other dozwolona tylko wtedy, gdy w etc / fuse.conf ustawiono „user_allow_other”

następnie odkomentuj user_allow_otheropcję w /etc/fuse.confi / lub uczyń ją czytelnym za pomocą

sudo chmod 644 /etc/fuse.conf

Lub z /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

Po dodaniu katalogów do /etc/fstabmożesz je zamontować za pomocą

sudo mount -a

Gotowy! Uruchom ultrakopiarkę. Umieści ikonę wskaźnika w twoim panelu gnome lub czymkolwiek, czego używasz. Kliknij, wybierz dodaj kopię. Zrobiłem to dwa razy, aby użyć dwóch rdzeni. Użyj przeglądarki plików, aby przenieść niektóre pliki flac do flac_1. Przejdź do katalogu mp3_1 i przeciągnij pliki mp3 do jednego z ultrakopiujących okien, aby rozpocząć kolejkę kopiowania. Ultracopier zapyta o miejsce docelowe plików. Masz teraz jeden rdzeń zajęty kodowaniem partii plików flac do formatu mp3.

Aby użyć drugiego rdzenia, przenieś pliki flac do flac_2 i przeciągnij pliki mp3 z mp3_2 do drugiego okna ultrakopiarki.

Aktualizacja: Zamiast ultrakopiowania używam teraz MiniCopier, jest trochę łatwiejszy w użyciu. Zobacz komentarze poniżej.


Wygląda na to, że jest błąd w liście katalogów z najnowszymi wersjami mp3fs i bezpiecznikiem: sourceforge.net/tracker/…
Ophidian

@Ophidian: Interesujące. Przeprowadziłem kilka testów na niektórych komputerach przy użyciu różnych dystrybucji. Kazałem je uruchomić, w ciągu minuty bez żadnych błędów. Wersja mp3fs, z której korzystam, jest taka sama, 0,30. Użyłem jąder 2.3.38, 2.3.39 i 3.0.0, libfuse wersje 2.8.4 i 2.8.6. Libfuse wspomniany w raportach błędów to 2.8.5. To nie wystarczy, aby stwierdzić, że przyczyną jest bezpiecznik, jednak warto spróbować innej wersji, jeśli napotkasz problemy podczas korzystania z 2.8.5. Może próbowałeś mp3fs? Na którym jądrze iz jakim libfuse? Czy napotkałeś jakieś problemy?
Arjan Drieman

Zamiast ultrakopiowania używam teraz MiniCopier , jest trochę łatwiejszy w użyciu. Jest to aplikacja Java, nie wymaga instalacji, ale wymaga środowiska JRE. Ma ikonę kosza i ikonę pola. Możesz przeciągnąć jedno lub więcej źródeł z menedżera plików na ikonę koszyka, katalog docelowy na ikonę pola i to wszystko, co musisz zrobić, aby dodać zadanie kopiowania do kolejki. MiniCopier ma osobną zakładkę dla elementów, które nie powiodły się. MiniCopier zużywa mniej cykli procesora niż ultrakopiarka, 1% vs 3% w moim systemie. To może tylko zaoszczędzić 12 minut w 10-godzinnej kolejce ;-)
Arjan Drieman

Jeśli chcesz kolejkę kopiowania opartą na powłoce, znalazłem rozwiązanie w superużytkowniku . Bez dostosowań nie będziesz w stanie uruchomić z nim 2 kolejek i nie jestem pewien, co zrobi z błędami.
Arjan Drieman

0

id3cpnie może działać, ponieważ FLAC nie używa ID3; zamiast tego używa tagów Vorbis.

avconvma opcję utrzymania tagów poprzez konwersję. Jest to trochę zmienne, jego wartość zależy od kombinacji kodeków , ale działa w ten sposób w twoim przypadku (wersja 9.16-6):

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

Zastosowanie wszystkich plików FLAC w folderze (rekurencyjnie) jest tak proste, jak to: (przy użyciu bash)

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

Zauważ, że avconvużywa lame automatycznie; istnieją inne opcje kontroli jakości i tak dalej. Sprawdź man avconvszczegóły.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.