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

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

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

注意:这仅适用于默认情况下包含在Ubuntu中的ffmpeg :它的版本类似于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 copy -acodec copy test-nometadata.mov
    
  • 然后你可以使用exiftool检查它是否有效; exiftool test.movexiftool test-nometadata.mov应该会告诉你差异。

  • 以下是来自旧尼康.mov的示例输出,其中包含大量元数据(pastebin’d):

    1. 之前 – 80个元数据行
    2. 之后 – 52个元数据行 (甚至创建,修改等时间已被取消)

(请注意,上面ffmpeg中的顺序是必不可少的 – 输入和输出文件必须在最后指定)

注意:使用最新版本的ffmpeg(可能是avconv,但我没有测试过),你可以简单地使用:

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

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


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

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

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

这将从第一个数据流(通常是video流)中获取元数据,并使用它来替换容器文件的全局元数据。 这是有效的,因为大多数时候,数据流没有写入有意义的元数据; 但是,有时他们会这样做,而你想完全摆脱那些元数据。 不幸的是,我能想到的唯一方法是使用管道和两个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