Python版视频剪辑器(自定义分段段数)(需下载ffmpeg、moviepy库)

由于实际运用的需求,我用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

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值