一个基于 Node.js 和 FFmpeg 的视频合并 CLI 工具,支持为视频添加片头、片尾,以及批量处理多个视频文件。

Video Merger CLI (vvm)

一个基于 Node.js 和 FFmpeg 的视频合并 CLI 工具,支持为视频添加片头、片尾,以及批量处理多个视频文件。

功能特性

  • 视频合并:将两个视频合并为一个(支持开头或结尾位置)
  • 批量处理:批量处理目录下的所有视频文件
  • 灵活配置:支持命令行参数和配置文件两种方式
  • 素材管理:独立管理片头、片尾等素材
  • 规则匹配:支持按文件名模式应用不同的处理规则
  • 全局安装:可作为全局命令行工具使用

前置要求

  • Node.js >= 16.0.0
  • FFmpeg(必须已安装并添加到系统环境变量)

安装 FFmpeg

Windows:

# 使用 Chocolateychocoinstallffmpeg# 或从官网下载: https://ffmpeg.org/download.html

macOS:

brewinstallffmpeg

Linux:

sudoapt-getinstallffmpeg

安装

全局安装(推荐)

npminstall-g @yeah126139163/video-merger-cli

本地开发

# 克隆项目gitclone<repository-url>cdvvm# 安装依赖npminstall# 构建项目npmrun build# 链接到全局npmlink

快速开始

1. 合并两个视频

vvm merge video1.mp4 video2.mp4 output.mp4

video2.mp4合并到video1.mp4的结尾,输出为output.mp4

参数说明

  • <video1>: 第一个视频文件路径
  • <video2>: 第二个视频文件路径
  • [output]: 输出文件路径(默认:output.mp4)
  • -p, --position <position>: 合并位置,start 或 end(默认:end)

示例

# 合并到开头vvm merge video1.mp4 video2.mp4 output.mp4 -p start# 合并到结尾(默认)vvm merge video1.mp4 video2.mp4 output.mp4 -p end

2. 批量处理视频

vvm batch ./videos -i intro.mp4 -o outro.mp4 -d output

批量处理./videos目录下的所有视频,为每个视频添加片头intro.mp4和片尾outro.mp4,输出到output目录。

参数说明

  • [inputDir]: 输入目录路径
  • -i, --intro <path>: 片头视频路径
  • -o, --outro <path>: 片尾视频路径
  • -d, --dir <path>: 输出目录路径(默认:输入目录/output)
  • -c, --config <path>: 配置文件路径(使用配置文件时优先)

示例

# 只添加片头vvm batch ./videos -i intro.mp4 -d output# 只添加片尾vvm batch ./videos -o outro.mp4 -d output# 同时添加片头和片尾vvm batch ./videos -i intro.mp4 -o outro.mp4 -d output

3. 使用配置文件批量处理

# 创建配置文件模板vvm init -f my-config.json# 使用配置文件批量处理vvm batch -c my-config.json

配置文件说明

配置文件使用 JSON 格式,提供更灵活的批量处理规则。

目录结构建议

建议按照以下结构组织项目文件:

your-project/ ├── assets/ # 素材目录 │ ├── intro.mp4 # 片头视频 │ ├── outro.mp4 # 片尾视频 │ └── watermark.png # 水印图片(可选) ├── videos/ # 待处理的视频目录 │ ├── video1.mp4 │ └── video2.mp4 ├── output/ # 输出目录(自动创建) ├── vvm.config.json # 配置文件 └── README.md

配置文件结构

{"materials":{"intro":{"path":"./assets/intro.mp4","enabled":true},"outro":{"path":"./assets/outro.mp4","enabled":true},"watermark":{"path":"./assets/watermark.png","enabled":false}},"batchRules":[{"pattern":"*.mp4","applyIntro":true,"applyOutro":true,"outputDir":"./output"},{"pattern":"special_*.mp4","applyIntro":false,"applyOutro":true,"outputDir":"./output/special"}],"output":{"format":"mp4","codec":"libx264","quality":"high"}}

配置项说明

materials(素材配置)

  • intro: 片头视频

    • path: 片头文件路径
    • enabled: 是否启用(true/false)
  • outro: 片尾视频

    • path: 片尾文件路径
    • enabled: 是否启用(true/false)
  • watermark: 水印图片(预留功能,暂未实现)

    • path: 水印文件路径
    • enabled: 是否启用(true/false)
