使用Python和FFmpeg批量转换视频为GIF
我们来继续昨天的项目,但是昨天所说的是单个视频转pdf,要实现批量转化,还需进行参数的调整
批量转换视频为GIF的示例代码
下面是一个Python脚本示例,展示了如何遍历一个目录中的所有视频文件,并将它们批量转换为GIF。
python
import subprocess
import os
def convert_video_to_gif(input_video_path, output_gif_path, start_time, duration):
# FFmpeg命令
command = [
'ffmpeg',
'-ss', str(start_time), # 指定开始时间
'-t', str(duration), # 指定持续时间
'-i', input_video_path, # 输入视频路径
'-vf', 'fps=10,scale=320:-1:flags=lanczos', # 处理视频帧率和尺寸
'-c:v', 'gif', # 输出格式为gif
output_gif_path # 输出GIF路径
]
# 执行命令
subprocess.run(command)
print(f"成功将视频 {input_video_path} 转换为GIF {output_gif_path}!")
def batch_convert_videos(input_directory, output_directory, start_time, duration):
# 确保输出目录存在
os.makedirs(output_directory, exist_ok=True)
# 遍历输入目录中的所有文件
for filename in os.listdir(input_directory):
if filename.endswith(('.mp4', '.avi', '.mov', '.mkv')): # 支持的视频格式
input_video_path = os.path.join(input_directory, filename)
output_gif_path = os.path.join(output_directory, f"{os.path.splitext(filename)[0]}.gif") # 输出GIF文件名
# 确保输入文件存在
if os.path.exists(input_video_path):
convert_video_to_gif(input_video_path, output_gif_path, start_time, duration)
else:
print(f"输入视频文件 {input_video_path} 不存在,请检查路径。")
# 使用示例
input_directory = 'videos' # 输入视频文件所在目录
output_directory = 'gifs' # 输出GIF文件所在目录
start_time = 5 # 从视频的第5秒开始
duration = 2 # 持续时间为2秒
batch_convert_videos(input_directory, output_directory, start_time, duration)
代码解析
- 批量处理函数 :
batch_convert_videos
函数接受输入目录、输出目录、开始时间和持续时间作为参数。 - 遍历目录 :使用
os.listdir
遍历输入目录中的所有文件,检查文件扩展名以确定是否为支持的视频格式(如.mp4
、.avi
、.mov
、.mkv
)。 - 生成输出路径 :使用
os.path.splitext
获取文件名(不带扩展名),并生成输出GIF的路径。 - 确保输出目录存在 :使用
os.makedirs
创建输出目录(如果不存在的话)。 - 调用转换函数 :对每个视频文件调用
convert_video_to_gif
函数进行转换。
运行脚本
- 将你要转换的视频文件放在指定的输入目录(例如
videos
)。 - 运行上述Python脚本,生成的GIF文件将保存在指定的输出目录(例如
gifs
)中。