← 返回信息流
AI 资讯Hacker News·2 小时前

Show HN: 基于WASM的FFmpeg WebCLI实现离线浏览器处理

原标题:Show HN: FFmpeg WebCLI – Full FFmpeg in Browser, Offline PWA, No Uploads(WASM)

速览

该项目展示了如何在浏览器中通过WASM技术运行完整的FFmpeg命令行工具。它作为渐进式Web应用(PWA)支持离线使用,用户无需将媒体文件上传至服务器即可在本地完成处理。这一技术突破为前端媒体处理提供了高效、隐私安全的解决方案。

AI 深度解读

Show HN: FFmpeg WebCLI – 浏览器内全功能 FFmpeg 离线 PWA 深度解读

背景

在传统的视频处理工作流中,用户通常面临两种选择:一是使用功能强大但本地安装复杂、资源占用高的桌面软件(如 Adobe Premiere 或本地部署的 FFmpeg);二是依赖基于云端的在线视频编辑器,这往往意味着需要将视频上传至服务器,存在隐私泄露风险、上传带宽瓶颈以及服务器处理延迟。

随着 WebAssembly (WASM) 技术的成熟,浏览器端运行高性能二进制代码成为可能。FFmpeg WebCLI 正是在这一技术背景下诞生的开源项目。它利用 ffmpeg.wasm 库,将完整的 FFmpeg 核心功能移植到浏览器环境中。该项目旨在消除对后端服务器的依赖,实现“零上传、零服务器”的本地化视频处理体验,同时通过渐进式 Web 应用 (PWA) 技术,让用户能够离线使用并像原生应用一样安装。

核心内容

FFmpeg WebCLI 是一个基于浏览器的视频编辑器,其核心架构完全运行在用户的本地设备上。所有视频处理逻辑均通过 WebAssembly 在浏览器中执行,无需将数据发送至任何远程服务器。以下是该工具的核心功能模块详解:

1. 基础特性与隐私保护

  • 无服务器上传:所有视频处理均在用户设备本地完成,确保数据隐私,实现零数据收集。
  • 离线优先 (PWA):首次使用后,应用可完全离线运行,并支持安装为类似原生应用的 PWA,无需网络连接即可使用。
  • 屏幕唤醒锁 (Screen Wake Lock):在处理视频期间,防止设备屏幕自动熄灭,确保操作连续性。
  • 高性能架构:利用 Web Workers 进行后台处理,保持界面响应流畅。

2. 格式支持与转换

支持广泛的媒体格式,包括 MP4、WebM、MKV、MOV、AVI、GIF、MP3、AAC、WAV、OGG、FLAC、JPG 和 PNG。

  • GIF 制作:支持设置帧率和输出宽度,高度自动缩放以保持比例。采用双遍调色板生成技术,以提供最佳色彩质量。
  • 容器与编码转换
    • MP4:H.264 + AAC,兼容性最广。
    • WebM:VP9 + Opus,针对网络优化的开放格式,在同等质量下比 MP4 小约 45%。
    • MKV/MOV:H.264 + AAC 的替代容器格式。
    • AVI:用于遗留系统兼容性。

3. 压缩与优化

  • 无损/有损压缩:在不改变分辨率的情况下减小文件体积。
  • CRF 滑块:用户可通过 CRF (Constant Rate Factor) 滑块调节质量(18 为近无损,51 为最大压缩)。
  • 预设调节:提供从 ultrafastveryslow 的编码预设,用户可在编码速度与压缩效率之间进行权衡。
  • 实时预览:调整设置时,实时显示输出文件大小估算值。

4. 剪辑与裁剪

  • 时间轴裁剪:通过时间轴滑块设定起止点。裁剪操作可叠加在其他操作之上(例如:先裁剪片段,再压缩,最后转为 GIF)。
  • 空间裁剪:可指定 X/Y 偏移量和宽高进行画面裁剪,数值自动从源视频填充,支持直接拖拽调整。
  • 分辨率调整:在单次处理中同时调整输出尺寸并压缩。宽高自动填充,留空则保持纵横比。结合 scale 滤镜与基于 CRF 的 H.264 编码。

