如何使用 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 是的,fflags
是ffmpeg
的一部分。一个完整的命令是ffmpeg -i input.m4a -c copy -fflags +bitexact -flags:v +bitexact -flags:a +bitexact output.m4a
以上是关于如何使用 ffmpeg 删除所有元数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不创建新文件的情况下使用 ffmpeg/avconv 更改元数据?