Маса .flac -> .mp3 перекодування: Як написати скрипт оболонки, що зберігає інформацію про теги ID3?


9

Останніми тижнями я перейшов від досить «практичного» підходу до перекодування .flac -> .mp3, до такого, який набагато більше «встановити і забути».

Першим кроком було припинити використання переднього кінця графічного інтерфейсу (Audacity із плагіном LAME) і замість цього використати метод, який я тут описав .

Другим кроком було знайти скрипт bash shell, який би вказав, що цикл команд працює рекурсивно, що дозволяє каталогів з багатьма підкаталогами, що містять файли .flac, перекодуватись одним простим кроком. Таку відповідь надав користувач на сайті askubuntu.com.

Тепер я хочу навчитися вдосконалювати речі, щоб збереглась інформація про теги ID3. Способи, пов'язані з вищезазначеними даними тегів смуги ID3, залишають простий мінімум (тобто залишається лише поле заголовка).

Хтось може навчити мене писати такий сценарій оболонки?


Скрипт оболонки оновлено таким чином:

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

Виконання find . -name '*.flac' -exec ~/bin/flac2mp3 '{}' \;в ~ / робочому столі / стеку дає такий результат:

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 для оригіналу .flac та результуючого .mp3 дає відповідно:

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

(тобто нічого);

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

.Flac напевно містить інформацію про теги. Я можу це підтвердити, відкривши EasyTAG. EasyTAG позначає це як "FLAC тег Vorbis", але "тег ID3" для .mp3. Це проблема?


Ви намагалися використовувати ffmpeg?
Привіт71

Ні, я ні. Ніколи насправді не використовував його на CLI, щоб бути чесним. Хтось розповів мені про цей сценарій Perl. Я спробую це завтра і звіту, як уже пізно.
boehj

Відповіді:


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"

Дякую Kambus! Це в значній мірі робить трюк. Більшість тегів, які я хочу, зараз там, після перекодування: Назва, Альбом, Виконавець, Рік, Номер доріжки. Поле CD (1/1, 1/2 і т.д.) не не зробив це через, і ні має поле для «Track Number Of ». Але це насправді не турбує мене. Цікаво, що я спробував цей сценарій у каталозі, що містить музику "Trip Hop". Теги зберігалися в такті, але сценарій змінив жанр з "Trip Hop" на "Trip-Hop". Тож я думаю, що він покладається на базу даних відомих жанрів. Ще раз дякую за ваш внесок!
boehj

@pedrogent: Я радий, що можу допомогти! Ви можете вручну перевірити, які є інші теги за допомогою "metaflac --export-tags-to - file" і використовувати їх так само, як $ TITLE та інші, але проблема полягає в тому, що в id3 AFAIK для них немає еквівалентних полів. Можливо, ви можете помістити їх у тег коментарів. Так, є заздалегідь визначений список жанрів: посилання
Kambus

Привіт Kambus. Так, я думаю, що частина проблеми тут полягає в тому, що немає чітких "стандартних" даних для тегів ID3. Тег Коментар трактується дуже по-різному від гравця до гравця (або зовсім не). Ваш сценарій є приголомшливим. Знову дякую.
boehj

1

Як використовувати mp3fs для масового кодування flac в mp3

Замість того, щоб використовувати програму для перетворення файлів flac в mp3, ви можете використовувати mp3fs, щоб представити їх як віртуальні mp3-файли, і програму, яка може чергувати завдання копіювання. Це чудово працює для мене.

Завантажте та встановіть mp3fs та ультракопіювач:

sudo apt-get install mp3fs ultracopier

Створіть пара директорій flac та mp3 для кожного mp3f, який ви хочете запустити. У мене двоядерний процесор, тому я запускаю два. Якщо ви зберігаєте довідники flac у розділі, де є ваші файли flac, ви можете швидко перемістити їх. Цей розділ у моїй системі називається "Зберігання".

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

