【问题标题】:How to stop ffmpeg from manipulating mp3 metadata?如何阻止 ffmpeg 操作 mp3 元数据?
【发布时间】:2019-01-08 02:32:14
【问题描述】:

我正在使用 ffmpeg 更改我的 mp3 文件的比特率。它运作良好,但有一点非常令人沮丧。

ffmpeg 会自动更改一些元数据字段。具体来说,它将 ID3v2.3 转换为 ID3v2.4,但它不正确。例如,它写入了 ID3v2.4 中实际上不存在的TYER 字段。但最令人沮丧的是,它将USLT 字段转换为lyrics-LANGCODE(如lyrics-eng)。大多数音乐播放器无法识别此标签!

我不希望 ffmpeg 弄乱元数据字段。我只是想让它改变比特率。有没有办法告诉 ffmpeg 它不应该触及任何元数据字段?

我在 Windows 64 位中运行 ffmpeg 4.0.2。选项是:

ffmpeg -i input.mp3 -codec:a libmp3lame -b:a 128k output.mp3

不,-id3v2_version 3 没有帮助。它纠正了TYER 的问题,但没有纠正歌词问题。

【问题讨论】:

  • FFmpeg 将重写标签,默认版本为 2.4。歌词也将如您所见。你能用输出文件再次确认 TYER 是用你的第一个命令编写的吗?
  • @Gyan 是的,如果原始文件是 2.3,它会写入 TYER。但是,如果原始文件是 2.4,则不会。
  • 这里无法重现。用 Exiftool 检查。创建后是否在单独的命令中检查输出?
  • 我使用strings 重新检查。它在我的输入中;它有-id3v2_version 3 输出;没有。
  • 输入标签格式错误。 TYER 应该是 exactly 4(+1) 个字符;在您的输入中,它是 10 个字符。 ffmpeg 的 ID3 解析器不会完全中止并将 TXXX 帧中的键+值写入输出。可能被视为错误。

标签: ffmpeg


【解决方案1】:

我无法解决 ffmpeg 的歌词问题,但能够将歌词从 LYRICS-ENG 元数据字段复制到 USLT 字段。
我使用Mp3tag 工具批量复制数据。
它具有批量操作的Actions功能。

我做了什么:

  • 动作 -> 动作
  • 新建 -> 新建 -> 格式值
  • “字段”:UNSYNCEDLYRICS,“格式字符串”:%LYRICS-ENG%
  • 导航到包含文件的文件夹,选择它们并执行创建的操作

【讨论】:

    【解决方案2】:

    我在 ffmpeg 和这个问题的第一个答案之间混合使用:由于下面的 cmd 循环,我首先转换了一个完整的文件文件夹(在这种情况下,将 .flac 文件转换为 .mp3)。现在,我正在更改整个 iTunes 库的比特率,以减少占用的空间,而 ffmpeg 确实更改了歌词的标签。但是使用 mp3tag 并创建此操作允许我将它们切换回 iTunes 知道的标签。这是一个非常快速的方法,我已经搜索了很长时间!

    FOR /F "tokens=*" %G IN ('dir /b *.flac') DO ffmpeg -i "%G" -ab 320k -acodec mp3 "3%~nG.mp3"
    

    【讨论】:

      【解决方案3】:

      我很确定我找到了解决歌词问题的方法...

      $ ffmpeg -i input.mp3 ... -metadata "lyrics-eng=" -metadata "unsyncedlyrics=eng||{lyrics}" output.mp3
      

      -metadata "lyrics-eng=" 防止设置不正确的元数据,而-metadata "unsyncedlyrics=eng||{lyrics}" 设置正确的元数据,希望对您有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-05
        • 2013-01-13
        相关资源
        最近更新 更多