如何将视频时长与音乐时长匹配?

问题描述 投票:0回答:1

我有一个视频文件和音乐文件,我想将视频持续时间与多个音乐进行匹配,最小差异 = 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)
python recursion
1个回答
0
投票

说明和测试结果

Python 实现

该解决方案利用递归函数来查找累积匹配或非常接近指定视频持续时间的所有可能的音乐曲目组合。递归方法允许彻底探索潜在的组合,有效地适应不同的输入大小和要求。

递归函数

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']
      )。

这些测试场景的结果验证了该解决方案在处理不同输入集方面的有效性,证明了其稳健性和适应性。

结论

这种递归方法为将音乐曲目时长与视频长度匹配提供了全面且高效的解决方案,展示了适应不同曲目长度和数量的灵活性,使其成为动态视频时长匹配的可靠工具。

© www.soinside.com 2019 - 2024. All rights reserved.