ffmpeg.wasm 合并 TS 视频教程:浏览器端视频处理实践

简介: 一种基于ffmpeg.wasm的浏览器端TS视频合并方案,通过将FFmpeg编译为WebAssembly,实现了在浏览器本地直接处理TS文件的功能。文章详细阐述了实现思路:加载wasm核心、上传TS文件、生成合并列表、执行FFmpeg命令并导出MP4。

前言

在做视频处理相关工具时,经常会遇到一个很常见的需求:

把一堆 .ts 分片视频合并成一个 MP4 文件。

这种情况在很多场景都会出现,例如:

  • HLS 视频流下载
  • 课程平台视频缓存
  • 直播流录制
  • M3U8 视频下载

通常你会得到一堆文件:

0001.ts
0002.ts
0003.ts
...

如果你用过视频处理工具,大概率知道这件事可以用 FFmpeg 一条命令完成。但对于大多数用户来说,命令行始终是个门槛。

于是我尝试用 ffmpeg.wasm 做了一个浏览器端 TS 合并工具,让整个流程变成:

拖入 TS 文件 → 点击合并 → 下载 MP4

不需要安装软件,也不需要上传视频到服务器。


一、为什么 TS 文件经常需要合并

TS(Transport Stream)是 MPEG‑TS 格式,常见于 HTTP Live Streaming(HLS) 视频流。

HLS 的工作方式是:

  1. 视频被切成很多 .ts 小片段
  2. .m3u8 文件记录播放顺序
  3. 播放器按顺序加载这些 TS

例如:

index.m3u8
segment0001.ts
segment0002.ts
segment0003.ts

如果你通过工具下载视频,往往就只会得到这些 .ts 文件。这时候最常见的需求就是:

把这些 TS 文件重新拼成一个完整视频。


二、传统解决方案的问题

传统做法一般有三种。

1 使用 FFmpeg 命令

最标准的方法是:

ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4

但问题是:

  • 要安装 FFmpeg
  • 要写文件列表
  • 要使用命令行

对于非技术用户来说并不友好。


2 使用桌面软件

例如:

  • 格式工厂
  • 剪映
  • Premiere

但这些工具存在几个问题:

  • 安装体积大
  • 打开速度慢
  • 操作复杂

3 使用在线网站

很多在线工具要求:

  • 上传视频到服务器

但 TS 文件往往:

  • 几百 MB
  • 几 GB

上传速度慢,而且很多人也不希望视频离开本地设备。


三、ffmpeg.wasm:让浏览器运行 FFmpeg

为了解决这个问题,我选择了 ffmpeg.wasm。简单来说,它做了一件很有意思的事情:

把 FFmpeg 编译成 WebAssembly。

也就是说:

浏览器可以直接运行 FFmpeg

整个流程变成:

浏览器
   ↓
WebAssembly
   ↓
FFmpeg
   ↓
本地视频处理

优点非常明显:

  • 不需要安装软件
  • 不需要上传视频
  • 数据完全在本地处理
  • 跨平台(Windows / Mac / Linux / 手机)

四、实现一个 TS 在线合并工具的思路

我在实现这个工具时,整体流程大致是这样的。

第一步:加载 FFmpeg wasm

浏览器启动时加载 FFmpeg wasm 核心。

示例代码:

import {
    createFFmpeg } from "@ffmpeg/ffmpeg"

const ffmpeg = createFFmpeg({
   
  log: true
})

await ffmpeg.load()

第一次加载会稍慢,因为需要下载 wasm 文件。

第二步:上传 TS 文件

用户可以:

  • 拖拽文件
  • 或选择多个 TS 文件

示例:

for (const file of files) {
   
  ffmpeg.FS("writeFile", file.name, await fetchFile(file))
}

这些文件会被写入 FFmpeg 的虚拟文件系统

ts-merge

第三步:生成 concat 列表

FFmpeg 合并 TS 的标准方法是使用 concat demuxer

例如:

file '0001.ts'
file '0002.ts'
file '0003.ts'

浏览器中动态生成:

let list = files
  .map(f => `file '${
     f.name}'`)
  .join("\n")

ffmpeg.FS("writeFile", "list.txt", list)

第四步:执行合并命令

核心命令:

ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4

在 wasm 中运行:

await ffmpeg.run(
  "-f","concat",
  "-safe","0",
  "-i","list.txt",
  "-c","copy",
  "output.mp4"
)

这里的关键点是:

-c copy

表示:

不重新编码,只做封装转换

因此速度非常快。

process-ts

第五步:导出 MP4 文件

最后从虚拟文件系统读取结果:

const data = ffmpeg.FS("readFile", "output.mp4")

然后触发浏览器下载。

process-finish

五、最终实现效果

整个用户体验变成:

1️⃣ 打开网页
2️⃣ 拖入 TS 文件
3️⃣ 点击合并
4️⃣ 下载 MP4

整个过程:

  • 不上传视频
  • 不安装软件
  • 不需要命令行

浏览器直接完成视频处理。

如果你想体验类似的工具,可以参考这个在线 TS 合并工具:

https://ezwebtools.net/ts-merge

它的交互流程和设计思路与我实现的版本比较接近。

六、浏览器端视频处理的优势

使用 ffmpeg.wasm 做视频工具,其实有几个非常明显的优势。

1 隐私安全

视频始终在本地处理:

  • 不上传服务器
  • 不经过第三方存储

2 几乎零运维成本

服务器只需要:

  • 静态文件
  • CDN

不需要:

  • GPU
  • 编码服务器
  • 视频存储

3 跨平台

只要有浏览器:

  • Windows
  • macOS
  • Linux
  • Android
  • iOS

