Jam*_*igh 7 video timestamps files command
我正在寻找一个命令,该命令将读取“ *.mp4”文件的元数据并将文件的时间戳与视频的创建时间联系起来。该命令对于文件内容应该是只读的,即前后散列文件应该产生相同的结果。
情况:我使用Android的库存工具将手机内部存储中的图片和视频移动到SD卡上的错误(“设置”?“存储”?“将数据传输到SD卡”)。不幸的是,被撞的所有文件的时间戳,也比其他目录搞砸周围DCIM/(图片和视频也从移动Download/,image/,Pictures/,和video/目录)。事后看来,我使用这样的工具似乎很愚蠢(我通常会使用Ghost Commander),但它在空间不足时显示为通知,而且看起来很简单。我现在正在尝试拼凑各种图片和视频的时间戳。
我正在有效地寻找与以下命令等效的视频,我用它来整理图像DCIM/100ANDRO/:
exiv2 -T mv *.JPG
Run Code Online (Sandbox Code Playgroud)
我浏览了一些FFmpeg 文档,但没有提到只读命令或打印时间戳。
(不幸的是,对于我的情况,这种方法没有为我没有创建的文件提供解决方案,例如 中的文件Download/,我希望按照我获得它们的时间顺序出现在媒体收藏中。)
感谢沃伦mediainfo在他的部分回答中告诉我有关命令的信息。
我设法构建了一个实现时间戳恢复的命令。它遍历适用的文件,每个文件,mediainfo读取元数据,grep并sed选择和格式化的时间戳,并touch应用它。
for file in *.mp4; do touch -t "$(mediainfo "$file" | grep -m 1 'Tagged date' | sed -r 's/.*([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2}).*/\1\2\3\4\5.\6/')" "$file"; done
Run Code Online (Sandbox Code Playgroud)
“选择和格式化”部分无疑会更短/更好;它对我来说看起来很麻烦,但我对正则表达式并不流利。尽管如此,该命令运行良好。我想我已经正确引用了所有内容,因此它应该适用于任何文件名。如果mediainfo输出不同的格式,它可能不起作用,但它很容易适应。
例如,这是一个正则表达式,它正确匹配我的*.mp4文件(例如 )的输出格式UTC 2013-11-15 11:36:06,以及 Warren 的2014-2-23T09:00:00Zfrom示例的格式my.mov:
's/-/-0/g; s/.*([0-9]{4})-0?([0-9]{2})-0?([0-9]{2})[T ]([0-9]{2}):([0-9]{2}):([0-9]{2}).*/\1\2\3\4\5.\6/'
Run Code Online (Sandbox Code Playgroud)
除此之外mediainfo,我实际上不得不手动安装,因为它不在我的发行版的存储库中(尽管现在看起来更新的版本已经打包了它),如果其他人遇到类似的问题,它应该是相当便携和有用的。
注意:记得检查时区。根据 GNUinfo页面,touch、date、 和其他 GNU 实用程序在TZ设置时使用环境变量,否则使用“系统默认规则”。要查看将使用的时区偏移量,请发出:
date +%:::z
Run Code Online (Sandbox Code Playgroud)
要更改它,请设置TZ环境变量:
export TZ="UTC0"
Run Code Online (Sandbox Code Playgroud)
如果视频的时间戳是正确的,并且被正确表示(即时区的时间值代表正确的时间点),那么您应该确保date +%:::z在运行touch -t这些文件之前输出时间戳时区的匹配偏移量(如上) . 使用stat来检查这些文件,因为它显示的时间偏移(像date +%:::z)。