文件夹内视频裁剪水印,python工具,很实用哦!

文章讲述了如何使用Python及其库处理文件夹中的视频,裁剪并去除水印,以及如何通过Tkinter创建一个用户友好的GUI界面来简化操作过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件夹内视频裁剪水印,python工具,很实用哦!

1:运行相关环境
2:还有tkinter ttkthemes moviepy VideoFileClip pg等支持库的安装

支持的理论模式:
文件夹有N多视频,在统一位置有水印,进行定位裁剪去除水印。


def process_video(file_name, source_folder, output_folder):
    full_path = os.path.join(source_folder, file_name)
    clip = VideoFileClip(full_path)
    cropped_clip = clip.crop(x1=0, y1=52, width=clip.w, height=clip.h - 52)
    output_path = os.path.join(output_folder, file_name)
    cropped_clip.write_videofile(output_path, codec='libx264', audio_codec='aac')
    clip.close()
    cropped_clip.close()


def clear_source_folder(source_folder, exclude_folder):
    for file_name in os.listdir(source_folder):
        file_path = os.path.join(source_folder, file_name)
        if file_name.endswith(('.mp4', '.avi', '.mov')) and not file_path.startswith(exclude_folder):
            os.remove(file_path)


def select_source_folder(root, source_entry):
    source_dir = filedialog.askdirectory(title="选择源文件夹")
    if source_dir:
        source_entry.delete(0, tk.END)
        source_entry.insert(0, source_dir)


def set_default_output_folder(source_folder):
    output_folder = os.path.join(source_folder, 'output')
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    return output_folder


def start_processing(source_folder, root):
    output_folder = set_default_output_folder(source_folder)
    main(source_folder, output_folder)
    messagebox.showinfo("提示", f"所有视频处理完成,原目录的视频已清空,处理的视频文件已存储至 {output_folder} 。")
    clear_source_folder(source_folder, output_folder)

    # 更新源文件夹标签状态(注:这里由于没有source_folder_label变量,已移除此行)
    # source_folder_label.config(text=f"源文件夹: {source_folder} (已清空)")

    # 输出信息
    output_info_label.config(text=f"裁剪视频已存储到: {output_folder}\n\n右键复制路径")

这个实现的一个功能是导入一个文件夹,自动在文件下面创建一个output 输出裁剪完的视频。但是很多不懂的小伙伴嫌麻烦,还有编码问题,符号问题,环境搭建问题,更多的人更喜欢界面。
下面是界面的代码输出。

def main_gui():
    global output_info_label, source_folder_entry
    root = tk.Tk()
    style = ThemedStyle(root)
    root.title("三爷专用-文件夹内视频裁剪水印工具")
    style.theme_use('arc')

    source_folder_label = ttk.Label(root, text="源文件夹:")
    source_folder_label.grid(row=0, column=0, padx=10, pady=10, sticky=tk.W)

    source_folder_entry = ttk.Entry(root, width=50)
    source_folder_entry.grid(row=0, column=1, padx=10, pady=10, sticky=tk.W+tk.E)
    source_folder_entry.bind('<Button-1>', lambda event: select_source_folder(root, source_folder_entry))

    ttk.Button(root, text="选择源文件夹", command=lambda: select_source_folder(root, source_folder_entry)).grid(row=0, column=2, padx=10, pady=10, sticky=tk.W+tk.E)

    confirm_button = ttk.Button(root, text="确认并开始处理", command=lambda: start_processing(source_folder_entry.get(), root))
    confirm_button.grid(row=1, column=0, columnspan=3, padx=10, pady=10, ipadx=20, ipady=10, sticky=tk.W+tk.E)

    output_info_label = ttk.Label(root, text="", wraplength=500)
    output_info_label.grid(row=2, column=0, columnspan=3, padx=10, pady=10, sticky=tk.W+tk.E)

    root.mainloop()

    pythondef main(source_folder, output_folder):
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    video_files = [file_name for file_name in os.listdir(source_folder) if file_name.endswith(('.mp4', '.avi', '.mov'))]
    futures = []

    with ProcessPoolExecutor() as executor:
        for file_name in video_files:
            future = executor.submit(process_video, file_name, source_folder, output_folder)
            futures.append(future)

    # 等待所有future完成
    for _ in as_completed(futures):
        pass  # 这里可以根据需要处理每个future的结果,例如捕获异常等

当然我也把界面简单的美化了一下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值