如何用Python的subprocess模块自动化Shotcut滤镜操作命令?
用Python控制Shotcut实现滤镜与画面调整的方法
嘿,先说明下:Shotcut目前没有官方的Python API可以直接调用滤镜或调整参数,不过我们有两种可行的替代方案,我给你详细讲讲~
方案一:通过MLT项目文件间接控制(推荐)
Shotcut的底层是基于MLT多媒体框架的,它的项目文件本质是MLT格式的XML。我们可以用Python生成包含旋转、缩放、位置调整等参数的MLT项目文件,再让Shotcut加载这个文件,就能实现你要的效果。
步骤详解:
了解MLT基本结构
一个简单的MLT项目会包含媒体源、滤镜(比如rotate、scale、mov)以及参数设置。比如旋转滤镜的参数是angle,缩放是scale,位置调整用mov的x和y参数。用Python生成MLT XML文件
下面是一个示例代码,生成一个包含旋转30度、缩放1.2倍、位置偏移的MLT项目:def generate_mlt_project(media_path, output_mlt_path): mlt_content = f'''<?xml version="1.0" encoding="utf-8"?> <mlt title="Shotcut Project" version="7.12.0" xmlns="http://www.mltframework.org/xsd/mlt"> <producer id="producer0"> <property name="resource">{media_path}</property> <property name="length">00:00:10.000</property> <property name="eof">pause</property> <filter id="filter_rotate"> <property name="mlt_service">rotate</property> <property name="angle">30</property> <!-- 旋转30度 --> </filter> <filter id="filter_scale"> <property name="mlt_service">scale</property> <property name="scale">1.2</property> <!-- 缩放1.2倍 --> </filter> <filter id="filter_position"> <property name="mlt_service">mov</property> <property name="x">100</property> <!-- X轴偏移100像素 --> <property name="y">50</property> <!-- Y轴偏移50像素 --> </filter> </producer> <playlist id="playlist0"> <entry producer="producer0"/> </playlist> <tractor id="tractor0" title="Shotcut Project"> <multitrack> <playlist id="playlist0"/> </multitrack> </tractor> </mlt> ''' with open(output_mlt_path, 'w', encoding='utf-8') as f: f.write(mlt_content) # 调用生成函数,替换成你的媒体文件路径和要保存的MLT路径 generate_mlt_project(r"C:\your_media.mp4", r"C:\shotcut_project.mlt")用Python启动Shotcut并加载这个MLT项目
注意你的原有代码里路径需要用原始字符串(加r)或者双反斜杠,避免转义问题:import subprocess # 启动Shotcut并加载生成的MLT项目 shotcut_path = r"C:\Program Files\Shotcut\Shotcut.exe" mlt_project_path = r"C:\shotcut_project.mlt" subprocess.Popen([shotcut_path, mlt_project_path])
方案二:用PyAutoGUI模拟人工操作(适合简单场景)
如果不想折腾MLT,也可以用Python的PyAutoGUI库模拟鼠标点击和键盘输入,直接操作Shotcut的GUI界面。不过这个方法依赖Shotcut的界面布局,一旦软件更新界面变化可能失效。
示例代码:
import subprocess import pyautogui import time # 启动Shotcut shotcut_path = r"C:\Program Files\Shotcut\Shotcut.exe" subprocess.Popen(shotcut_path) time.sleep(5) # 等待软件加载完成 # 模拟导入媒体(坐标需要根据你的屏幕分辨率和界面布局调整) pyautogui.click(x=50, y=50) # 点击"文件"菜单 time.sleep(0.5) pyautogui.click(x=70, y=100) # 点击"导入媒体" time.sleep(2) # 这里可以继续模拟选择媒体文件的操作... # 打开滤镜面板 pyautogui.click(x=200, y=50) # 点击"滤镜"菜单 time.sleep(0.5) pyautogui.click(x=220, y=150) # 点击"添加滤镜" # 后续可以模拟搜索"旋转"、调整参数等操作,坐标需要自己用pyautogui.displayMousePosition()测量
注意事项:
- 用PyAutoGUI时,你可以运行
pyautogui.displayMousePosition()来实时获取界面元素的坐标。 - 确保Shotcut窗口处于前台,且界面语言与你设置的一致,否则坐标会匹配错误。
补充说明
你的原有代码里有个小问题:路径字符串没有转义,应该用r"C:\Program Files\Shotcut\Shotcut.exe"或者"C:\\Program Files\\Shotcut\\Shotcut.exe",不然Python会把\P当成转义字符,导致启动失败。
内容的提问来源于stack exchange,提问作者Programmy
相关产品推荐
相关产品推荐

