WebmGenerator
Windows 下载地址:https://github.com/dfaker/WebmGenerator/releases
这是一个用于剪辑、过滤和拼接视频片段的工具,支持 webm (VP8, VP9)、mp4 (x264, H.265, SVT AV1) 和高质量 gif 输出,包括实时效果过滤和场景间过渡效果。
- 🎥 Webm、Mp4 和 Gif 输出
- ⏱️ 基于 mpv 的交互式片段选择
- 📺 集成 Youtube-dlp 以自动从流行网站下载视频,包括直播流。
- 🌈 全套滤镜,从裁剪到色调映射,以及 VR 到 2D 投影。
- 🧲 关键帧滤镜调整,随节奏变换色调,跟踪画面中的物体并重新定位文本或叠加图像。
- 🤖 基于场景变化或音频电平/静音检测自动分离片段。
- 💾 自动调整比特率以达到目标文件大小。
- ✂️ 保存单个提取的片段或将多个片段连接成带过渡效果的自定义编辑。
- 🍱 将多个视频打包成动态大小的网格。
- 🤓 用户可扩展的输出格式和编码器参数。
wiki 中有一些可能的输出示例
外部依赖:
- mpv-2.dll - https://mpv.io/installation/
- ffmpeg - https://www.ffmpeg.org/download.html
- youtube-dlp - https://github.com/yt-dlp/yt-dlp(可选)
所有这些应放在与脚本相同的文件夹中或 PATH 环境变量中。
Python 依赖:
要直接使用 Python 3 运行,需要以下包:
- python-mpv
- pygubu
- numpy
- pathvalidate
- tkinterdnd2
pip 可以用一条命令为你安装所有这些:
pip3 install -r requirements.txt
对于 Linux 用户,可能没有安装 tkinter,以 Ubuntu 为例,运行以下命令安装:sudo apt-get install python3-tk
或者,Windows 用户可以使用最新的打包版本:https://github.com/dfaker/WebmGenerator/releases
使用方法
运行 webmGenerator.py
或直接将视频文件拖放到 webmGenerator.py
上启动。
启动 - 初始界面
程序最初在"剪辑"选项卡中打开,左侧面板有一个切片设置框:
- 设置
切片长度
- 设置初始添加子片段时的长度,之后可以随时调整大小。 - 设置
目标长度
- 你想要达到的最终时长。 - 设置
目标修剪
- 如果使用过渡效果在片段之间交叉剪辑时预期的片段重叠量,如果打算使用硬切,则设为零。 - 设置
拖动偏移
- 拖动预览时,当前播放位置从子片段末尾向后偏移的量(按住 Ctrl 键则从开头向前偏移)。较大的值在对齐视频间事件时很有用。
下方是:
- 播放音量控制。
- 状态行
00.00s 0.00% (-0.00s)
显示你已选择的总秒数、达到目标时长的百分比,以及目标修剪
预计会从总时长中扣除的秒数(例如,在片段之间添加 0.25 秒交叉淡入淡出会扣除的时间)。 - 进度指示器显示你距离达到目标长度还有多远,当选定片段的总时长超过目标长度时会变成红色。
下方是你的源视频框,你可以点击加载视频来加载一个或多个源视频进行剪辑,或快速清除所有子片段选择以重新开始剪辑过程。
剪辑片段 - 子片段选择
加载片段后,底部的深灰色面板会变成视频时间轴,你可以在任何地方左击或点击并拖动来浏览视频。
右击会弹出上下文菜单,允许你:
- "添加新子片段" - 将在您右键单击的位置周围添加一个新的待剪辑子片段到时间轴上,初始时其持续时间与您在"切片长度"中设置的相同。
- "删除子片段" - 移除您右键单击位置下的子片段。
- "克隆子片段" - 复制您右键单击位置下的子片段。
- "复制子片段" - 将您右键单击位置下子片段的时间戳复制到内部剪贴板。
- "粘贴子片段" - 从内部剪贴板粘贴时间戳到您右键单击位置下的子片段,可能粘贴到不同的视频上。
- "扩展到兴趣标记" - 将您右键单击位置下的子片段延伸,使起始和结束标记与下一个兴趣或场景变化标记对齐。
- "添加兴趣标记" - 在时间位置添加可视指示器,不影响输出但在观看和决定代表性场景时很有用。
- "微调到最低误差±#秒" - 尝试移动起始和结束标记(不超过前后1-2秒),以找到制作循环视频的"完美循环",将在后台处理并在完成时更新您右键单击位置下的子片段。
- "在此处查找最多#秒的循环" - 扫描您在时间轴上右键单击的位置周围,找到最多#秒长的最佳"完美循环"。
添加片段后,您可以拖动蓝色和红色的起始和结束标记来改变子片段的起始和结束点,播放器会跳转到您拖动起始或结束点的位置。
当起始和结束标记被点击后,它会保持选中状态并显示白色边框,可以使用左右箭头键精确地将选中的标记向前或向后移动一帧。
标记之间的绿色中央条也可以拖动,以在保持相同子片段持续时间的同时前后移动整个时间窗口。
在时间轴上滚动鼠标滚轮可以放大和缩小,然后可以使用时间轴窗口顶部的灰色条来滑动查看放大后的片段的早期或晚期部分。
在子片段底部的绿色选择条上滚动鼠标滚轮将前后移动该子片段(包括起始和结束点),同时保持总持续时间不变。
更多剪辑 - 标记和大小目标
上图显示了使用"添加兴趣标记"添加的时间轴标记的存在,以及多个已添加和调整大小的子片段。注意,选择这三个部分后,最终输出时长为1分56秒,因为这超过了选定的"目标长度",所以进度条呈红色。
添加效果 - 滤镜
一旦定义了所有子片段,您可能想使用"滤镜"选项卡添加视觉滤镜、降噪或裁剪,但如果不需要应用任何滤镜,可以跳过此选项卡。
右侧窗格实时显示应用所选滤镜后的输出视频预览。
左侧窗格显示:
- 子片段导航块,显示当前子片段名称、时间跨度和在选定片段顺序中的位置,此块左右两侧的箭头允许您浏览已选择的子片段。
- 清除、复制和粘贴按钮,分别用于移除当前片段的所有滤镜、将当前子片段的所有滤镜复制到剪贴板以供后续粘贴,以及将当前复制的滤镜粘贴到新片段上。
- 滤镜选择框,包含可用滤镜的下拉列表和一个将所选滤镜添加到当前子片段的按钮。
下方是应用于当前子片段的滤镜堆栈,此片段已添加了"色相"调整和预配置的"libpostproc"滤镜,用于对编码质量差的视频进行降噪和去块。
每个滤镜下方的按钮可用于移除、启用或上下移动滤镜顺序,如果滤镜有任何输入选项,它们会显示为这些按钮下方的输入字段。例如,图中的色相滤镜已配置为将"h"色相值偏移0.42,并将"s"饱和度值增加3.4。
调整时间效果 - 时间轴滤镜
某些过滤器值的左侧有两个按钮"T"和"S"。点击"T"将停止使用提供的过滤器值,并将参数切换为使用时间轴关键帧值。按"S"则选择该参数,并在下方时间轴上显示该参数当前的关键帧值。
示例展示了正在使用的叠加过滤器,"x"和"y"坐标参数都启用了时间轴关键帧值。"y"参数被选中,并设置了4个关键帧值,使叠加的蝙蝠侠面具在场景中缓慢上移,跟随演员的脸部。
右击下方时间轴会显示一个菜单,允许添加或删除关键帧值。滚动鼠标滚轮将增加或减少现有关键帧值,并定位到剪辑中的关键帧时间——建议在此操作期间降低预览速度以进行更精确的调整。
旋转和对齐的高级控制 - 时间轴过滤
目前时间轴有一些相当实验性的控制,我们无疑会对它们进行改进:
在下方时间轴栏:
- "左"、"右" - 逐帧向前和向后定位。
- "Shift+左"、"Shift+右" - 大幅向前和向后定位。
- "Ctrl+左"、"Ctrl+右" - 在已定义关键帧之间的中点向前和向后定位。
- "上箭头"、"下箭头" - 在当前时间为选定属性添加新关键帧,如果此时已存在关键帧则增加或减少其值。
- "N" - 跳转到当前放置的关键帧之间最大间隔的中点。
- "I" - 添加样条插值的中间关键帧,为您的关键帧添加更多插值点并平滑动作,每秒视频将添加0-23个插值关键帧,按键可增加计数,然后循环回零。
当在视频播放器上选择角度属性时:
- "Ctrl+Shift+左键单击+拖动鼠标" - 绘制一条线,释放鼠标时将创建一个关键帧,旋转视频使该线与最接近的90度角对齐,使您刚刚绘制的线变为水平或垂直。
- "Ctrl+左键单击+拖动鼠标" - 与上述相同,但在添加旋转视频关键帧后,跳转到当前放置的关键帧之间最大间隔的中点。
当在视频播放器上选择X或Y属性时:
- 在视频上右击并选择"设置X和Y扭曲的目标位置",这将是进一步点对齐的位置。
- 在视频上"左键单击",您点击的点将根据当前关键帧递增,有效地将该点移动以匹配在"设置X和Y扭曲的目标位置"中设置的红色目标的X或Y位置。
- "Ctrl+左键单击" - 与上述相同,但在添加移动的X或Y视频关键帧后,跳转到当前放置的关键帧之间最大间隔的中点。
拼接 - 排序和转场
最后是"合并"选项卡,如果您在当前剪辑会话中没有访问过它,首次访问时它会自动将所有当前剪辑添加到序列中。
顶部的"可用剪辑"框显示所有当前选择的子剪辑,以及应用过滤器后它们的预览效果,每个下方的按钮用于将它们添加到下方的"序列"框中。
"合并风格"下拉菜单允许您在将所有选定剪辑连接在一起,或将它们作为单独的独立剪辑输出之间切换。
"序列"面板是选定子剪辑在输出中出现的顺序,左右箭头按钮在最终视频顺序中向前和向后移动子剪辑,"删除"按钮从计划序列中完全移除剪辑,同时将其保留在顶部的"可用剪辑"中以供稍后重新添加。
由于我们处于序列模式,我们有两个选项来控制剪辑之间的淡入淡出效果(如果有的话):
- "转场持续时间" - 剪辑之间的转场效果持续多长时间,如果您想要硬切换,请将其设置为零。
- "转场风格" - 剪辑之间转场效果的外观,示例可在 https://trac.ffmpeg.org/wiki/Xfade 查看 在下方框架中,我们有输出剪辑的配置:
输出格式
- 允许在mpv、webm和gif之间选择输出格式。输出文件名前缀
- 将添加到最终视频文件名开头的名称,如果可能的话,会自动从输入视频中猜测。最大文件大小
- 允许输出的最大大小(以MB为单位),如果最终视频大于此大小,将尝试以降低的质量(或对于.gif文件降低大小)再次编码,如果设置为零,则允许任何大小的输出。大小匹配策略
- 如何处理不同大小的输入视频。限制最大尺寸
- 最终视频的最大输出宽度或高度(以较大者为准),如果输出更大,将会缩小,如果更小则保持不变。音频通道
- 控制输出中音频的存在或缺失,包括无声,以及各种单声道和立体声比特率。速度调整
- 将对最终剪辑进行加速处理,同时保持声音真实,可能的最小和最大值为0.5x和2x,但通常超过0.12x会变得令人分心。
制作视频 - 编码
当你对序列满意时,可以点击"编码"开始编码过程,编码运行的进度将在底部显示为进度条,提交的编码作业按顺序处理。
该工具首先会对子剪辑进行剪切并应用滤镜,然后保存在名为tempVideoFiles
的临时文件夹中,每次退出后都会清理这个文件夹。
在所有剪辑都剪切和过滤后,它们将被合并,如果通过了最大文件大小
限制(如果有的话),将被保存到与脚本相同目录下名为finalVideos
的文件夹中。如果设置了大小限制,最终编码步骤将使用相同的tempVideoFiles
以较低的质量重复进行。
菜单和选项
窗口顶部的三个菜单中包含了许多选项和实用工具:
新建项目
- 清除所有配置,关闭所有剪辑并刷新以开始新会话。打开项目
- 从*.webmproj文件打开先前保存的项目。保存项目
- 将项目保存为*.webmproj文件。运行场景变化检测
- 扫描当前视频寻找场景变化,在检测到场景变化时添加时间线标记。从Youtube-dlp支持的URL加载视频
- 从任何youtube-dlp支持的网站加载视频或流,支持数百个网站。加载图像作为静态视频
- 将图像作为视频剪辑加载,加载时会询问图像应该填充到的持续时间。监视剪贴板并自动添加URL
- 启动一个监视线程,监控剪贴板中的URL并尝试自动下载。取消当前youtube-dlp下载
- 特别是对于直播流,事件结束后流可能会持续数小时,这可以优雅地结束并保存文件。更新Youtube-dl
- 随着网站布局和API的变化,youtube-dlp可能会过时并停止工作,这允许你更新新的提取器。将剪辑分割成n个相等的子剪辑
- 将当前视频分割成你要求的任意数量的相等子剪辑,适用于分割长视频,其中编辑点不重要。将剪辑分割成n秒的子剪辑
- 类似,但将剪辑切割成尽可能多的n秒片段,如果需要,最后一个片段会被剪短。切换生成音频频谱
- 在时间线背景中显示视频剪辑的声波,以帮助相对于音频事件定位剪切。清除当前剪辑上的所有剪辑
- 清除当前视频上定义的所有子剪辑。通过文本范围添加子剪辑
- 接受文本形式的范围,例如"1:23到1:48.2"或"12秒-13.5秒",并将它们添加为新的子剪辑,接受多种格式。
configuration.json
statsWorkers
- 允许运行的线程数,负责视频的背景分析,如场景变化和音频响度隔离。
encodeWorkers
- 将并行运行以执行最终编码的ffmpeg实例数。
imageWorkers
- 专门用于提供滤镜预览图像和时间线缩略图的线程数。
encoderStageThreads
- 如果最终编码器支持多线程编码,则使用的线程数。
maxSizeOptimizationRetries
- 系统在放弃之前尝试达到文件大小目标的最大次数。
tempFolder
- 存储正在处理中的视频文件的文件夹。
tempDownloadFolder
- 存放youtube-dlp下载内容的文件夹。
downloadNameFormat
- 控制youtube-dlp如何格式化最终文件名输出的命名掩码。
defaultProfile
- 最初在编码选项卡中选择和设置的默认配置文件。
defaultPostProcessingFilter
- 在编码选项卡中应用的默认后处理滤镜。
defaultSliceLength
- 使用'b'键或添加新子片段菜单选项添加的子片段的默认长度。
defaultTargetLength
- 剪辑选项卡上长度计数器和警告栏设置的目标持续时间。
defaultTrimLength
- 场景之间淡入淡出所假定占用的默认时间量。
defaultDragOffset
- 拖动整个子片段时,搜索位置将跳回视频内的时间量。
defaultVideoFolder
- 打开新视频文件时的默认文件夹。
defaultImageFolder
- 打开新图像文件时的默认文件夹。
defaultAudioFolder
- 打开新音频文件时的默认文件夹。
defaultFontFolder
- 打开新字体文件时的默认文件夹。
defaultSubtitleFolder
- 打开新字幕*.srt文件时的默认文件夹。
loopNudgeLimit1
、loopNudgeLimit2
、loopSearchLower1
、loopSearchUpper1
、loopSearchLower2
、loopSearchUpper2
- "循环工具"菜单在扫描期间使用的最大和最小范围。
seekSpeedNormal
- 标准搜索速度。
seekSpeedFast
- 按住shift键时的搜索速度。
seekSpeedSlow
- 按住ctrl-shift键时的搜索速度。