视频格式转换
官方脚本
可调用节点
v2.1.0
视频格式转换脚本 | 基于 FFmpeg,支持 MP4/MKV/AVI/MOV/WEBM/GIF/M4V/FLV/WMV/TS 10 种格式互转,可调视频编码器、分辨率、画质、帧率与音频处理 | 右键批量一键转换,支持定时任务与节点联动
脚本能力
直接启动支持
右键启动支持
快捷键启动支持
超级复制启动不支持
定时任务支持
可被其他脚本调用是
依赖其他脚本否
图形化启动界面支持
基于 FFmpeg 的视频格式转换脚本:一键将视频转换为 MP4 / MKV / AVI / MOV / WEBM / GIF / M4V / FLV / WMV / TS 等 10 种格式,支持批量处理、参数自定义、定时任务与节点联动。
核心特性
- 10 种格式互转:MP4、MKV、AVI、MOV、WEBM、GIF、M4V、FLV、WMV、TS
- 一键批量转换:选中多个视频,右键即可批量转换
- 转换参数可调:输出格式、视频编码器、分辨率、画质、帧率、音频处理方式
- 视频编码器可选:自动(随格式)/ H.264 / H.265(HEVC) / VP9 / MPEG-4
- 分辨率可选:原始 / 480p / 720p / 1080p(等比缩放,保持宽高比)
- 画质可选:最佳 / 高 / 标准 / 较低 / 最小
- 帧率可选:原始 / 24 / 25 / 30 / 50 / 60 fps
- 音频处理可选:保留原音轨 / 重新编码 / 移除音轨
- 智能跳过:同格式文件、已存在的输出文件自动跳过,可开启覆盖
- 输出目录自定义:可指定输出位置,留空则保存到原文件所在目录
- 定时任务:可扫描指定文件夹,按计划自动转换新视频
- 节点联动:可被其他脚本调用,返回转换结果路径
- 元数据保留:自动保留原文件标题、编码信息等元数据
- GIF 动画导出:内置调色板优化,自动限幅分辨率/帧率,避免文件过大
脚本演示

