我有一个视频文件和音乐文件,我想将视频持续时间与多个音乐进行匹配,最小差异 = ideo 持续时间,音乐持续时间之和。我使用如下代码,但看起来并不是所有答案,我能得到什么组合?我必须使用递归吗?
musicList = [music filename list
timeList = [music file duraion list]]
tList = []
mList = []
dList = []
for i, (m1, t1) in enumerate(zip(musicList, timeList)):
if t1 > videoTime:
continue
time1 = t1
music1 = m1
for j in range(i + 1, len(musicList) - 1):
time2 = time1
music2 = music1
for m2, t2 in zip(musicList[j:], timeList[j:]):
if t2 > videoTime or time2 + t2 > videoTime:
continue
time = max(time2, t2, time2 + t2)
music2 = music2 if time == time2 else m2 if time == t2 else f'{music2}+{m2}'
time2 = time
mList.append(music2)
tList.append(time2)
dList.append(videoTime - time2)
该解决方案利用递归函数来查找累积匹配或非常接近指定视频持续时间的所有可能的音乐曲目组合。递归方法允许彻底探索潜在的组合,有效地适应不同的输入大小和要求。
def find_combinations(musicList, timeList, index, current_tracks, current_duration, video_duration, results):
if abs(current_duration - video_duration) <= 1: # Adjust this threshold as necessary
results.append((current_tracks.copy(), current_duration))
for i in range(index, len(musicList)):
if current_duration + timeList[i] <= video_duration: # Prune the search space
current_tracks.append(musicList[i])
find_combinations(musicList, timeList, i + 1, current_tracks, current_duration + timeList[i], video_duration, results)
current_tracks.pop() # Backtrack after exploring this path
def match_video_to_music(musicList, timeList, video_duration):
results = []
find_combinations(musicList, timeList, 0, [], 0, video_duration, results)
return results
测试 1:音乐文件
['song1', 'song2', 'song3']
,持续时间为 [120, 180, 240]
,视频长度为 300
秒。
['song1', 'song2']
这样的组合与视频时长精确匹配。测试 2:跟踪
['track1', 'track2', 'track3', 'track4']
,持续时间为 [210, 130, 245, 200]
,目标是视频持续时间为 550
秒。
测试 3:在
['music1', 'music2', 'music3']
第二个视频中跟踪 [200, 220, 230]
,持续时间为 450
。
['music2', 'music3']
与目标持续时间完全匹配。测试 4:在
['a', 'b', 'c', 'd', 'e']
第二个视频中跟踪 [100, 200, 300, 400, 500]
,持续时间为 1000
。
['a', 'b', 'c', 'd']
、['a', 'd', 'e']
和['b', 'c', 'e']
。测试 5:每
['x', 'y', 'z']
秒跟踪 150
300
第二个视频。
['x', 'y']
、['x', 'z']
、['y', 'z']
)。这些测试场景的结果验证了该解决方案在处理不同输入集方面的有效性,证明了其稳健性和适应性。
这种递归方法为将音乐曲目时长与视频长度匹配提供了全面且高效的解决方案,展示了适应不同曲目长度和数量的灵活性,使其成为动态视频时长匹配的可靠工具。