[ 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')
posted @ 2022-07-11 08:48  YEUNGCHIE  阅读(351)  评论(0编辑  收藏  举报