我正在使用 ffmpeg 从视频文件中提取音频流:
ffmpeg -i video.mp4 -vn -acodec copy audio.aac
Run Code Online (Sandbox Code Playgroud)
这会产生一个干净的音频文件,但没有任何元数据。
要添加元数据,ffmpeg 有一个命令行选项:
ffmpeg -i video.mp4 -vn -acodec copy -metadata title="My Title" audio.aac
Run Code Online (Sandbox Code Playgroud)
这运行没有错误,但是当使用 ffprobe 检查输出文件时,它根本没有元数据标签。
如果将输出容器更改为 mp4,则可以设置元数据并出现在输出文件中:
ffmpeg -i video.mp4 -vn -acodec copy -metadata title="My Title" audio.mp4
Run Code Online (Sandbox Code Playgroud)
这是有趣的一点;如果我使用 Banshee 编辑现有 .aac 文件的元数据,然后使用 ffmpeg 以相同的方式处理文件,原始元数据将成功复制到新的 .aac 文件。
ffmpeg -i metadata.aac -vn -acodec copy audio.aac
Run Code Online (Sandbox Code Playgroud)
但是,尝试更改元数据无效:
ffmpeg -i metadata.aac -vn -acodec copy -metadata title="My Title" audio.aac
Run Code Online (Sandbox Code Playgroud)
因此,似乎 .aac 容器可以保存元数据,而 ffmpeg 可以将其从输入复制到输出,但在使用复制编解码器时无法更改它。
有没有人知道一种让 ffmpeg 在不重新编码的情况下更改 aac 容器中的元数据的方法?
或者,在处理文件后,我可以使用另一个通用工具来设置元数据吗?
非常感谢。克里斯。