【发布时间】:2020-04-10 00:12:05
【问题描述】:
所以,我试图通过 python 解决一些随机问题,但被困在了逻辑上。这是问题所在: 我有多个视频以及它们的运行时间或运行长度。现在,我想维护 2 个列表。如果“已同步”,则列出 1 个列表,而另一个列表“未同步”。如果流的运行时间差异小于或等于 2 秒,我们决定“同步”。否则,它们不会同步。 如果我们有多个匹配的流,那么我们会采用匹配计数/数量最高的流。
我能够想出一个非常简单/缓慢的方法来分割和配对这些文件。但是,当我得到不同的数据集时,我的逻辑失败了。
这是我写的:
from datetime import datetime
# same_streams_old = {
"Stream_1": "0:24:08.925167",
"Stream_2": "0:24:08.990644",
"Stream_3": "0:24:08.990644",
"Stream_4": "0:24:12.118778",
"Stream_5": "0:24:12.118778",
"stream_6": "0:24:10.075066"
}
same_streams = {
"Stream_1": "0:24:08.925167",
"Stream_2": "0:24:12.118778",
"Stream_3": "0:23:11.057711",
"Stream_4": "0:24:12.118778",
"Stream_5": "0:24:10.075066",
"Stream_6": "0:24:08.990644"
}
keys = []
values = []
final_synced_video_files = []
final_non_synced_video_files = []
def get_time_diff(episode_run_time, episode_time):
prev_episode_time = datetime.strptime(episode_run_time, '%H:%M:%S.%f')
current_episode_time = datetime.strptime(episode_time, '%H:%M:%S.%f')
time_diff = prev_episode_time - current_episode_time
if current_episode_time > prev_episode_time:
time_diff = current_episode_time - prev_episode_time
return float(time_diff.seconds)
for key, value in same_streams.items():
keys.append(key)
values.append(value)
for key in keys:
for _key in keys:
if key != _key:
diff = get_time_diff(same_streams[key], same_streams[_key])
if diff <= 1.5:
final_synced_video_files.append(key)
else:
pass
final_synced_video_files = list(set(final_synced_video_files))
final_non_synced_video_files = list(set(keys) - set(final_synced_video_files))
print("Synced Files : {0}".format(final_synced_video_files))
print("Non Synced Files : {0}".format(final_non_synced_video_files))
如您所见,匹配最多的流是stream_1、stream_2、stream_3 和stream_6。
我写的还没有比较最大计数。然而,当我在做这件事时,我觉得这并不是真正有效的,也是解决这个问题的好方法。有人输入吗?
我尝试了一些关于重叠间隔的方法,然后得到了这个:REPL LINK
但是,如果您同时查看same_streams 字典,您会看到结果不是我想要实现的。对此的任何帮助都会很棒。
编辑:
我需要获取彼此相差 2 秒的流。例如 :
在 same_streams_old 中,期望的结果是流 1、2、3 和 6。但是,在字典 same_streams 中,期望的结果是流 2、4 和 5。
基本上,我需要查看哪些流可以“复用”在一起,哪些不能复用。
【问题讨论】:
-
你能解释一下同步是什么意思吗?如果视频在同步列表中,它必须在列表中所有个其他视频的 2 秒内,还是至少一个?还是您的意思是在当前(实际)时间的 2 秒内?请同时解释一下匹配计数是什么。
-
我只需要检查哪些流落入彼此的 2 秒标记。我会在问题中解释更多。
标签: python python-2.7 dictionary intervals overlapping-matches