.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 元数据看起来有点乱),但在流级别,在第一个流内(作为Vorbis 评论)。
在您的输出格式中,MP3 元数据(ID3 标签)是绝不每个流,但仅限每个文件。尽管 ffmpeg 显示它为音频流复制的所有元数据,但它无法将任何元数据存储在 MP3 文件中。(请注意,一帧是如何存储的做存储,,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 无法识别的字段将被映射到 ID3TXXX
帧,iTunes 可能根本不会显示,但 foobar2000 可能会显示。)