使用 FFmpeg 转储/加载元数据(WMA 到 MP3)

使用 FFmpeg 转储/加载元数据(WMA 到 MP3)

我需要将 WMA 元数据转换为 MP3 ID3 标签。FFmpeg 应该能够将它们转储到一个文件中,然后使用实现的映射器将它们加载回另一个文件。但我找不到使用语法:

http://ffmpeg.org/ffmpeg.html#Metadata

我无法直接使用 FFmpeg 转换文件,因为有 1% 的文件转换失败,而这对于数千个文件来说至关重要。一些错误:

ff asf bad header 0  at:264993
[asf @ 0046DA60] ff asf skip 2252 (unknown stream)
[asf @ 0046DA60] ff asf bad header 0  at:267254
[mp3 @ 0003DA60] max_analyze_duration 5000000 reached at 5015510
Truncating packet of size 1024 to 563
[mp3 @ 0171b0c0] Header missing
get_buffer() failed
Error while decoding stream #0:0

我可以使用 Mplayer 将它们转换为 WAV,然后使用 LAME 从 WAV 转换为 MP3,但在此过程中会丢失元数据。

我还没有决定解决方法,但我不会使用 mplayer,而是继续使用 ffmpeg。我在 audacity 中分析/显示了文件的波形,似乎我处理了 3 种错误:

  1. get_buffer() 解码流 #0:0 时出错[98% 的错误]:
    • 似乎是由于“截断淡出”文件结尾或某些丢失的帧造成的
    • 无法收听,mp3 文件似乎还可以
  2. ff asf 跳过,坏标题,截断,.. [仅 2% 的错误]:
    • 文件在某种程度上损坏了,并不总是可以收听
    • 其中只有少数含有微缝隙,发出破裂声
  3. 已达到 max_analyze_duration,缺少标头 [仅警告]:
    • 非常罕见,可能是由于错误结束或标题过大(包含照片等)造成的
    • 结果文件很好听

mplayer 使用 ffmpeg,似乎它只是忽略了错误。我可能会忽略 get_buffer() 错误,而保留其他失败的错误。

答案1

您可以使用以下方式转储元数据:

ffmpeg -i in.mov -f ffmetadata metadata.txt  

您可以使用类似以下方式导入元数据(从未尝试过):

ffmpeg -i in.mov -i metadata.txt -map_metadata 1 -c:a copy -id3v2_version 3 

来源:http://jonhall.info/how_to/create_id3_tags_using_ffmpeg

相关内容