如何在Python中确定视频的开始时间和结束时间(自纪元以来的秒数)?

10

我有一个项目需要能够知道视频文件(如.mp4, .mov, .mxf等)的开始时间(例如按下录制键时)和以自纪元秒为单位的结束时间。

到目前为止,我一直在寻找文件修改时间,并将其用作终点,然后减去持续时间以找到起点。在某些情况下,这种方法效果非常好,但似乎有些相机并不完全以线性可预测的方式写入/修改文件,因此有时候视频文件的开始/结束时间会重叠,明显您不能同时录制2个文件。

是否有其他方法或元数据可以使用例如ffprobe(或替代品)在Python中访问,以准确确定视频的开始和结束时间?


根据QuickTime文件格式规范 ,似乎“文件创建”时间没有明确定义。 - Rotem
1
你能提供更多的上下文吗?比如这个系统是在哪个平台上运行的?或者你正在使用什么工具?目前我所能想到的唯一可能是,你可以查看系统日志或摄像头日志(如果可以访问的话)。 - hecvd
这目前在Windows上运行,但也需要能在macOS上运行。系统/相机日志不可用。我们只有视频文件和其中存储的任何元数据可供使用。 - abagshaw
就目前而言,这个问题太过广泛。每种文件类型中元数据的行为以及在文件系统中可用性都将取决于:文件系统类型、它是如何挂载的、进行记录的程序、保存格式等等。针对单个组合的记录器-文件系统-格式来解决可能是一个更好的开始。 - Kevin M Granger
2
我认为记录所使用的软件可能是这个难题中最重要的部分。如果它没有保存信息,你就无法获取它。然而,也许你可以使用Python来控制录音的工作方式,并自己保存信息。 - Kevin M Granger
显示剩余3条评论
4个回答

1

您最好的工具是:

ffprobe
mediainfo
exiftool

你可以在其中找到许多类型的日期戳,但我从未测试过它们的准确性。如果在这些工具和文件系统戳之间找不到合适的元数据,则需要更好地跟踪拍摄时间。我既是电影制片人又是程序员,我无法完全理解为什么您需要时期时间,但我知道您需要更好地跟踪制作过程。
尝试使用带有时钟的数字场记板,或使用某种数字录音机,在录制过程中控制时间戳的创建。
此外,正如其他人所提到的,这个问题缺乏焦点。你试图解决什么问题?我只能想到媒体来源之间的同步问题,在这种情况下,请使用一些软件,如PluralEyes。

0
一个快速的提示是利用Python中的system()命令。
选项#1:
   $ ffmpeg -i file.flv 2>&1 | grep "Duration"

选项#2:

   $ mediainfo --Inform="General;%Duration%" [inputfile]

0
如果您正在同一系统上运行代码,可以使用time库来确定视频的开始时间和结束时间。
如果您想要自纪元以来的秒数差异,则可以使用time.time()函数。
import time

starttime = time.time()

您可以使用Tkinter将其绑定到onclick事件上


0
使用时间库应该可以解决您的问题。请尝试以下代码:
import time
timer = time.time()
print(timer)

否则,pygame 在时间和格式化方面非常有用。它旨在用于开发游戏,但也具有精确和有效的时间功能。
import pygame, sys
pygame.init()
timer = pygame.time.Clock() " Call after video has begun playback "
timer.tick() " Call onced playback has ended "
video_time = timer.get_time() " Returns previous time amount in milleseconds. "

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接