如何使用 ffmpeg 删除所有元数据?

Posted

技术标签:

【中文标题】如何使用 ffmpeg 删除所有元数据?【英文标题】:How to remove ALL metadata using ffmpeg? 【发布时间】:2016-12-22 05:39:59 【问题描述】:

我有输入文件:infile.mp3 此文件包含元数据(艺术家、流派等) 我尝试删除所有元数据以输出.wav 文件。

是的!我找到了选项:

-map_metadata -1

但是输出出乎我的意料...

$ ffmpeg -i infile.mp3 -acodec pcm_s16le -ac 2 \
                -ar 44100 -map_metadata -1 ./outfile.wav

好的!

$ ffprobe outfile.wav
Input #0, wav, from 'inp.wav':
  Metadata:
    encoder         : Lavf56.25.101
  Duration: 00:04:00.47, bitrate: 1411 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s

你看到了吗?存在编码器元数据!

在“subchunk1_id”后面的wav标头中,我期望在“subchunk2_id”中具有“fmt”值的是“data”值(明确的预期示例):

$ strings outfile.wav | more
RIFFFB
WAVEfmt
data

但它不是(LIST、INFOISFT 等):

$ strings outfile.wav | more
RIFFFB
WAVEfmt 
LIST
INFOISFT
Lavf56.25.101
data

嗯..如何真正从输出文件中删除所有元数据?

【问题讨论】:

这个答案应该可以帮助你:superuser.com/questions/441361/…。它说您不能完全删除所有元数据。 @Martin -- 结果相同 附带说明,在 Linux 中,您可以使用 xxd <filename> | less 查看二进制文件,这样可以更好地显示 IFF 块。 【参考方案1】:
-fflags +bitexact -flags:v +bitexact -flags:a +bitexact

【讨论】:

这对我非常有用,因为删除元数据的目的是使按位比较成为可能。 谢谢@mzs。虽然这不会删除原始文件中存在的现有元数据,但它会阻止 ffmpeg 添加它。 这正是我需要将 aiff 文件转换为 python 的 pyglet 包无需依赖即可读取的 wav @mzs 这个 fflags 是 ffmpeg 的一部分吗? @Jun711 是的,fflagsffmpeg 的一部分。一个完整的命令是ffmpeg -i input.m4a -c copy -fflags +bitexact -flags:v +bitexact -flags:a +bitexact output.m4a

以上是关于如何使用 ffmpeg 删除所有元数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在ffmpeg中禁用字幕解码

如何在不创建新文件的情况下使用 ffmpeg/avconv 更改元数据?

如何从 .mp3 文件中获取元数据并使用 FFmpeg 将其作为文本放入视频中?

Flutter:如何使用 ffmpeg 从视频中读取数据

如何从 MP4 文件中提取元数据轨道

FFMPEG:如何使用 FFMPEG 将附加图片 (APIC) 从源 mp3 文件转码到目标 mp3 文件?