【问题标题】:CLI Extract date/time stamp (timestamp) from quicktime or mpeg filesCLI 从 quicktime 或 mpeg 文件中提取日期/时间戳(时间戳)
【发布时间】:2020-05-24 20:30:25
【问题描述】:

有没有办法使用 Quicktime 或 MPEG2/MPEG4 从各种多媒体容器文件中提取日期/时间或时间戳?我正在寻找理想的命令行工具。我已经能够使用ffprobeffmpeg 套件的一部分)获取时间戳,但我还没有得到年、月和日期。相机有一个时钟,所以我很确定这个信息是可用的。

这个数据文件的历史是它首先在 miniDV 上拍摄,然后使用 QuicktimePlayer 通过 Firewire 800 传输到 Mac 来录制视频。有人告诉我 miniDV 格式是运动 jpeg。 file 命令报告文件为ISO Media, Apple QuickTime movie, Apple QuickTime (.MOV/QT)

% ffprobe -f lavfi -i "movie=filename.mov,fps=fps=25[out0]" -show_frames -show_streams -show_entries frame=pkt_pts_time -of csv=p=0 2>&1 | head -30
ffprobe version 4.2.2 Copyright (c) 2007-2019 the FFmpeg developers
  built with Apple clang version 11.0.0 (clang-1100.0.33.17)
  configuration: --prefix=/opt/local --enable-swscale --enable-avfilter --enable-avresample --enable-libmp3lame --enable-libvorbis --enable-libopus --enable-librsvg --enable-libtheora --enable-libopenjpeg --enable-libmodplug --enable-libvpx --enable-libsoxr --enable-libspeex --enable-libass --enable-libbluray --enable-lzma --enable-gnutls --enable-fontconfig --enable-libfreetype --enable-libfribidi --disable-libjack --disable-libopencore-amrnb --disable-libopencore-amrwb --disable-libxcb --disable-libxcb-shm --disable-libxcb-xfixes --disable-indev=jack --enable-opencl --disable-outdev=xv --enable-audiotoolbox --enable-videotoolbox --enable-sdl2 --disable-securetransport --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/clang --arch=x86_64 --enable-x86asm --enable-libx265 --enable-gpl --enable-postproc --enable-libx264 --enable-libxvid --enable-nonfree --enable-libfdk-aac
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Input #0, lavfi, from 'movie=/Volumes/SanDiskSSD/Movies/Italy22.mov,fps=fps=25[out0]':
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 25 tbr, 25 tbn, 25 tbc
0.000000
0.040000
0.080000
0.120000
0.160000
0.200000
0.240000
0.280000
0.320000
0.360000
0.400000
0.440000
0.480000
0.520000
0.560000
%

我想要输出显示这张照片的拍摄年份、月份和日期。

【问题讨论】:

  • 这些 miniDV 文件中可能不存在该信息。您可能有时间码,但默认情况下(至少在 miniDV 时)是记录“连续”时间码:从磁带开头的 0 开始。专业人士有时会将其更改为实时记录,但通常只记录时间。在时间码的单独字段中有“用户比特”,这些可以设置为记录日期。但是这些用户比特通常被用户以及摄取材料的程序所忽略。
  • 然而,在某些情况下,Quicktime 元数据中有一个“记录日期”字段。 mediainfo 显示在我的一些旧文件中。
  • 您不想要帧或数据包表示时间戳,它们与记录的时间戳无关,它只是一个字符串元数据字段。在任何情况下,fps 过滤器都会破坏现有的时间戳并生成新的时间戳。如果日期元数据存在,可以通过ffprobe file -show_entries format_tags获取
  • 我认为如果您要使用 ffmpeg,@Gyan 的建议是您最好遵循的,因为他是 ffmpeg 开发团队的一员。我还建议您查看 mediainfo。

标签: ffmpeg quicktime multimedia mpeg


【解决方案1】:

既然你能够得到时间戳,那么你可以使用这样的东西

ffmpeg -y -i name.mp4 -vf "drawtext=fontsize=36:fontcolor=blue:text='%{pts\:gmtime\:1675556887\:%A, %d, %B %Y %I\\\:%M\\\:%S %p}'" -preset ultrafast -f mp4 output.mp4

记得把这部分gmtime\:1575556887改成已经获取的时间戳

【讨论】:

  • 你确定那个命令行吗?它给了我一个错误,看起来你也在告诉它在框架上绘制时间戳。而且我没有时间戳:我有时间 offsets 从磁带的开头,而不是从时间的开头。您是说 UTC 或 GMT 时间实际上并未存储在视频流中,即使相机中有时钟?
【解决方案2】:

在我拥有的一些旧 DV Quicktime 文件中,mediainfo 在其“常规”部分显示“录制日期”:

General
 Complete name                            : /path/to/some-dv.mov
 Format                                   : QuickTime
 Format/Info                              : Original Apple specifications
 Commercial name                          : DVCAM
 File size                                : 125 MiB
 Duration                                 : 34 s 520 ms
 Overall bit rate                         : 30.4 Mb/s
 Recorded date                            : 2008-03-16 16:50:46.000
 Encoded date                             : UTC 2010-03-31 16:20:48
 Tagged date                              : UTC 2010-03-31 16:21:25
 Writing library                          : Apple QuickTime
 Media/UUID                               : E70E5054-029E-42DE-A25F-7739BCBD7D0A

ffprobe/ffmpeg 似乎只显示编码/标记日期,而不显示这个“记录日期”。

请注意,即使mediainfo 也仅在最新版本中显示此字段。版本 18.12-2 在 Debian 9 上显示它,但在 Ubuntu 16.04 上的版本 0.7.82-1 没有。

【讨论】:

  • 唉,mediainfo 显示我将它从相机复制到计算机的日期,请注意相机记录它的日期。
  • 太糟糕了。这可能取决于所使用的相机或传输程序。就我而言,复制日期似乎是“编码日期”,而“录制日期”似乎是正确的。我用过 Final Cut Pro 6 或 7。
  • 文件中不存在您要查找的信息(MOV 存储何时将其记录到 MOV 而不是来自相机,并且原始内容不包含任何日期)。您需要获得真正的 DV 输入(通常 DV 有录制日期),而不是您获得的未压缩内容。如果你不能得到输入,没有运气,记录日期就丢失了。 Jérôme,MediaInfo 的开发人员。
猜你喜欢
  • 2018-07-18
  • 1970-01-01
  • 2017-02-01
  • 2011-10-01
  • 2020-06-27
  • 1970-01-01
  • 1970-01-01
  • 2020-04-02
相关资源
最近更新 更多