如何从 QuickTime 电影文件中删除所有元数据?

如何从 QuickTime 电影文件中删除所有元数据?

我的相机将 .mov 文件作为电影拍摄。我怎样才能从中删除所有元数据,这样我就可以放心地在 YouTube 上分享它们,而不会意外泄露它们的拍摄时间/地点、我的相机类型等。命令行单行程序很好,但如果太混乱,GUI 程序会更好。

答案1

好吧,我有一个命令行答案:

笔记:这只适用于ffmpegUbuntu 默认包含的:它将有一个类似于的版本0.8.1-4:0.8.1-0ubuntu1;它将不会可与您从第三方 PPA 安装或自行编译的任何 ffmpeg 二进制文件一起使用。您的情况可能会有所不同。

  • 安装这些:sudo apt-get install ffmpeg libimage-exiftool-perl
  • 然后导航到源 .mov 文件所在的位置,我们将调用它test.mov
  • 然后运行:

    ffmpeg -i test.mov -map_metadata -1 -vcodec 复制 -acodec 复制 test-nometadata.mov
    
  • 然后您可以用它exiftool来检查它是否有效;exiftool test.mov并且exiftool test-nometadata.mov应该会向您显示差异。

  • 下面是我从旧的尼康 .mov 中输出的带有大量元数据(pastebin 格式)的示例:

    1. 之前 - 80 行元数据
    2. 之后 - 52 行元数据(甚至创建,修改等时间都已清空)

(请注意,上面 ffmpeg 中的顺序至关重要——必须在最后指定输入和输出文件)

答案2

笔记:使用最新版本的 ffmpeg(可能还有 avconv,但我还没有测试过),您可以简单地使用:

ffmpeg -i input.mp4 -map 0 -map_metadata -1 -c copy output.mp4

使用-map_metadata -1会创建一个空的“虚拟”元数据源。对于存储库中的 avconv 版本或其他过时版本,请使用下面描述的方法。


使用 avconv(或者 ffmpeg,如果这是您选择的武器,语法是相同的):

最简单的方法是设置-map_metadata为使用其中一个输入流,而不是使用全局元数据。99% 的时间这应该有效。

avconv -i input.mp4 -map 0 -map_metadata 0:s:0 -c copy output.mp4

这将从第一个数据流(通常是视频流)中获取元数据,并使用它来替换容器文件的全局元数据。这样做之所以有效,是因为大多数情况下,数据流中都没有写入有意义的元数据;但是,有时确实有,而您想完全删除该元数据。不幸的是,我能想到的唯一方法是使用管道和两个 avconv 进程。

avconv -i input.mp4 -f wav - | avconv -i - -i input.mp4 -map 1 -map_metadata 0 -c copy output.mp4

这利用了 WAV 文件不能包含元数据的事实(因为该格式是在元数据标签存在之前创建的)。

这两种方法都清空了我刚刚测试过的文件上的所有元数据 - 报告exiftool的只是编解码器信息,而 avprobe 没有向我报告任何元数据。使用管道来做这件事相当丑陋,第一种方法在 99% 的情况下都有效,所以应该是首选。

奖励:创建目录中每个 MP4 的空白版本,然后用空白版本替换元数据版本(警告-几乎不可逆):

for f in *.mp4; do avconv -i "$f" -map 0 -map_metadata 0:s:0 -c copy "out.$f"; mv "out.$f" "$f"; done

相关内容