所以,我试图通过 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。
基本上,我需要看看哪些流可以“混合”在一起,哪些不能混合。