赞
踩
在这篇博客中,我们将探讨如何使用Python处理视频文件,包括读取视频参数、剪切视频片段、合并视频片段、裁剪视频以及调整视频大小等功能。这些功能可以广泛应用于视频编辑、视频处理等场景。
首先,我们定义了一个 video_parameters
函数,用于读取视频文件的一些基本信息,如视频时长、帧率和视频大小。这些信息可以在后续的视频处理中用到。
def video_parameters(video_path, is_print=False):
video = VideoFileClip(video_path)
if is_print==True:
# 打印视频格式信息
print(f"video_path: {video_path}")
print(f"Duration: {video.duration} seconds")
print(f"File fps: {video.fps} ")
print(f"File size: {video.size} ")
return video.duration, video.size
接下来,我们实现了两个视频剪切函数 clip_video
和 clip_video2
。这些函数可以从一个给定的视频文件中剪切出指定时间范围的视频片段,并保存到新的文件中。
def clip_video(file_path, start_time, end_time, output_path):
# 从给定视频文件中剪切指定时间范围的片段
video = VideoFileClip(file_path)
clip = video.subclip(start_time, end_time)
clip.write_videofile(output_path)
clip.close()
def clip_video2(file_path, timestamps, output_paths):
# 从给定视频文件中剪切多个时间范围的片段
for i, (start_time, end_time) in enumerate(timestamps):
output_path = output_paths[i]
video = VideoFileClip(file_path)
clip = video.subclip(start_time, end_time)
clip.write_videofile(output_path)
clip.close()
merge_videos
函数可以将多个视频片段合并成一个视频文件,并为每个片段添加淡入淡出效果。这个功能在视频编辑中非常有用。
def merge_videos(video_paths, fade_duration, width, height, output_path):
# 加载和处理每个视频片段
clips = []
for path in video_paths:
clip = VideoFileClip(path).fadein(fade_duration).crossfadein(fade_duration)
resized_clip = CompositeVideoClip([clip.set_position("center")], size=(width, height)).set_duration(clip.duration)
clips.append(resized_clip)
# 合并视频片段
final_clip = concatenate_videoclips(clips)
# 保存合并后的视频
final_clip.write_videofile(output_path)
final_clip.close()
for clip in clips:
clip.close()
crop_video
函数可以将视频按照指定的上下左右边界大小进行裁剪,并保存处理后的视频。这在需要调整视频画面大小的场景中非常有用。
def crop_video(video_path, output_path, top, bottom, left, right):
# 加载视频
clip = VideoFileClip(video_path)
# 获取视频原始尺寸
original_width, original_height = clip.size
# 计算裁剪后的宽度和高度
crop_width = original_width - left - right
crop_height = original_height - top - bottom
# 裁剪视频
cropped_clip = clip.crop(x1=left, y1=top, x2=left + crop_width, y2=top + crop_height)
# 保存处理后的视频
cropped_clip.write_videofile(output_path)
# 清理临时资源
cropped_clip.close()
clip.close()
最后,resize_video
函数提供了两种视频大小调整的方式:等比例缩放和固定尺寸缩放(会有黑边)。这在需要调整视频大小以适应不同设备或平台的场景中很有用。
def resize_video(video_path, type, width, height, output_path):
# 加载视频
clip = VideoFileClip(video_path)
if type=="Proportional":
# 调整视频尺寸为指定大小
resized_clip = clip.resize(width=width, height=height)
else:
# 有黑边的放大/缩小
resized_clip = CompositeVideoClip([ clip.set_position("center")], size=(width, height)).set_duration(clip.duration)
resized_clip.write_videofile(output_path)
resized_clip.close()
clip.close()
在本篇博客中,我们将探讨如何使用 Python 来替换视频的背景音乐以及提取视频中的音频。这些功能都是利用了 Python 的 moviepy 库来实现的。
change_bgm()
函数是用来实现替换视频背景音乐的功能。这个函数接受三个参数:
video_path
: 需要替换背景音乐的视频文件路径bgm_path
: 新的背景音乐文件路径output_path
: 保存替换背景音乐后的新视频文件路径以下是函数的具体实现:
def change_bgm(video_path, bgm_path, output_path):
print("=========change_bgm==========")
print("video_path:", video_path)
print("bgm_path:", bgm_path)
print("output_path:", output_path)
video = VideoFileClip(video_path)
bgm = AudioFileClip(bgm_path)
# 确保背景音乐与视频时长一致
# bgm = bgm.set_duration(video.duration)
while bgm.duration < video.duration:
print('loop bgm')
bgm = concatenate_audioclips([bgm, bgm])
# 判断音频长度与输入参数的关系
if bgm.duration >video.duration:
bgm = bgm.subclip(0,video.duration)
# 如果背景音乐时长不够,重复播放以填充整个视频时长
print("=============================")
# 合并视频的音频和背景音乐
video = video.set_audio(bgm)
# 保存带有更换背景音乐的视频
video.write_videofile(output_path)
# video.close()
# bgm.close()
该函数的主要流程如下:
VideoFileClip
和 AudioFileClip
分别加载视频和背景音乐文件。set_audio()
方法实现。write_videofile()
方法保存带有新背景音乐的视频文件。通过这个函数,我们可以轻松地替换视频的背景音乐,无论背景音乐的时长是否与视频时长一致。
extract_audio()
函数是用来提取视频中的音频的功能。这个函数接受两个参数:
video_path
: 需要提取音频的视频文件路径output_path
: 保存提取出的音频文件路径以下是函数的具体实现:
def extract_audio(video_path, output_path):
"""
提取视频中的音频,并根据指定的音频长度进行处理
:param video_path: 视频文件路径
:param output_path: 输出音频文件路径
:param audio_length: 输入音频的长度
"""
print("=========extract_audio==========")
print("video_path:", video_path)
print("output_path:", output_path)
print("===============================")
video = VideoFileClip(video_path)
audio = video.audio
# 保存提取的音频文件
audio.write_audiofile(output_path)
video.close()
audio.close()
该函数的主要流程如下:
VideoFileClip
加载视频文件,并获取视频文件的音频部分。write_audiofile()
方法保存提取出的音频文件。通过这个函数,我们可以快速地从视频中提取出音频文件,在后续的音频处理中使用。
crop_video("./video/test1.mp4", "./video/crop_video.mp4", 50, 100, 20, 20)
video_parameters("./video/test1.mp4",is_print=True)
video_parameters("./video/crop_video.mp4",is_print=True)
这段代码展示了如何从原始视频 test1.mp4
中剪裁出一个新的视频 crop_video.mp4
。剪裁区域是距离左上角 (50, 100) 坐标,宽度和高度为 20 像素。video_parameters
函数用于打印原始视频和剪裁后视频的参数。
resize_video("./video/test1.mp4","Non-Proportional",1280,1280 ,"./video/resize_video.mp4")
video_parameters("./video/test1.mp4",is_print=True)
video_parameters("./video/resize_video.mp4",is_print=True)
这段代码展示了如何将原始视频 test1.mp4
调整为宽度和高度都为 1280 像素的新视频 resize_video.mp4
。调整大小的方式是 “Non-Proportional”,即不保持原有的宽高比。
video_paths = ["./video/test1.mp4", "./video/test3.mp4"]
merge_videos(video_paths, 0, 720,1280,"./video/merge_video.mp4")
video_paths = ["./video/test3.mp4", "./video/test2.mp4"]
merge_videos(video_paths, 0, 500,500,"./video/merge_video2.mp4")
video_parameters("./video/merge_video.mp4",is_print=True)
video_parameters("./video/merge_video2.mp4",is_print=True)
这段代码展示了如何将多个视频文件拼接成一个新的视频文件。第一个示例将 test1.mp4
和 test3.mp4
拼接成 merge_video.mp4
,宽度 1280 像素、高度 720 像素。第二个示例将 test3.mp4
和 test2.mp4
拼接成 merge_video2.mp4
,宽度和高度都为 500 像素。
clip_video("./video/test1.mp4",-1,4.20,"./video/output_video.mp4" )
video_parameters("./video/output_video.mp4",True)
time_stamps = [(0, 2), (3, 5), (6, 15)]
output_paths = ["./video/clip_1.mp4", "./video/clip_2.mp4", "./video/clip_3.mp4"]
clip_video2("./video/test1.mp4", time_stamps, output_paths)
第一个示例展示了如何从视频 test1.mp4
中剪辑出一个新的视频 output_video.mp4
,时长为 4.20 秒。第二个示例展示了如何根据时间戳列表 time_stamps
从 test1.mp4
中剪辑出多个视频片段,并分别保存为 clip_1.mp4
、clip_2.mp4
和 clip_3.mp4
。
change_bgm("./video/test3.mp4","./video/test1.mp3","./video/changebgm.mp4")
extract_audio("./video/test1.mp4","./video/test1.mp3")
这段代码展示了如何将视频 test3.mp4
的背景音乐替换为 test1.mp3
音频,生成新的视频 changebgm.mp4
。同时展示了如何从视频 test1.mp4
中提取出音频文件 test1.mp3
。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。