总结

总结

这是一个长期存在(超过一年)的实际问题。我一直想完成它,但每次尝试都失败了。为此我咨询了好几个帖子。

我有很多日常生活视频,我正在用我的 iPhone 制作更多。在我的 MacBook 被这些视频塞满之前,我真的想以一种干净、系统的方式压缩和整理它们。

总结

目的:我想压缩视频而不丢失元数据,或者至少保留最少量的元数据这样我的 iPhone 就可以显示视频的拍摄时间和地点。

障碍:Exiftool 的“-tagsfromfile”不会完全复制和覆盖元数据。我甚至尝试了一些变体:-全部-全部:全部−覆盖原始...


背景

我使用 ffmpeg 进行压缩,并使用 exiftool 进行重新标记,如下所示

如何使用 ffmpeg 减小视频尺寸?

请参阅此答案。为方便起见,下面引用:

ffmpeg -i input.mp4 -vcodec libx264 -crf 20 output.mp4

然而,ffmpeg 的压缩会杀死几乎所有的元数据,所以我转向了 exiftool

可以将 EXIF 数据从一张图像完整复制到另一张图像吗?

我建议使用 Phil Harvey 提供的出色的 exiftool:

exiftool -TagsFromFile fromImage.jpg toImage.jpg

问题

主要问题是-TagsFromFile确实会复制/覆盖一些元数据,但不会完全覆盖,至少对于我的视频来说是这样。我也尝试过

exiftool −overwrite_original -r -TagsFromFile from.MOV -all to.MOV

以及其他一些品种,例如更换-全部-全部:全部,但没有任何效果。

也许我最关心的是标签-创建日期-全球定位系统(见附录)因为我想追踪照片和视频的拍摄时间和地点,并且我希望这些数据至少能够显示在我的 iPhone 中。

以下是视频预览来自.MOV(原文)和到.MOV(压缩)在我的 iPhone 中。

来自.MOV(位置隐藏):

在此处输入图片描述

到.MOV(未显示地址/位置!):

在此处输入图片描述

显然,缺少了一些东西,所以压缩后的位置無法出示。


问题

  1. 我该怎么做才能让我的 iPhone 显示压缩视频的原始文件的拍摄地点?
  2. 有没有办法复制并覆盖所有元数据?是否可以使元数据完全相同?
  3. 附带问题:当我在玩外置工具-TagsFromFile函数,我用它来尝试将一张图片的元数据覆盖到另一张图片上(都是用 iPhone 拍摄的)。然而,这种情况比视频的情况更糟糕:不仅位置没有被覆盖,时间也没有被覆盖!同样,我尝试了一些替换-全部-全部:全部。那么有办法解决这个问题吗?

附录

在此附录中,我列出了原始视频和压缩视频的日期/时间和 GPS 相关元数据。

from.MOV(原始):

File Size                       : 2.9 MB
File Modification Date/Time     : 2018:05:16 05:50:36-05:00
File Access Date/Time           : 2018:05:16 07:54:42-05:00
File Inode Change Date/Time     : 2018:05:16 07:51:58-05:00
File Permissions                : rw-r--r--
File Type                       : MOV
Create Date                     : 2018:05:16 10:50:36
Modify Date                     : 2018:05:16 10:50:38
Track Create Date               : 2018:05:16 10:50:36
Track Modify Date               : 2018:05:16 10:50:38
Creation Date                   : 2018:05:16 05:50:36-05:00
GPS Coordinates                 : xx deg yy' z.zz" N, aa deg bb' c.cc" W, 261.305 m Above Sea Level
GPS Altitude                    : 261.305 m
GPS Altitude Ref                : Above Sea Level
GPS Latitude                    : xx deg yy' z.zz" N
GPS Longitude                   : aa deg bb' c.cc" W
GPS Position                    : xx deg yy' z,zz" N, aa deg bb' c.cc" W

至.MOV(压缩):

File Size                       : 194 kB
File Modification Date/Time     : 2018:05:16 07:54:42-05:00
File Access Date/Time           : 2018:05:16 07:54:57-05:00
File Inode Change Date/Time     : 2018:05:16 07:54:42-05:00
File Permissions                : rw-r--r--
File Type                       : MOV
Creation Date                   : 2018:05:16 05:50:36-05:00
Track Create Date               : 2018:05:16 10:50:36
Track Modify Date               : 2018:05:16 10:50:38
Media Create Date               : 2018:05:16 10:50:36
Media Modify Date               : 2018:05:16 10:50:38
Creation Date                   : 2018:05:16 05:50:36-05:00
Create Date                     : 2018:05:16 10:50:36
Modify Date                     : 2018:05:16 10:50:38
GPS Altitude Ref                : Above Sea Level
GPS Latitude                    : xx deg yy' z.zz" N
GPS Longitude                   : aa deg bb' c.cc" W
GPS Altitude                    : 261.3 m Above Sea Level
GPS Latitude Ref                : North
GPS Longitude Ref               : West
GPS Position                    : xx deg yy' z.zz" N, aa deg bb' c.cc" W

(为了保护隐私,我已将位置更改为 xyzabc :P)

如您所见,不仅日期/时间略有不同,而且还有更多多余的新标签。可能最让我担心的是标签-GPS 坐标并非抄袭自来自.MOV到.MOV。虽然基本信息已经复制了,但我想这可能是我的 iphone 不显示其位置的原因。因此这引出了我的第二个问题(上述)。


答案1

不是一个解决方案,而是一个解决方法https://www.bento4.comhttps://trac.ffmpeg.org/ticket/6193#comment:6

ffmpeg -i source.mov converted.mp4
mp4extract moov/meta source.mov source-metadata
mp4edit --insert moov:source-metadata converted.mp4 converted-withmeta.mp4

希望这可以帮助!

相关内容