
В настоящее время я использую следующую команду для передачи нескольких .ogg
файлов черезffmpeg
for x in *.ogg; do ffmpeg -i "$x" -ab 320k -write_id3v2 1 "`basename "$x" .ogg`.mp3"; done
Он работает и выводит следующую информацию
Output #0, mp3, to '10 Ft. Ganja Plant_Bass Chalice_10_Bass Chalice.mp3':
Metadata:
TSSE : Lavf57.83.100
Stream #0:0: Audio: mp3 (libmp3lame), 44100 Hz, stereo, fltp, 320 kb/s
Metadata:
TITLE : Bass Chalice
ARTIST : 10 Ft. Ganja Plant
GENRE : Reggae
DATE : 2005
ALBUM : Bass Chalice
track : 10
encoder : Lavc57.107.100 libmp3lame
Но когда я загружаю файлы в iTunes, теги id3 отсутствуют.
Я пробовал использовать его с этой -write_id3v2 1
опцией и без нее, но он все равно не работает.
Что я делаю не так?
решение1
В ваших входных данных метаданные не хранятся на уровне файла/контейнера (Метаданные Oggкажется немного беспорядочным), но на уровне потока, внутри 1-го потока (каккомментарий Ворбиса).
В вашем выходном формате метаданные MP3 (теги ID3)никогдаper-stream, но только per-file. Хотя ffmpeg показывает все метаданные, которые он скопировал для аудиопотока, он не может сохранить их в файле MP3. (Обратите внимание, как один кадрделает(store, TSSE
, отображается на уровне файла.)
Используйте -map_metadata 0:s:0
для правильного перевода раскладки Ogg/Vorbis в MP3. Как показано настраница руководства:
-map_metadata[:metadata_spec_out] infile[:metadata_spec_in]
(output,per-metadata)
[...]
For example to copy metadata from the first stream of the input file to
global metadata of the output file:
ffmpeg -i in.ogg -map_metadata 0:s:0 out.mp3
To do the reverse, i.e. copy global metadata to all audio streams:
ffmpeg -i in.mkv -map_metadata:s:a 0:g out.mkv
(Обратите внимание, что поля, не распознанные ffmpeg, будут сопоставлены с TXXX
кадрами ID3, которые iTunes, скорее всего, вообще не отобразит, хотя foobar2000 может.)