batchRules(批量规则)

数组形式,支持多个规则。每个规则包含:

  • pattern: 文件匹配模式(支持 glob 语法)

    • *.mp4: 匹配所有 mp4 文件
    • special_*.mp4: 匹配以 special_ 开头的 mp4 文件
    • **/*.mp4: 递归匹配所有子目录的 mp4 文件
  • applyIntro: 是否应用片头(true/false)

  • applyOutro: 是否应用片尾(true/false)

  • outputDir: 输出目录路径

output(输出配置)

  • format: 输出格式(如:mp4)
  • codec: 编码器(如:libx264)
  • quality: 质量设置(如:high, medium, low)

配置文件示例

示例 1:简单批量处理

{"materials":{"intro":{"path":"./assets/intro.mp4","enabled":true},"outro":{"path":"./assets/outro.mp4","enabled":true}},"batchRules":[{"pattern":"*.mp4","applyIntro":true,"applyOutro":true,"outputDir":"./output"}],"output":{"format":"mp4","codec":"libx264","quality":"high"}}

示例 2:多规则处理

{"materials":{"intro":{"path":"./assets/intro.mp4","enabled":true},"outro":{"path":"./assets/outro.mp4","enabled":true}},"batchRules":[{"pattern":"*.mp4","applyIntro":true,"applyOutro":true,"outputDir":"./output"},{"pattern":"preview_*.mp4","applyIntro":false,"applyOutro":false,"outputDir":"./output/preview"},{"pattern":"final_*.mp4","applyIntro":true,"applyOutro":true,"outputDir":"./output/final"}],"output":{"format":"mp4","codec":"libx264","quality":"high"}}

命令参考

vvm merge

合并两个视频文件。

vvm merge<video1><video2>[output][options]

选项

  • -p, --position <position>: 合并位置(start/end),默认:end

示例

vvm merge video1.mp4 video2.mp4 merged.mp4 vvm merge video1.mp4 video2.mp4 merged.mp4 -p start

vvm batch

批量处理目录下的视频文件。

vvm batch[inputDir][options]

选项

  • -i, --intro <path>: 片头视频路径
  • -o, --outro <path>: 片尾视频路径
  • -d, --dir <path>: 输出目录路径
  • -c, --config <path>: 配置文件路径

示例

vvm batch ./videos -i intro.mp4 -d output vvm batch ./videos -o outro.mp4 -d output vvm batch ./videos -i intro.mp4 -o outro.mp4 -d output vvm batch -c config.json

vvm init

创建配置文件模板。

vvm init[options]

选项

  • -f, --file <path>: 配置文件路径,默认:vvm.config.json

示例

vvm init vvm init -f my-config.json

vvm --help

显示帮助信息。

vvm --help vvm merge --help vvm batch --help

vvm --version

显示版本信息。

vvm --version

使用场景

场景 1:为视频添加统一片头

vvm batch ./my_videos -i ./assets/intro.mp4 -d ./output

场景 2:为视频添加片尾

vvm batch ./my_videos -o ./assets/outro.mp4 -d ./output

场景 3:为不同类型的视频应用不同规则

使用配置文件config.json

{"materials":{"intro":{"path":"./assets/intro.mp4","enabled":true},"outro":{"path":"./assets/outro.mp4","enabled":true}},"batchRules":[{"pattern":"tutorial_*.mp4","applyIntro":true,"applyOutro":true,"outputDir":"./output/tutorials"},{"pattern":"demo_*.mp4","applyIntro":true,"applyOutro":false,"outputDir":"./output/demos"}],"output":{"format":"mp4","codec":"libx264","quality":"high"}}

执行:

vvm batch -c config.json

场景 4:合并两个视频

vvm merge part1.mp4 part2.mp4 full_video.mp4

工作原理

  1. 视频合并:使用 FFmpeg 的concat功能将两个视频合并为一个
  2. 批量处理:使用 glob 模式匹配文件,逐个处理
  3. 片头/片尾:通过控制合并顺序实现(添加到开头或结尾)
  4. 临时文件:同时添加片头和片尾时,会创建临时文件进行中间处理
  5. 统一编码参数:在合并前,系统会自动将所有视频重新编码为统一的参数(分辨率、帧率、编码格式等),确保视频兼容性和播放质量
  6. 时间戳修复:使用-fflags +genpts-avoid_negative_ts参数修复视频时间戳问题,支持拖动进度条
  7. 输出文件命名:批量处理时,输出文件名与原文件名保持一致,仅扩展名统一为.mp4。例如:video1.mov处理后输出为video1.mp4

注意事项

  1. FFmpeg 要求:必须安装 FFmpeg 并添加到系统环境变量
  2. 文件路径:建议使用绝对路径,或确保相对路径正确
  3. 输出目录:输出目录不存在时会自动创建
  4. 文件格式:建议使用相同的视频格式和编码器
  5. 临时文件:处理完成后会自动删除临时文件
  6. 磁盘空间:确保有足够的磁盘空间存储输出文件
  7. 视频编码:系统会自动统一视频编码参数,处理时间可能较长
  8. 播放器兼容性:生成的视频支持所有主流播放器(VLC、Windows Media Player、PopPlayer 等)
  9. 进度条支持:生成的视频支持拖动进度条和时间跳转

故障排除

问题 1:提示 “FFmpeg not found”

解决方案

  • 检查 FFmpeg 是否已安装:ffmpeg -version
  • 确保 FFmpeg 已添加到系统环境变量

问题 2:合并后的视频质量下降

解决方案

  • 系统会自动统一编码参数,确保质量
  • 如果仍然不满意,可以调整源视频的质量设置

问题 3:批量处理速度慢

解决方案

  • 由于需要重新编码视频,处理时间较长是正常的
  • 减少同时处理的视频数量
  • 确保系统有足够的 CPU 和内存资源

问题 4:某些视频无法合并

解决方案

  • 系统会自动统一编码参数,大多数视频都能正常合并
  • 如果仍然失败,使用 FFprobe 检查视频信息:ffprobe -i video.mp4
  • 确保视频文件没有损坏

问题 5:合并后的视频无法拖动进度条

解决方案

  • 系统已自动修复时间戳问题,支持拖动进度条
  • 如果仍然有问题,请尝试使用 VLC 播放器
  • 确保视频文件已完全生成(检查文件大小是否正常)

问题 6:合并后的视频画面不显示

解决方案

  • 系统已统一编码参数,确保画面正常显示
  • 如果仍然看不到画面,请尝试使用 VLC 或 Windows Media Player
  • 检查视频文件是否完整(文件大小应该大于几 MB)

开发

项目结构

vvm/ ├── bin/ │ └── vvm # CLI 入口文件 ├── src/ │ ├── index.ts # 主入口 │ ├── merger.ts # 视频合并核心逻辑 │ └── batch.ts # 批量处理逻辑 ├── dist/ # 编译输出目录 ├── package.json ├── tsconfig.json └── README.md

开发命令

# 安装依赖npminstall# 开发模式npmrun dev# 构建项目npmrun build# 链接到全局npmlink

许可证

MIT

贡献

欢迎提交 Issue 和 Pull Request!

更新日志

1.1.0 (2026-01-07)

  • 📝 优化文档,修复包名不一致问题
  • 📝 添加作者信息到 package.json
  • 📝 补充项目目录结构说明
  • 📝 补充输出文件命名规则说明
  • 🎨 改进文档结构,提高可读性

1.0.0 (2026-01-07)

  • ✨ 初始版本发布
  • ✅ 支持视频合并功能
  • ✅ 支持批量处理
  • ✅ 支持配置文件
  • ✅ 支持片头/片尾独立配置
  • ✅ 支持规则匹配
  • 🔧 统一视频编码参数,确保合并兼容性
  • 🔧 修复视频时间戳问题,支持拖动进度条
  • 🔧 优化输出文件名,与原文件名保持一致
  • 🔧 使用 concat demuxer 提高合并效率

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1125845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[特殊字符]_网络IO性能优化:从TCP到HTTP的层层优化[20260107164433]

作为一名专注于网络性能优化的工程师&#xff0c;我在过去的项目中积累了丰富的网络IO优化经验。最近&#xff0c;我参与了一个对网络性能要求极高的项目——实时视频流平台。这个项目让我重新审视了Web框架在网络IO方面的表现。今天我要分享的是基于真实项目经验的网络IO性能优…

AI改图工具实操,冬装白底图快速生成高点击场景图

冬季服饰上新视觉太费劲儿&#xff01;外景拍摄又冷又贵还等档期&#xff0c;PS 抠图易虚边、光影违和显廉价。用AI指令改图&#xff0c;上传白底模特图&#xff0c;输指令就能换场景姿势&#xff0c;服饰细节1:1还原&#xff0c;十几秒出图可批量&#xff0c;商用无忧&#xf…

电影解说从0到1,要准备哪些工具?一套能跑通的实战清单

电影解说&#xff0c;本质上不是创意竞赛&#xff0c;而是一套高度标准化的内容生产流程。 你做不出来第一条&#xff0c;大多数时候不是能力问题&#xff0c;而是工具选错、流程没搭好。这篇内容不讲空泛的方法论&#xff0c;而是按一条已经被大量账号验证过的电影解说流水线&…

⚡_延迟优化实战:从毫秒到微秒的性能突破[20260107164942]

作为一名专注于系统性能优化的工程师&#xff0c;我在过去十年中一直致力于降低Web应用的延迟。最近&#xff0c;我参与了一个对延迟要求极其严格的项目——金融交易系统。这个系统要求99.9%的请求延迟必须低于10ms&#xff0c;这个要求让我重新审视了Web框架在延迟优化方面的潜…

SQLi-Labs搭建及通关

**在 Windows 电脑上安装 sqlmap 并搭建 SQLi-Labs&#xff0c;需要先配置Python 环境&#xff08;支撑 sqlmap&#xff09;和XAMPP 环境&#xff08;集成 ApacheMySQLPHP&#xff0c;支撑 SQLi-Labs&#xff09;。 一、工具下载&#xff1a; 1、Python&#xff08;sqlmap 依赖…

[特殊字符]_可扩展性架构设计:从单体到微服务的性能演进[20260107163924]

作为一名经历过多次系统架构演进的老兵&#xff0c;我深知可扩展性对Web应用的重要性。从单体架构到微服务&#xff0c;我见证了无数系统在扩展性上的成败。今天我要分享的是基于真实项目经验的Web框架可扩展性设计实战。 &#x1f4a1; 可扩展性的核心挑战 在系统架构演进过…

[特殊字符]_压力测试与性能调优的完整指南[20260107165451]

作为一名经历过无数次压力测试的工程师&#xff0c;我深知压力测试在性能调优中的重要性。压力测试不仅是验证系统性能的必要手段&#xff0c;更是发现性能瓶颈和优化方向的关键工具。今天我要分享的是基于真实项目经验的压力测试与性能调优完整指南。 &#x1f4a1; 压力测试…

一文讲清:主流大模型推理部署框架:vLLM、SGLang、TensorRT-LLM、ollama、XInference

本文系统性梳理当前主流的大模型推理部署框架&#xff0c;包括vLLM、SGLang、TensorRT-LLM、Ollama、XInference等。 随着大语言模型技术的迅猛演进&#xff0c;推理部署框架作为贯通模型能力与落地应用的核心枢纽&#xff0c;其战略价值正持续攀升。本文旨在对当前业界广泛采…

豆包本地文件问答下线后的打开方法

豆包本地文件问答下线后的打开方法关键词&#xff1a;豆包本地文件问答、豆包离线问答、本地知识库、doubao 本地模型、RTX AI PC、本地 AI 问答一次“功能下线”带来的意外发现前段时间在整理本地资料的时候&#xff0c;我发现豆包的「本地文件问答」功能页面多了一个提示&…

【光子AI 2026 企业级 Agent 架构指南】别再把 Skill 当 Tool:Agent Skills × MCP 企业级落地全指南(最新定义澄清 + 场景大全 + 选型决策树+安全工程清单)

文章目录 拒绝“手搓”Agent:2026企业级架构指南——彻底搞懂 Agent Skills 与 MCP 的边界与选型 🚀 引言:AI 开发的“草莽时代”结束了 第一部分:正本清源——最新官方定义解读 1. Agent Skills:让 Agent 变“专家”的文件夹 2. MCP:AI 应用的“USB-C 接口” 第二部分:…

格雷希尔:G15F-KFYK-FD39 定制款快速密封连接器,适配自动化产线,赋能电驱动通讯接口的自动化密封测试

某新能源设备商联系到我们&#xff0c;为其电驱动上的通讯接口采购一批快速密封连接器用于气密性测试&#xff0c;该生产线为自动化产线&#xff0c;对连接器的适配性、稳走性、耐用性均提出了极高要求。格雷希尔定制款 G15F-KFYK-FD39 自动化连接器格雷希尔定制款 G15F-KFYK-F…

如何判断光耦 PC817 的好坏

判断光耦 PC817 的好坏对于开关电源电路板的维修非常重要&#xff1a;1. 光耦的功能隔离信号&#xff1a;PC817 可以有效隔离高压输入和低压控制电路&#xff0c;保护电路元件和人员安全。信号传输&#xff1a;光耦用于实现数据的可靠传输&#xff0c;特别是在噪声较大的环境中…

Go 语言的“舒适区”:为何在这张“鄙视链”金字塔中,Go 仅次于 C?

大家好&#xff0c;我是Tony Bai。最近&#xff0c;一张“编程语言分级图”在技术社区引发大家热议。它没有参考 TIOBE 排名&#xff0c;也不看 GitHub Star 数&#xff0c;而是完全基于一种简单粗暴的价值观&#xff1a;谁最不折腾人&#xff1f;在这张金字塔中&#xff0c;C …

大模型AI学习路线:从提示词工程到模型部署的全栈教程,90天变身高薪工程师

文章提供四阶段大模型学习路径&#xff1a;初阶应用(10天)掌握提示词工程&#xff0c;高阶应用(30天)学习RAG系统&#xff0c;模型训练(30天)实现微调&#xff0c;商业闭环(20天)完成部署。涵盖大模型基础知识、智能体开发、私有化部署等核心技能&#xff0c;提供实战项目和工具…

什么是企业机器人流程自动化RPA

企业RPA (Robotic Process Automation) 中文名&#xff1a;机器人流程自动化 本质&#xff1a;一种模拟人在计算机上执行规则明确、重复性高工作的软件“数字员工”。---一、核心功能&#xff08;它能做什么&#xff1f;&#xff09;它像一位不知疲倦、零错误的白领机器人&…

【分布式系统】02 现实世界的法则 —— 分布式系统的定义、模型与核心挑战

大家好&#xff0c;我是Tony Bai。欢迎来到《分布式系统&#xff1a;原理、哲学与实战》微专栏的第二讲。在上一讲中&#xff0c;我们告别了秩序井然的单体城堡&#xff0c;决定踏入广阔的分布式联邦。但在正式探索之前&#xff0c;我们必须回答一个根本问题&#xff1a;我们所…

分区操作系统、容器化、虚拟机的概念

分区操作系统&#xff08;通常指分时操作系统&#xff09;与 Docker 是完全不同层面的技术&#xff0c;分别解决不同的问题。简单来说&#xff1a; 分区操作系统&#xff1a;是一种操作系统类型&#xff0c;管理单个硬件上的多个用户/任务。Docker&#xff1a;是一个应用容器…

2025年广州市“人工智能+”典型案例集|附118页PDF文件下载

《广州市“人工智能”典型案例集》展示了AI在各领域的应用。关键点包括&#xff1a;AI制造&#xff1a;智能座舱、多模态大模型应用、PCB项目等&#xff0c;提升效率与精度。AI安全&#xff1a;智能机器狗、安全大模型、AI安管一体机等&#xff0c;保障公共安全。AI教育&#x…

FastAPI + LangGraph + Multi-Agent 完整工程源代码实现:含真实目录结构, Gateway / Agent / Tool / Memory 分层,完整源代码实现

FastAPI + LangGraph + Multi-Agent 完整工程源代码实现:含真实目录结构, Gateway / Agent / Tool / Memory 分层,完整源代码实现 FastAPI + LangGraph + Multi-Agent 完整工程源代码实现 这一章给出一个“能跑起来”的最小完整工程,把你要的 Gateway / Agent / Tool / M…

ArkUI-X 6.0 跨平台框架能否取代 Flutter?

大家好&#xff0c;我是老刘 最近ArkUI-X 6.0.0 Release 版本正式发布了。 很多兄弟跑来问我&#xff1a; “老刘&#xff0c;ArkUI 现在的跨平台能力能不能取代 Flutter&#xff1f;” “我是不是该去学 ArkTS 了&#xff1f;” 先抛出我的核心结论&#xff0c;别嫌扎心&…