安装方法
本脚本的运行环境、依赖组件及图形化窗口均依赖「不忙脚本盒子」,建议仅通过盒子安装和使用本脚本。
前置条件:安装好 不忙脚本盒子
- 打开盒子 → 脚本市场 → 搜索 「视频格式转换」
- 点击「安装」
盒子会自动配置 Python 环境、依赖与 FFmpeg。
使用方式
直接启动
- 打开「不忙脚本盒子」,点击「视频格式转换」卡片
- 在弹出的参数窗口中,选择源视频文件或文件夹,并设置输出格式等参数
- 点击「执行」,等待转换完成
右键启动
- 在文件管理器中选中一个或多个视频文件
- 右键 → 选择「视频格式转换」
- 在参数窗口中确认参数后点击「执行」
快捷键启动
- 为脚本设置全局快捷键
- 选中视频文件后按下快捷键即可执行
定时任务
- 在盒子的「定时任务」页面创建任务,选择本脚本
- 在任务表单的「源视频文件」中选择文件或文件夹
- 选择文件:处理指定的这批视频
- 选择文件夹:每次运行都扫描该文件夹下的视频文件(不递归),适合定期转换文件夹里的新视频
- 设置执行时间后保存,即可无人值守自动转换
- 默认跳过已存在的输出文件,如需覆盖请在任务中开启「覆盖已存在文件」
💡 使用提示
- WEBM / WMV 编码限制:WEBM 仅支持 VP9 编码,WMV 仅支持 wmv2 编码,选择不兼容的编码器会在转换前提示错误
- 音轨自动兼容:WEBM / WMV / FLV 等严格容器下选择「保留原音轨」时,若源音轨与容器不兼容(如 AAC 复制进 WebM),会自动降级为重新编码(WebM→Opus、WMV→WMA、FLV→AAC),无需手动干预
- 同格式跳过:如 mp4 → mp4 会被跳过,如需同容器重编码请改选其他容器或删除已有输出
- 音轨说明:转换时仅保留第一条音轨,字幕流会被丢弃
- 输出位置:输出目录留空时,转换结果与源文件放在同一目录
节点脚本(开发者阅读)
本脚本已声明为节点,其他脚本可通过 /api/link 调用:
{
"script_id": "b7e730b1-1bb3-418d-a90a-4691ca600c9b",
"data": { "target_paths": ["C:/videos/a.webm"] },
"params": { "format": "mp4", "quality": "high" }
}
data.target_paths 传文件或文件夹路径(文件夹会被扫描其下的视频文件);params 未传的项使用 TOML 默认值。
返回信封(业务键平铺在顶层):
{
"code": 0,
"msg": "ok",
"summary": "转换完成:成功 1 个",
"output_paths": ["C:/videos/a.mp4"],
"skipped_paths": [],
"failed_paths": []
}
| 业务键 | 类型 | 说明 |
|---|---|---|
summary |
str | 转换结果摘要文本 |
output_paths |
list | 成功转换后的输出文件路径列表 |
skipped_paths |
list | 跳过的输入文件路径列表(同格式或已存在) |
failed_paths |
list | 转换失败的输入文件路径列表 |
🖥️ 环境要求
| 项目 | 要求 |
|---|---|
| 操作系统 | Windows 10+(64 位) |
| 运行环境 | Python 3.8+、FFmpeg(含 ffprobe) |
本脚本已声明为节点,可被其他脚本通过「不忙脚本盒子」机制调用。完整配置见下方 TOML,其他脚本若需调用请严格按此配置构造请求。
bm-scripts-box-rc.toml
[bmscriptsbox]
[bmscriptsbox.info]
id = "b7e730b1-1bb3-418d-a90a-4691ca600c9b"
name = "视频格式转换"
desc = "视频格式转换脚本 | 基于 FFmpeg,支持 MP4/MKV/AVI/MOV/WEBM/GIF/M4V/FLV/WMV/TS 10 种格式互转,可调视频编码器、分辨率、画质、帧率与音频处理 | 右键批量一键转换,支持定时任务与节点联动"
version = "2.1.0"
icon = "./imgs/img.png"
[bmscriptsbox.runtime]
language = "python"
language_version = ">=3.8"
entry = "main.py"
terminal = "always"
binaries = [{name = "ffmpeg"}]
[bmscriptsbox.triggers.context_menu]
enabled = true
targets = ["files"]
filters = [".mp4", ".mkv", ".avi", ".mov", ".webm", ".flv", ".wmv", ".ts", ".m4v",
".mpg", ".mpeg", ".m2ts", ".mts", ".3gp", ".ogv", ".vob", ".rmvb", ".rm", ".asf"]
[bmscriptsbox.triggers.shortcut]
enabled = true
input_type = "files"
filters = [".mp4", ".mkv", ".avi", ".mov", ".webm", ".flv", ".wmv", ".ts", ".m4v",
".mpg", ".mpeg", ".m2ts", ".mts", ".3gp", ".ogv", ".vob", ".rmvb", ".rm", ".asf"]
# ── 主数据:选中的视频文件(右键/快捷键带入,或界面选择) ──
[[bmscriptsbox.inputs]]
name = "target_paths"
label = "源视频文件"
type = "list"
exts = [".mp4", ".mkv", ".avi", ".mov", ".webm", ".flv", ".wmv", ".ts", ".m4v",
".mpg", ".mpeg", ".m2ts", ".mts", ".3gp", ".ogv", ".vob", ".rmvb", ".rm", ".asf"]
pick = "both"
description = "要转换的视频文件;选择文件夹时扫描其下的视频文件(不递归)"
# ── 节点输出:信封顶层平铺的业务键 ──
[[bmscriptsbox.outputs]]
name = "output_paths"
type = "list"
description = "成功转换后的输出文件路径列表"
[[bmscriptsbox.outputs]]
name = "skipped_paths"
type = "list"
description = "跳过的输入文件路径列表(同格式或已存在)"
[[bmscriptsbox.outputs]]
name = "failed_paths"
type = "list"
description = "转换失败的输入文件路径列表"
[[bmscriptsbox.outputs]]
name = "summary"
type = "str"
description = "转换结果摘要文本"
# ── 运行参数:自动生成界面 / 定时任务表单的字段 ──
[[bmscriptsbox.params]]
name = "format"
label = "输出格式"
type = "str"
default = "mp4"
choices = ["mp4", "mkv", "avi", "mov", "webm", "gif", "m4v", "flv", "wmv", "ts"]
choice_labels = { mp4 = "MP4", mkv = "MKV", avi = "AVI", mov = "MOV", webm = "WEBM", gif = "GIF", m4v = "M4V", flv = "FLV", wmv = "WMV", ts = "TS" }
description = "输出容器格式"
[[bmscriptsbox.params]]
name = "video_codec"
label = "视频编码器"
type = "str"
default = "auto"
choices = ["auto", "libx264", "libx265", "libvpx-vp9", "mpeg4"]
choice_labels = { auto = "自动 (跟随格式)", libx264 = "H.264 (兼容性最佳)", libx265 = "H.265/HEVC (高压缩)", "libvpx-vp9" = "VP9 (WebM 常用)", mpeg4 = "MPEG-4 (兼容老设备)" }
description = "视频编码器,auto 跟随容器推荐"
[[bmscriptsbox.params]]
name = "resolution"
label = "分辨率"
type = "str"
default = "original"
choices = ["original", "480p", "720p", "1080p"]
choice_labels = { original = "原始 (跟随输入)", "480p" = "480p (标清)", "720p" = "720p (高清)", "1080p" = "1080p (全高清)" }
description = "输出分辨率,original 跟随输入"
[[bmscriptsbox.params]]
name = "quality"
label = "画质"
type = "str"
default = "standard"
choices = ["best", "high", "standard", "low", "small"]
choice_labels = { best = "最佳 (CRF 18)", high = "高 (CRF 20)", standard = "标准 (CRF 23)", low = "较低 (CRF 26)", small = "最小 (CRF 28)" }
description = "画质档位(CRF 越小越好)"
[[bmscriptsbox.params]]
name = "fps"
label = "帧率"
type = "str"
default = "original"
choices = ["original", "24", "25", "30", "50", "60"]
choice_labels = { original = "原始 (跟随输入)", "24" = "24 fps", "25" = "25 fps", "30" = "30 fps", "50" = "50 fps", "60" = "60 fps" }
description = "输出帧率,original 跟随输入"
[[bmscriptsbox.params]]
name = "audio_mode"
label = "音频处理"
type = "str"
default = "copy"
choices = ["copy", "encode", "none"]
choice_labels = { copy = "保留原音轨 (最快)", encode = "重新编码 (推荐编码器)", none = "移除音轨" }
description = "音频处理方式"
[[bmscriptsbox.params]]
name = "output_dir"
label = "输出目录"
type = "str"
default = ""
description = "留空则输出到源文件所在目录"
[[bmscriptsbox.params]]
name = "overwrite"
label = "覆盖已存在文件"
type = "bool"
default = false
description = "开启后覆盖同名输出文件,否则跳过"
# ── 节点声明:可被其他脚本通过 /api/link 联动调用 ──
[bmscriptsbox.node]
enabled = true
# ── 定时任务声明:可无人值守、仅凭 params 运行 ──
[bmscriptsbox.schedule]
enabled = true
# ── 盒子自动生成运行界面 ──
[bmscriptsbox.params_form]
enabled = true
免责声明
所有脚本由用户通过开源仓库自行发布。本站仅提供索引服务,"不忙脚本盒子"仅提供展示与安装服务。请在使用前仔细核实脚本内容,作者不对其安全性、准确性及适用性作任何保证。