5. 音频处理

  • 音频提取:将视频中的音轨提取为独立文件,支持 MP3、AAC、WAV、OGG Vorbis 和 FLAC。
  • 静音处理:完全剥离音频流,适用于无声循环视频或社交媒体片段。
  • 音量调节:通过单一滑块设置音量倍数(0 为静音,1.0 为原声,最高 4 倍)。视频流以流拷贝方式处理,无质量损失。
  • 变速播放:支持 0.25× 至 4× 的变速。自动调整视频 PTS 和 atempo 音频滤镜链,以保留音频音调和同步。当倍率超出单滤镜支持的 0.5–2.0 范围时,自动串联多个 atempo 阶段。

6. 视觉效果与滤镜

  • 方向校正:支持 90° 顺时针/逆时针旋转、180° 旋转、水平/垂直翻转及双轴翻转,无需重新上传。
  • 淡入淡出:为视频添加平滑的淡入或淡出效果,可独立设置持续时间,滤镜在裁剪后应用。
  • 图像均衡 (eq):通过三个滑块精细调节亮度 (-1 → 1)、对比度 (0 → 2) 和饱和度 (0 → 3)。提供“灰度”复选框,一键锁定饱和度为零,输出黑白画面。
  • 元数据清除:在重新编码前移除所有嵌入的元数据(如 GPS 坐标、相机型号、创建时间等),使用 -map_metadata -1 参数。

7. 高级合成与特效

  • 字幕嵌入:支持将 .srt.vtt.ass 字幕文件作为软字幕轨道 mux 进视频。
    • MP4:字幕流编码为 mov_text
    • MKV:原生复制字幕流,保留 ASS/SSA 样式。
    • 注:硬烧录字幕需要启用 libass 的 FFmpeg 构建版本,标准 WASM 核心中不可用。
  • 视频循环:将视频在单个输出文件中连续播放 N 次 (2–50 次)。使用 -stream_loop 进行流拷贝,无重新编码开销,文件大小按比例增加。此操作不适用裁剪。
  • Logo/水印叠加:将图片(推荐带透明度的 PNG)叠加到每一帧。支持选择位置(四角或中心)和相对于视频宽度的百分比宽度(默认 15%)。使用 overlay 滤镜配合 scale 预处理,视频重新编码,音频流拷贝。
  • 背景音乐混合:将第二个音频文件作为背景音乐混合。支持调节原声和音乐音量(0–2)。若音乐短于视频,自动通过 -stream_loop -1 循环。使用 amix 滤镜混合,时长匹配视频。
  • 视频拼接 (Concat):在加载的文件后追加第二个视频片段。使用 concat 滤镜配合 H.264/AAC 重新编码,自动处理不同分辨率、帧率和编码格式的差异。裁剪仅适用于第一个片段。
  • 分屏布局:将两个视频并排或上下排列。
    • 水平 (hstack):左右排列,指定目标高度。
    • 垂直 (vstack):上下排列,指定目标宽度。
    • 音频可选择取自第一个、第二个或无音频。重新编码为 H.264/AAC,适用于对比视频或反应视频。
  • 画中画 (Picture-in-Picture):在主视频上方叠加一个小窗口视频。支持选择位置、控制叠加视频宽度百分比(默认 30%)。若叠加视频较短则自动循环。保留主视频音频,两者均重新编码为 H.264/AAC。

8. 开发者与高级功能

  • 元数据查看:加载文件时立即显示文件名、大小、时长、分辨率、预估比特率和 MIME 类型。点击“Process Video”可进行深度扫描,打印完整的编解码器、流、像素格式和容器详情。
  • 原始 FFmpeg 命令行访问:提供完整的命令行接口。用户可直接输入任何 FFmpeg 参数,系统会自动将其插入到 -i input 之后和输出文件名之前。
查看原文 →github.com