由于实际运用的需求,我用Python实现了视频剪辑器(自定义分段段数),用于将较大的视频分成几段。
ffmpeg库PowerShell下载代码↓
pip install ffmpeg
moviepy库PowerShell下载代码↓
pip install moviepy
Python版视频剪辑器(自定义分段段数)代码↓
import tkinter as tk
from tkinter import filedialog, messagebox
from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
import os
def split_video():
video_path = video_entry.get()
num_segments = int(segments_entry.get())
target_folder = folder_entry.get()
if not os.path.exists(video_path):
messagebox.showerror("错误", "视频文件不存在")
return
if not os.path.exists(target_folder):
messagebox.showerror("错误", "目标文件夹不存在")
return
try:
video_duration = get_video_duration(video_path)
segment_duration = video_duration / num_segments
for i in range(num_segments):
start_time = i * segment_duration
end_time = (i + 1) * segment_duration
output_filename = f"{os.path.splitext(os.path.basename(video_path))[0]}_{i+1}.mp4"
output_path = os.path.join(target_folder, output_filename)
ffmpeg_extract_subclip(video_path, start_time, end_time, targetname=output_path)
messagebox.showinfo("完成", "视频剪辑完成")
except Exception as e:
messagebox.showerror("错误", str(e))
def select_video():
video_path = filedialog.askopenfilename(filetypes=[("视频文件", "*.mp4 *.avi *.mkv")])
video_entry.delete(0, tk.END)
video_entry.insert(0, video_path)
def select_folder():
folder_path = filedialog.askdirectory()
folder_entry.delete(0, tk.END)
folder_entry.insert(0, folder_path)
def get_video_duration(video_path):
from moviepy.editor import VideoFileClip
clip = VideoFileClip(video_path)
return clip.duration
# 创建主窗口
root = tk.Tk()
root.title("视频剪辑工具")
# 视频文件选择
tk.Label(root, text="视频文件:").grid(row=0, column=0, padx=10, pady=10)
video_entry = tk.Entry(root, width=50)
video_entry.grid(row=0, column=1, padx=10, pady=10)
tk.Button(root, text="浏览", command=select_video).grid(row=0, column=2, padx=10, pady=10)
# 段数输入
tk.Label(root, text="段数:").grid(row=1, column=0, padx=10, pady=10)
segments_entry = tk.Entry(root, width=10)
segments_entry.grid(row=1, column=1, padx=10, pady=10)
# 目标文件夹选择
tk.Label(root, text="目标文件夹:").grid(row=2, column=0, padx=10, pady=10)
folder_entry = tk.Entry(root, width=50)
folder_entry.grid(row=2, column=1, padx=10, pady=10)
tk.Button(root, text="浏览", command=select_folder).grid(row=2, column=2, padx=10, pady=10)
# 开始剪辑按钮
tk.Button(root, text="开始剪辑", command=split_video).grid(row=3, column=1, padx=10, pady=10)
# 运行主循环
root.mainloop()
本人小白第一次发文章,请多指教。。。o(=•ェ•=)m