FFmpegFreeUI 文档

本文档包含了从新手入门到插件开发的全部内容,请仔细阅读。

软件介绍

FFmpegFreeUI(简称 3FUI)是一款运行于 Windows 平台的专业 FFmpeg 图形用户界面,基于 .NET 10 框架和纯 WinForm 技术,并结合 SunnyUI 与自绘控件打造了专业高效的暗黑风格。我们致力于打破当前转码软件市场中普遍存在的臃肿捆绑、广告水印、功能限制、定价混乱及设计业余的局面。

3FUI 永久保持纯净、免费与自由,并及时收录最新的编码器与参数标准,是您追求纯粹与专业的理想之选。

核心理念

3FUI 的核心目标是成为一款面向轻度专业用户的参数化转码工具,它允许用户通过图形界面直观地调整全面的通用参数,从而轻松完成视频压制与格式转换。请注意,3FUI 是一款纯粹的参数驱动型软件,**不提供“一键式”傻瓜方案**。如果您对视频技术参数缺乏基本概念,强烈建议您首先阅读本文的“新手入门”章节。

主要特性

  • 基于预设: 轻松创建、管理并与他人分享转码方案。
  • 信息透明: 界面直观标示参数名称,并精确显示 FFmpeg 输出信息,便于学习与调试。
  • 任务管理: 实时计算剩余时间、预估文件大小、支持任务暂停,并可自动并发执行多达10个任务。
  • 纯净无痕: 不会在输出文件中写入任何软件信息,不修改注册表,不在系统任何位置产生垃圾文件(除不可控的崩溃转储外),且绝不收集任何用户数据。
  • 插件扩展: 支持通过插件(VB/C#/WPF)扩展软件功能,并能与编码队列无缝集成。

Linux & macOS 支持

理论上,通过 Wine 或 Steam 自带的 Proton 转译层,可以在 macOS 和 Linux 系统上直接运行本软件。由于开发者精力与资源所限,我们无法提供官方技术支持,欢迎您加入社区与其他用户共同探讨跨平台使用经验。

下载版本说明

由于插件系统的实现机制,软件需要保留一些 DLL 文件以确保其功能稳定。虽然主程序 EXE 文件可以单独运行,但这将导致插件功能完全失效。

  • ReadyToRun: 推荐版本,性能更佳。
  • SelfContained: 备用版本,如果 ReadyToRun 无法在您的设备上运行,请尝试此版本。
  • Debug: 调试版,供开发者或有特殊需求的用户使用。
  • PluginExample: 示例插件。请在程序目录下创建 Plugin 文件夹,将插件(.3fui.dll 文件)放入其中后重启软件即可加载。

常见问题 (FAQ)

为什么不提供需要安装运行库的最小体积版本?

要求用户安装一个尚未正式发布的 .NET 预览版运行库,会带来不佳的用户体验和后续的维护难题。当未来 Windows 系统原生集成该运行库后,我们会考虑发布最小体积版。

文件为什么这么大?

软件本体仅有数百KB,体积主要源于我们选择自带完整的 .NET 运行时,以确保开箱即用。如果您希望获得最小体积,可以自行修改项目设置并重新编译。

所有版本都无法运行怎么办?

  1. 确保您的操作系统是 Windows 10 (1809) 或更高版本。
  2. 检查 Windows 更新,确保 .NET Framework 3.5 和 4.8 的累积更新已安装。
  3. 检查杀毒软件或安全防护软件是否对程序进行了拦截。
  4. 尝试从 GitHub 克隆仓库并自行编译。
  5. 如果以上方法均无效,可能需要考虑修复或重装您的操作系统。

新手入门指南

第一步:准备 FFmpeg

  1. 前往 FFmpeg 官网下载最新的 Windows 发行版。推荐来自 gyan.devBtbN 的版本。
  2. 请下载 fullgpl 的版本(例如 ffmpeg-git-full.7z),以确保包含如 libx264 在内的常用编码器。
  3. 将压缩包中的 ffmpeg.exe 文件解压。
  4. ffmpeg.exe 放置于与 FFmpegFreeUI.exe 相同的文件夹内,或将其所在路径添加至系统环境变量(推荐)。

完成以上步骤后,即可开始使用 3FUI。

第二步:学习基础知识

如果您对视频参数完全不了解,强烈建议您观看以下科普内容,建立基础概念:

新手必读: 知乎文章 《适用于小白的视频压缩教学》 包含了大量测试总结与设置教学,是进一步学习的绝佳材料。

编码器详解

视频编码器

类别 提供的编码器 备注
复制流 copy 不进行重新编码,直接复制原始视频流。
H.266/VVC libx266, libvvenc 技术前沿,但目前不成熟,软解性能消耗巨大且缺乏硬件加速与播放器支持。
AV1 libaom-av1, libsvtav1, av1_nvenc, av1_qsv, av1_amf 新一代高效编码。无硬件加速时,推荐使用 libsvtav1 软编码。
H.265/HEVC libx265, hevc_nvenc, hevc_qsv, hevc_amf 当下兼顾画质与体积的理想选择。
H.264/AVC libx264, h264_nvenc, h264_qsv, h264_amf 兼容性极佳,通过精细调参依旧表现出色,但已接近技术瓶颈。
ProRes prores_ks, prores_aw 专业级中间编码,Windows/Linux 使用 prores_ks
FFV1 ffv1 数学无损编码,适用于博物馆级归档,不适合个人存储,可作为高质量编辑的中转格式。

硬件加速标识

标识 适用硬件
lib... CPU (软件编码)
nvenc NVIDIA 显卡
amf AMD 显卡
qsv Intel 显卡

关于 NVIDIA 显卡硬件编解码能力的详细矩阵,请参考 NVIDIA 官方页面

核心参数概念

比特率控制

方式 说明
恒定质量 (CRF / CQ / QP) 存储首选。 您设定一个质量目标(如 CRF=23),编码器会动态调整比特率以在视频的每一部分都维持这个质量水平。软编码通常使用 -crf,硬件加速使用 -cq-qp
动态码率 (VBR) 硬件加速的常用选项,与恒定质量类似。VBR HQ 是其高质量版本。
恒定速率 (CBR) 强制在所有时间点都使用固定的比特率,通常用于流媒体直播场景,不适合本地存储。

质量设定 (-crf / -cq / -qp)

这是控制画质与体积最关键的参数。数值越 **低**,画质越 **高**,体积越 **大**。反之,数值越高,画质越低,体积越小。

  • 通用默认值通常在 23 左右。
  • 视觉无损的参考值约在 16-18
  • 请勿将此值设为 0,除非您确切知道其代表的无损压缩含义。
核心原则: 压制的目的是在可接受的画质下尽可能缩小体积。因此,请优先调整“质量”值,而不是直接设定“比特率”。编码没有“万能通用”的完美方案,编码时间、画面质量、文件体积、解码性能,您必须在其中做出取舍。唯一的“作业”就是根据您的需求,从一个参考值开始,不断尝试并找到最适合您的平衡点。

插件开发指南

通过插件系统,您可以为 3FUI 扩展各种自定义功能。插件开发采用反射机制,您无需引用 3FUI 主程序即可独立开发。

环境准备

  1. 安装 Visual Studio 2022 (预览版),并勾选“.NET 桌面开发”工作负载。
  2. 手动下载并安装 .NET 10 SDK (预览版)

开发流程

  1. 在 VS2022 中创建一个新的“Windows 窗体应用”项目 (VB/C# 或 WPF),目标框架选择 .NET 10。
  2. 创建一个名为 Entry 的公开静态类 (public static class)。
  3. 在该类中,创建一个名为 Entry 的公开静态方法 (public static void),此方法是插件的初始化入口。
  4. 根据需要在 Entry 类中实现以下接口方法,以与 3FUI 交互。

接口1: 添加自定义 WinForm 界面


// 定义属性,用于接收宿主(3FUI)的回调
public static Action HostCall_AddCustomWinformPanel { get; set; }

// 定义方法,供宿主调用以设置回调
public static void SetHost_AddCustomWinformPanel(object action)
{
    HostCall_AddCustomWinformPanel = (Action)action;
}

// 示例:在插件初始化时,调用回调将自己的控件添加到主界面
public static void Entry()
{
    HostCall_AddCustomWinformPanel?.Invoke("我的插件", new MyCustomControl());
}
                    

接口2: 将任务添加到编码队列


// 定义属性
public static Action HostCall_AddMissionToQueue { get; set; }

// 定义设置方法
public static void SetHost_AddMissionToQueue(object action)
{
    HostCall_AddMissionToQueue = (Action)action;
}

// 示例:调用回调添加一个新任务
public void AddNewTask()
{
    string ffmpeg_params = "-i \"input.mkv\" -c:v libx265 -crf 23 \"output.mkv\"";
    string display_name = "My Task: input.mkv";
    string output_path = "C:\\path\\to\\output.mkv";
    
    HostCall_AddMissionToQueue?.Invoke(ffmpeg_params, display_name, output_path);
}
                    

发布插件

项目生成后,找到与您的项目同名的 .dll 文件,将其后缀修改为 .3fui.dll。这个文件就是您要发布的插件。将其放入 3FUI 的 Plugin 文件夹内即可。

反馈与支持

如需反馈问题或寻求帮助,请加入我们的交流群:1050613952。请在群内提供完整的调试信息截图(包括命令行),以便我们快速定位问题。

请注意: Bilibili 平台的评论和私信并非官方的问题反馈渠道,信息很容易被遗漏。