Додати обкладинку альбому в файл mp3 / ogg з командного рядка в пакетному режимі?


38

Я шукаю програмне забезпечення в Linux, яке додасть альбом / обкладинку до кожного із вибраних файлів у пакетному режимі. Обкладинка альбому - це jpg / png, що зберігається на моєму комп’ютері. Це буде дивним, якщо він зможе імпортувати з Інтернету.

В даний час я спробував і Rhythmbox, і Banshee. Я також спробував lameі easytag, але , здається , що вони не підтримують пакетний режим. lame- це не додавання властивостей, а перезапис. (Я знаю, що кульгавий - єдиний командний рядок, який s / wi використовував досі).

Отже, я в основному шукаю:

<some magic s/w> --picture=<my chosen picture> Music/Artist/*.mp3

Це додасть зображення в метадані файлу назавжди.

Чи можете ви запропонувати мені таке програмне забезпечення?

Відповіді:


24

кульгавий

Використовуючи це, lameви можете зробити це за допомогою невеликого сценарію

$ lame --ti /path/to/file.jpg audio.mp3

Якщо файли названі таким чином, ви можете зробити сценарій оболонки, щоб робити те, що вам потрібно:

for i in file1.mp3 file2.mp3 file3.mp3; do
  albart=$(echo $i | sed 's/.mp3/.jpg/')
  lame --ti /path/to/$albart $i
done

Ви можете зробити вищезазначене трохи більш компактним і усунути необхідність sed, скориставшись bashцим, видаливши відповідний суфікс:

...
albart="${i%.mp3}.jpg"
...

Picard / MusicBrainz

Якщо ви хочете зробити це у великому масштабі, я б запропонував використовувати Picard, який є інструментом інтерфейсу для використання бази даних MusicBrainz. Існує плагін до Picard під назвою "Cover Art Downloader", який може зробити це для партій вашої колекції.

Однак вище, здається, не керується командним рядком.

буряка

Іншим варіантом буде використання beets. Це можна керувати з командного рядка та використовує базу даних MusicBrainz для пошуку зображень альбому.

Ви можете або створити зображення альбому, використовуючи плагін FetchArt, або вставити його за допомогою плагіна EmbedArt .

Інші варіанти?

Ознайомтесь і з цим раніше заданим питанням U&L Q&A під назвою: Який інструмент розмітки mp3 для Linux? . У цій темі перелічено декілька альтернативних інструментів.


Ви можете уникнути sedдзвінка з чимось подібним albart="${i%.mp3}.jpg". Що ще важливіше, я щойно перевірив вашу кульгаву команду і отримав lame: unrecognized option -i...
evilsoup

@evilsoup - спасибі, у перемикачі не було тире. Повинно бути --ti ...
slm

@evilsoup - також додано ваші відгуки про не використання sed. Спасибі!
slm

8
@ Exeleration-G - ні, я б не рекомендував використовувати, lameоскільки це насправді кодер. Існують і інші інструменти для маніпулювання тегами id3 mp3. Ви можете використовувати id3v2 -r "APIC" *.mp3або eyeD3 --remove-all-images *.mp3видаляти будь-які додані зображення.
slm

2
FYI у моїй версії 3.99 немає опції "--ti" (debian buster) - здається, eyeD3 є хорошою альтернативою.
Бенджамін Пітер

17

Одним із варіантів рішення буде використання ffmpeg:

ffmpeg -i input.mp3 -i cover.jpg -map_metadata 0 -map 0 -map 1 output.mp3

Ви можете помістити це в цикл for для виконання кожного MP3 у каталозі:

for f in ./*.mp3; do ffmpeg -i "$f" -i cover.jpg -map_metadata 0 -map 0 -map 1 out-"${f#./}"; done

Це створить окремий вихідний файл (так що якщо у вас є названий файл foo.mp3, ви закінчите і те, foo.mp3і інше out-foo.mp3); це тому, що ffmpeg не може записати свої дані. Ви можете виправити це за допомогою:

for f in ./*.mp3; do \
ffmpeg -i "$f" -i cover.jpg -map_metadata 0 -map 0 -map 1 out-"${f#./}" \
&& mv out-"${f#./}" "$f"; done

Використання ffmpeg для цієї проблеми трохи схоже на використання крилатої ракети для розлому гайки. Більш спеціалізовані інструменти для маніпулювання метаданими, безумовно, зможуть зробити це в більш чистій і коротшій команді.


6
Показана тут команда ffmpeg кодує звук. Якщо ви конвертуєте з іншого формату, це добре, але якщо ви просто хочете додати мистецтво до наявного MP3, не перекодуючи його, додайте -acodec copyпісля -map 1.
jsd

Це не працює для мене, якась конкретна причина? Я отримую лише mp3-файл, але не ескіз. @jsd
Шеф-фараон

Вибачте @ChefPharaoh Я не знаю, чому це не працює для вас. Я просто спробував виконати wav-> mp3, додаючи зображення, і просто додав мистецтво до наявного mp3 за допомогою цих команд ffmpeg, показаних вище. Обидва рази це працювало чудово.
jsd

@evilsoup Я не впевнений, чи роблю я щось зле чи неправильно, але я в змозі змінити свої mp3-файли на місці за допомогою процесу заміни. Деякий спрощує цей сценарій і, здається, це дуже швидко.
rien333

Працював, як частування, і я також знайшов ffmpeg трохи швидшим, ніж кульгавий :)
Тіна


5

Для цього можна використовувати дорогоцінний камінь FancyAudio . Це може додавати зображення альбому в mp3-файли. Документація доступна тут .

особливості

  1. додати зображення альбому до одного файлу mp3
  2. додати зображення альбому до кількох файлів mp3.

Знизу на екрані зображено вихід fancy_audio при запуску в папці, що містить зображення та декілька файлів mp3

введіть тут опис зображення

Знизу на екрані зображено вихід fancy_audio під час запуску у папці, що містить mp3 та файли зображень

Це зображення показує вихід fancy_audio під час запуску у папці, що містить mp3 та файли зображень


Це легко і працює швидше, ніж lameпри додаванні одного зображення до кількох mp3-файлів. Рубі не потрібно знати;) - це окремий сценарій.
Томаш Гандор

0

ОП заявляє, що він вважає за краще, якщо обкладинку буде завантажено з Інтернету, і я тільки що написав досить добре сценарій для цього, використовуючи eye3Dі sacad, і інше встановити з pip. eye3Dє дуже корисною для цієї мети, оскільки, здається, не перекодувати звук і за допомогою --to-v2.4прапора обробляє будь-які mp3-файли, незалежно від типу тегу id3. Сценарій слід запустити з каталогу, який містить файли mp3. Він може бути запущений без аргументів, вгадуючи виконавця та ім'я альбому з тегів id3, або з назви вручну як аргументи, наприклад embedart "pink floyd" "dark side of the moon". Він написаний для рибної оболонки, але він повинен бути легко переносним для удару, якщо ви зміните всі встановлені команди на баш змінних призначень.

function embedart
    if echo $argv | grep -q -e '-h'
       echo 'embedart "[Artist]" "[Album]"'
       return
    end

    if test $argv[1]
        set artist $argv[1]
        set album $argv[2]
    else
        set artist (eyed3 (ls *mp3 | head -1) | ggrep -oP "artist.*: \K.*" | head -1)
        if not test $artist
            echo "No artist found!"
            return
        end
        set album (eyed3 (ls *mp3 | head -1) | ggrep -oP "album.*: \K.*" | head -1)
        if not test $album
            echo "No album found!"
            return
        end
    end

    sacad $artist $album 350 cover.jpg -v warning 2> /dev/null > /dev/null
    eyeD3 --to-v2.4 --add-image "cover.jpg:FRONT_COVER" *mp3 -Q 2> /dev/null > /dev/null

    rm cover.jpg
    echo "Done!"
end

-1

eyeD3 не працює з Unicode . Якщо будь-які символи, що не містять асоцій, містяться у файлі .mp3 (або навіть у простому каталозі імені предків, наприклад, у каталозі Альбоми), то він скасовується. LTA.

Тож вам не пощастить, якщо назва альбому чи пісні не написана англійською мовою!

Наприклад:

cp yoursong.mp3 /tmp/Странджанска.mp3
eyeD3 --add-image folder.jpg:FRONT_COVER Странджанска.mp3

Мабуть, eyeD3 хоче прокласти повний шлях до файлу .mp3 всередині .mp3-файлу і не може обробляти символи, що не відносяться до ascii.

Невизначене виняток: кодек "ascii" не може кодувати символи в позиції 5-16: порядковий не в діапазоні (128)
eyed3: ПОМИЛКА: кодек "ascii" не може кодувати символи в положенні 5-16: порядковий не в діапазоні (128)
Простежити 
... (тривалий прослідкування пропущено) ...
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.