都可以使用。

七、开发过程中的一些坑

在实现这个工具时,也遇到了一些实际问题。

1 浏览器内存限制

TS 文件如果:

  • 几 GB

浏览器可能会出现内存压力。


2 wasm 首次加载较慢

首次加载 ffmpeg.wasm:

  • 需要下载十几 MB

可以通过:

  • CDN
  • 缓存

优化体验。

八、总结

以前做视频处理:

需要安装软件、写命令、配置环境。

现在通过 ffmpeg.wasm,浏览器本身就可以成为一个轻量级的视频处理平台。

像 TS 合并这种常见需求,其实只需要:

  • 文件上传
  • concat 列表
  • FFmpeg 执行

三步就能完成。

而用户体验也从:

复杂命令行操作

变成:

拖文件 → 点击 → 下载

这也是 WebAssembly 在前端工具领域一个非常典型的应用场景。

相关文章
|
1天前
|
人工智能 弹性计算 自然语言处理
阿里云怎样部署OpenClaw?2026年保姆级攻略来了!
OpenClaw怎样部署?阿里云推出了OpenClaw快速部署方案,零基础也能轻松上手,仅需三步即可拥有专属AI助理!
199 8
|
3天前
|
人工智能 缓存 自然语言处理
大模型应用:大模型的词表扩展:中文生僻字、专业术语的词嵌入适配方案.42
本文详解大模型中文词表扩展技术,聚焦生僻字(如“𪚥”“龘”)与专业术语(如“LoRA微调”“CAR-T细胞疗法”)的识别难题。通过词表扩容、词嵌入适配与轻量级增量训练,无需重训模型,即可提升语义理解精度,支持古籍、医疗、AI等垂直场景落地。
69 10
|
2月前
|
人工智能 安全 调度
AI工程vs传统工程 —「道法术」中的变与不变
本文从“道、法、术”三个层面对比AI工程与传统软件工程的异同,指出AI工程并非推倒重来,而是在传统工程坚实基础上,为应对大模型带来的不确定性(如概率性输出、幻觉、高延迟等)所进行的架构升级:在“道”上,从追求绝对正确转向管理概率预期;在“法”上,延续分层解耦、高可用等原则,但建模重心转向上下文工程与不确定性边界控制;在“术”上,融合传统工程基本功与AI新工具(如Context Engineering、轨迹可视化、多维评估体系),最终以确定性架构驾驭不确定性智能,实现可靠价值交付。
465 41
AI工程vs传统工程 —「道法术」中的变与不变
|
1天前
|
人工智能 安全 小程序
阿里云怎样部署CoPaw?2026年保姆级攻略来了!
阿里云怎样部署CoPaw?本文将为大家提供一份2026年最新的阿里云部署CoPaw保姆级攻略,零基础也能快速上手,轻松打造专属AI助理!
485 12
|
4天前
|
存储 Web App开发 人工智能
喂饭级教学:OpenClaw阿里云/本地部署+Obsidian skill 自动化构建可复用知识库
很多人用Obsidian做知识管理时,都会陷入“信息囤积”的困境:微信、网页、文档里的知识点被零散收录,看似形成了知识库,实则只是“从一片海转到一个湖里”,后续检索困难、无法复用,还要手动去重、整理结构,耗费大量时间。而OpenClaw与Obsidian的组合,能完美解决这两个核心痛点——让信息自动流入Obsidian,同时按统一结构归档,实现“收集-整理-复用”全流程自动化。
352 3
|
11天前
|
JSON 运维 监控
邮件路由配置缺陷与域名伪造攻击的防御研究
本文剖析2026年新型域名伪造钓鱼攻击:攻击者利用邮件多跳转发、第三方中继等复杂路由场景下的SPF/DKIM/DMARC配置缺陷,绕过传统验证。通过技术复现与代码审计,揭示身份验证上下文丢失根源,并提出涵盖全路径梳理、强制DMARC、行为检测与零信任流程的纵深防御框架。(239字)
118 22
|
2月前
|
人工智能 关系型数据库 Serverless
2 天,用函数计算 AgentRun 爆改一副赛博朋克眼镜
2 天将吃灰的 Meta 眼镜改造成“交警Copilot”:通过阿里云函数计算 AgentRun 实现端-管-云协同,利用 Prompt 驱动交通规则判断,结合 OCR 与数据库查询,打造可动态扩展的智能执法原型,展现 Agent 架构在真实场景中的灵活与高效。
376 45
|
2天前
|
人工智能 JSON 自然语言处理
VTJ.PRO 架构首度揭秘:40 + 工具加持,AI 如何从 “嘴强王者” 变身 “代码执行者”?
VTJ.PRO采用“Agent+Skills”智能体架构,让AI从聊天机器人升级为能主动思考、调用40+开发技能的“开发搭档”。通过分层管道实现多模态输入理解、增量代码更新、流式推理与多模型协同决策,提升效率200%,准确率达98.7%。
57 20
|
7天前
|
存储 机器学习/深度学习 人工智能
大模型应用:通俗理解大模型量化:从概念到实践的原理流程完整拆解.38
大模型量化是通过降低参数精度(如FP32→INT8),在几乎不损精度的前提下,显著压缩模型体积、提升推理速度、降低硬件门槛与功耗的关键技术,使大模型得以落地手机、PC等端侧设备。
184 16
|
2月前
|
人工智能 自然语言处理 运维
阿里开源 Assistant Agent,助力企业快速构建答疑、诊断智能助手
一款快速构建智能客服、诊断助手、运维助手、AIOps 的开源框架。
861 62