在 Linux 系统上,我有一堆名为 类似的 MP4 文件20190228_155905.mp4
,但没有元数据。我以前对一些 jpg 遇到过类似的问题,我手动解决了
exiv2 -M"set Exif.Photo.DateTimeOriginal 2018:09:18 20:11:04" 20180918_201104.jpg
但据我所知,这DateTimeOriginal
仅适用于图像,而不是视频。确实有元数据的视频有一个 Xmp.video.MediaCreateDate
看起来像我想要的字段。我猜它包含一个 Unix 时间戳,所以我需要一种方法从文件名中获取日期,将其转换为 Unix 时间戳并将该值设置为Xmp.video.MediaCreateDate
.这一切都正确吗?或者我把事情过于复杂化了?
编辑:如果我不清楚,我想使用包含日期的文件名在 mp4 文件上设置创建日期元数据,以便程序可以按元数据对所有媒体文件进行排序
答案1
这使用ffmpeg(sudo apt install ffmpeg
安装)并适用于您的确切文件名。它将用带有元数据集的新文件替换旧文件。也许先尝试不使用该&& mv "~$f" "$f"
部分:
$ for f in *.mp4; do ffmpeg -i "$f" -metadata creation_time="${f:0:4}-${f:4:2}-${f:6:2} ${f:9:2}:${f:11:2}:${f:13:2}" -codec copy "~$f" && mv "~$f" "$f"; done
检查元数据:
$ ffprobe -v quiet 20190228_155905.mp4 -print_format json -show_entries stream=index,codec_type:stream_tags=creation_time:format_tags=creation_time
答案2
另一种选择是使用exiftool
在本例中,首先运行touch
设置文件修改时间,然后:
exiftool '-CreateDate<FileModifyDate' \
'-TrackCreateDate<FileModifyDate' \
'-MediaCreateDate<FileModifyDate' \
filename.mp4