Spaces:
No application file
No application file
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,
)
|