为什么 ffmeg 不写入 id3 标签?

为什么 ffmeg 不写入 id3 标签?

.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 可能会显示。)

相关内容