Ви можете монтувати каталоги з командного рядка або додаючи їх у /etc/fstab. Ви також можете налаштувати бітрейт та алгоритм кодування віртуальних mp3 в момент монтажу. Я хочу, щоб mp3 мали постійний бітрейт в 320 кбіт / с, і кульгавий може зайняти весь час, що потрібно для створення найкращого mp3, який він, можливо, може.

У командному рядку:

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

Якщо запобіжник скаржиться, як

fusermount: не вдалося відкрити /etc/fuse.conf: у дозволі відхилено
fusermount: параметр enable_other дозволений, лише якщо в etc / fuse.conf встановлено "user_allow_other"

потім скаментуйте user_allow_otherопцію в /etc/fuse.confта / або зробіть її читабельною

sudo chmod 644 /etc/fuse.conf

Або від /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

Після додавання каталогів до /etc/fstabних можна змонтувати їх, використовуючи

sudo mount -a

Готово! Запустіть ультракопіювач. Він розмістить значок індикатора на панелі gnome або в будь-якому іншому випадку. Клацніть по ньому, виберіть Додати копію. Я робив це два рази, щоб використовувати два ядра. Використовуйте браузер файлів, щоб перемістити деякі фрагменти в flac_1. Перейдіть до каталогу mp3_1 і перетягніть свої mp3-файли до одного з вікон ультракопіювального пристрою, щоб розпочати чергу копіювання. Ультракопіювач запитає призначення файлів. Тепер у вас є одне ядро ​​зайняте кодуванням партії flacs до mp3.

Щоб використовувати інше ядро, перемістіть файли flac до flac_2 та перетягніть mp3 з mp3_2 у друге вікно ультракопіювального пристрою.

Оновлення: замість ультракопіювального пристрою я зараз використовую MiniCopier, це трохи простіше у використанні. Дивіться коментарі нижче.


Здається, виникла помилка з переліком каталогу з останніми версіями mp3fs та запобіжника: sourceforge.net/tracker/…
Ophidian

@Ophidian: Цікаво. Я провів кілька тестів на деяких машинах, використовуючи різні дистрибуції. У мене вони працювали протягом хвилини, без помилок. Версія mp3fs, яку я використовував, однакова, 0,30. Я використовував ядра 2.3.38, 2.3.39 та 3.0.0, версії libfuse 2.8.4 та 2.8.6. Libfuse, згаданий у звітах про помилки, становить 2.8.5. Цього недостатньо для того, щоб зробити висновок про запобіжник - винуватцем, однак, можливо, варто спробувати іншу версію, якщо у вас виникнуть проблеми під час використання 2.8.5. Ви, можливо, спробували mp3fs? На якому ядрі та з якою лібфузою? Чи стикалися ви з якимись проблемами?
Arjan Drieman

Замість ультракопіювального пристрою, який я зараз використовую MiniCopier , це трохи простіше у використанні. Це додаток java, воно не потребує встановлення, але йому потрібен JRE. У ньому є значок кошика та значок коробки. Ви можете перетягнути один або кілька джерел з файлового менеджера на піктограму кошика, каталог призначення на піктограму вікна, і це все, що потрібно зробити, щоб додати завдання копіювання до черги. У MiniCopier є окрема вкладка для несправних елементів. MiniCopier використовує менше циклів процесора, ніж ультракопіювач, 1% проти 3% у моїй системі. Це може просто заощадити 12 хвилин на 10-годинній черзі ;-)
Arjan Drieman

Якщо ви хочете чергувати копію на основі оболонки, я знайшов рішення у суперпользователя . Без коригувань ви не зможете запустити з ним 2 черги, і я не впевнений, що це буде робити з помилками.
Arjan Drieman

0

id3cpне може працювати, оскільки FLAC не використовує ID3; він використовує замість тегів Vorbis.

avconvмає можливість підтримувати теги шляхом конверсії. Це свого роду непостійність, її значення залежить від комбінації кодеків , але воно працює так у вашому випадку (версія 9.16-6):

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

Застосувати це всі файли FLAC у папці (рекурсивно) так само просто, як це: (за допомогою bash)

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

Зверніть увагу, що avconvкульгавий використовує автоматично; існують додаткові варіанти контролю якості та чого ще. Перевірте man avconvдеталі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.