如何从快速电影文件中删除所有元数据?
我的相机将.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.mov
和exiftool test-nometadata.mov
应该会告诉你差异。 -
以下是来自旧尼康.mov的示例输出,其中包含大量元数据(pastebin’d):
- 之前 – 80个元数据行
- 之后 – 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