Перетворити .flac на .mp3 за допомогою ffmpeg, зберігаючи всі метадані


88

Як я можу перетворити .flac у .mp3 за допомогою ffmpeg, зберігаючи всі метадані (тобто перетворення коментаря Vorbis у файлах .flac в метадані ID3v2 .mp3)?


5
Зверніть увагу, що наступного разу вам слід задати ffmpegзапитання щодо використання кліків у Super User . Переповнення стеку призначене лише для питань, що стосуються програмування. Крім того, FLAC офіційно підтримує лише коментарі Vorbis , тому я припускаю, що ви хочете перетворити на ID3v2 замість "тримати".
llogan

Гаразд, я виправив своє запитання. Я запитав тут , тому що я бачив такі питання , як це на StackOverflow (наприклад , це або це ), і припустив , що це може бути цікаво поділитися своїми знаннями. Крім того, я бачу, що існує тег ffmpeg , то чому б не поділитися тут своїм рішенням? ffmpeg використовується у багатьох додатках багатьма розробниками.
Vito Gentile

4
FFmpeg тег говорить, «Питання інтерактивного використання інструменту командного рядка FFmpeg слід задавати на Super User.». Це не велика справа, але я просто хотів зазначити це, оскільки на мій погляд тут занадто багато питань, що не стосуються теми.
llogan

Відповіді:


154

Наступна команда підтримує високу якість .mp3 (320 кбіт / с), а метадані з файлу .flac перетворюються у формат ID3v2, який можна включити у файли .mp3:

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

1
Варто зазначити, що "ffmpeg", можливо, доведеться замінити на "avconv".
shockburner

5
FWIW ffmpeg3.2 автоматично копіює метадані в ID3v2 з FLAC без необхідності вказувати -map_metadata 0 -id3v2_version 3, хоча і не копіює в теги ID3v1. Для цього я використовую окремий інструмент.
Dai

1
тексти пісень досі не копіюються
user151496

1
Чи розділяє flac, якщо кількох частин?
Артем

1
@Artyom Напевно, у вас повинен бути файл cue разом із вашим flac, де позначені точки розбиття. Якщо так, тоді ви можете використовувати shnsplit (консоль) або flacon (GUI), щоб розділити файл і перетворити деталі в mp3. Якщо у вас є тільки один FLAC ви можете або написати CUI для його або використовувати FFmpeg, -sS і -t опції вирізати кожну пісню з.

56

Ідеальна відповідь вище. Я використовую його разом з find для додавання всіх файлів FLAC у піддереві до iTunes за допомогою цієї команди

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

Щоб автоматично додати отримані файли до iTunes, завантажте каталог імпорту iTunes за допомогою

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

результат, напр

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

Потім запустіть, наприклад

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

Для автоматичного додавання всіх перетворених доріжок до iTunes.


3
" / Користувачі / сер ", lmao.
Harry Svensson

Анекдот: усі користувачі нашої компанії мають імена зірок, скорочені до 3-5 символів. Моє "sirius", короткий сер;)
user2707001

Нерозпізнаний параметр "ім'я".
MonsterMMORPG

14

Якщо ви хочете заощадити трохи місця, спробуйте рекомендацію hydrogenaud.io :

Дуже висока якість: HiFi, будинок або тихо слухати, з найкращим розміром файлу -V0 (~245 kbps), -V1 (~225 kbps), -V2 (~190 kbps)або -V3 (~175 kbps)рекомендуються. Ці налаштування VBR зазвичай дають прозорі результати. Чутні відмінності між цими пресетами можуть існувати, але рідко.

Джерело: http://wiki.hydrogenaud.io/index.php?title=LAME

Якщо ви хочете використовувати цей параметр у ffmpeg, вам слід скористатися -q:a 0псевдонімом.

Контролюйте якість за допомогою -qscale:a(або псевдоніма -q:a). Значення специфічні для кодера, тому для libmp3lame діапазон становить 0-9, де нижче значення - вища якість. 0-3 зазвичай дає прозорі результати, 4 (за замовчуванням) має бути близьким до перцептивної прозорості, а 6 дає "прийнятну" якість. Параметр -qscale:aвідображається у -Vваріанті в автономному інструменті інтерфейсу командного рядка.

Джерело: https://trac.ffmpeg.org/wiki/Encode/MP3

Якщо ви також хочете метатеги ID3v1, вам слід додати -write_id3v1 1параметр.

Отже, моя остання команда:

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

8

Я тестував таку команду для перетворення infile.flacфайлу в outfile.mp3:

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

Станом на Ubuntu 16.04, наведена вище команда, здається, копіює (більшість? Усіх?) Метаданих.

-q:a 0говорить ffmpegвикористовувати VBR найвищої якості.

Однак ffmpegперекодував мою обкладинку альбому з jpegна png, що збільшило розмір обкладинки.

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

(Думаю, вищенаведене перетворення має сенс з огляду на те, як ffmpegпрацює ).

Після деякого копання я знайшов -c:v copyваріант, який визначає, що відеопотік слід копіювати, а не перекодувати. Повна команда:

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

Вищенаведена команда призводить до:

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

3

Для рекурсивного перетворення в mp3 усіх файлів flac у вкладених папках я використав цю команду:

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"' \;

Він створить папку з назвою "mp3" усередині папки з файлами flac, а всередині папки mp3 збереже відносні файли mp3 із бітрейтом 320 кбіт / с, не зберігаючи старе розширення файлу в назві.


3

Однолінійний для перетворення всіх .flacфайлів .mp3в один каталог, зберігаючи більшість метаданих:

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

(Примітка: ${file:r}видаляє розширення заданого шляху до файлу)

ffmpeg: flac у mp3


Просто процитуйте змінну $fileтипу "$file".
Chazy Chaz

:rздається zshмодифікатором, який не працює в bash. У Bash ви можете замінити "${file:r}.mp3"на "${file%.flac}.mp3".
mivk

щоб показати лише ім'я файлу з файлу, у використанні bash${file%.*}
Evhz

2

Я знаю, що про це не запитували, але враховуючи, що одна з причин того, що це робиться (принаймні саме це я хотів зробити) полягає в тому, що музику можна імпортувати в Apple iTunes, яка не підтримує FLAC. У такому випадку має сенс перетворити FLAC на власний формат Apple без втрат, m4a. Я використав цю команду для перетворення всіх файлів у поточній папці, зберігаючи схожі розміри файлів.

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


Невідомий параметр "ім'я". Помилка розділення списку аргументів: Опції не знайдено
MonsterMMORPG

@MonsterMMORPG ви, напевно, пропустили введення. після команди find. . вказує find шукати у поточній папці, а -name - шукати відповідні імена файлів.
Дхірадж Гупта,

2

Цей сценарій flac2mp3.sh використовує ffmpegдля перетворення дерева папок файлів FLAC в інше дерево папок файлів MP3. Обкладинка включена, якщо вона присутня. Ви можете встановити CORESзмінну для створення фонових завдань для перетворення одночасно декількох файлів.


видає помилку sed: -e вираз # 1, char 26: команда без
припинення

Саме те, що я шукав, дякую! Я трохи підкоригував сценарій для включення VBR та інших відповідей, завантажених тут: gist
aksh1618
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.