[ Python ] 音视频剪辑
https://www.cnblogs.com/yeungchie/
视频
提取视频
from moviepy.editor import *
# 从 MP4 文件提取
video = VideoFileClip(r'xxx.mp4')
保存为 PNG
# 保存到 png 文件夹下,格式为 xxx000.png xxx001.png ...
video.write_images_sequence(r"png/xxx%03d.png")
# 默认数量为视频时长 * 视频帧数,可以指定 fps 来控制
video.write_images_sequence(r"png/xxx%03d.png", fps=10)
保存为 GIF
video.write_gif(r"xxx.gif")
# 也可以指定 fps
video.write_gif(r"xxx.gif", fps=10)
不在乎画质的话,还是觉得保存成 GIF 再用别的模块处理会更加方便。
音频
提取音频
from moviepy.editor import *
# 从 MP4 文件提取
audio = AudioFileClip(r'xxx.mp4')
保存音频
audio.write_audiofile(r'xxx.mp3')
读入音频
from pydub import AudioSegment as aud
sound = aud.from_mp3(r'xxx.mp3')
截取音频
- 截取 0~7 s
s7 = sound[:7*1000]
- 截取 5m 29s 到最后
s5_29 = sound[(5*60+29)*1000:]
音频拼接
sound = s7 + s5_29
音频翻转
sound_reverse = sound.reverse()
导出音频
sound.export(r'xxx.mp3')
图片
读入 GIF
from PIL import Image, ImageFile, ImageSequence
ImageFile.LOAD_TRUNCATED_IMAGES = True
gif = Image.open(r'xxx.gif')
分解帧
seq = [ x.copy() for x in ImageSequence.Iterator(gif) ]
返回一个 list
倒放拼接
seq = seq[:-1] + seq[:-1][::-1]
帧剪辑
隔一帧取一帧,压缩帧数。
seq = [ seq[x] for x in range(0, len(seq), 2) ]
保存动图
图片列表保存为动图
# 将第一帧图作为起始,追加后续的所有帧
seq[0].save('xxx.gif', save_all=True, append_images=seq[1:])
合并
GIF 和 MP3 为 MP4
from moviepy.editor import *
# 从 gif 文件提取视频
video = VideoFileClip(r'xxx.gif')
# 从 gif 文件提取
video.write_videofile(r'xxx.mp4', audio=r'xxx.mp3')