File size: 2,045 Bytes
6755a2d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
from moviepy.editor import (
    ColorClip,
    concatenate_videoclips,
    AudioFileClip,
    CompositeVideoClip,
)

from ...vision.video_map.video_lyric import render_lyric2video
from ...vision.video_map.video_writer import write_videoclip
from .music_map import MusicMap


def generate_music_map_videodemo(
    music_map: MusicMap,
    path: str,
    audio_path: str,
    render_lyric: bool = True,
    width: int = 360,
    height: int = 240,
    fps: int = 25,
    n_thread: int = 8,
    colors: list = [[51, 161, 201], [46, 139, 87]],
) -> None:
    """输入音乐谱面,生成对应的转场视频Demo,视频内容只是简单的颜色切换

    Args:
        music_map (MusicInfo): 待可视化的音乐谱面
        path (str): 可视化视频的存储路径
        audio_path (str): 音乐谱面对应的音频路径
        render_lyric (bool, optional): 是否渲染歌词,歌词在音乐谱面中. Defaults to True.
        width (int, optional): 可视化视频的宽. Defaults to 360.
        height (int, optional): 可视化视频的高. Defaults to 240.
        fps (int, optional): 可视化视频的fps. Defaults to 25.
        n_thread (int, optional): 可视化视频的写入线程数. Defaults to 8.
        colors (list, optional): 可视化的视频颜色. Defaults to [[51, 161, 201], [46, 139, 87]].
    """
    audio_clip = AudioFileClip(audio_path)
    video_clips = []
    size = (width, height)
    for i, clip in enumerate(music_map.clipseq):
        clip = ColorClip(
            size=size, color=colors[i % len(colors)], duration=clip.duration
        )
        video_clips.append(clip)
    video_clips = concatenate_videoclips(video_clips, method="compose")
    if render_lyric:
        video_clips = render_lyric2video(
            videoclip=video_clips,
            lyric=music_map,
            lyric_info_type="music_map",
        )
    video_clips = video_clips.set_audio(audio_clip)
    write_videoclip(
        video_clips,
        path=path,
        fps=fps,
        n_thread=n_thread,
    )