目录

前端多媒体处理工具ffmpeg的使用

前端多媒体处理工具——ffmpeg的使用

写在前面

在前端领域,FFmpeg 是一个非常有用的工具,它提供了多种媒体格式的封装和解封装,包括多种音视频编码、多种协议的流媒体、多种色彩格式转换、多种采样率转换、多种码率切换等。可以在多种操作系统安装使用。

安装

在网站根据对应电脑系统下载对应版本即可,windows下载下图版本。

https://i-blog.csdnimg.cn/blog_migrate/b7262cb7a8395f3003519007cb3e910c.png

下载完成后选择合适的路径存放此工具包,根据对应路径配置环境变量:

我是将工具包放在下图目录:

https://i-blog.csdnimg.cn/blog_migrate/b10fb052af9e17cfae70ef01b8ef0f77.png

因此环境变量是这样的:

https://i-blog.csdnimg.cn/blog_migrate/93362142f968169004dc3e70635e8ac9.png

使用控制台输入 ffmpeg -version ,如果得到类似下图结果则表明配置成功:

https://i-blog.csdnimg.cn/blog_migrate/fe80a430cc712b830443134f86b12fef.png

配置完成后, 在本篇文件主要介绍以下几个功能

  1. 基本格式转换 avi mp4 gif 等
  2. 提取视频中的音频
  3. 裁剪视频 或 音频
  4. 删除水印
  5. 添加水印

1. 基本格式转换

https://i-blog.csdnimg.cn/blog_migrate/3c193ff239e5e30e2e70fd9a8c1deead.png

这里有一段名为 tiktok.mp4 的文件,我们通过使用FFmpeg将它转换为 gif 格式:

用法: ffmpeg -i 视频文件名 新格式视频文件名

const { execSync, exec } = require("child_process");

// 1. 基本格式转换 avi mp4 gif 等
execSync("ffmpeg -i tiktok.mp4 test.gif", { stdio: "inherit" });

生成的gif结果如下:

https://i-blog.csdnimg.cn/blog_migrate/5fd79818998060013765f749c69d8cdf.png

当然其他格式也同样可以,如avi、MP4等都可互相转换。

2. 提取视频中音频

用法: ffmpeg -i 视频文件名 音频文件名

const { execSync, exec } = require("child_process");
// 2. 提取视频中音频
execSync("ffmpeg -i tiktok.mp4 test.mp3", { stdio: "inherit" })

结果如下:

https://i-blog.csdnimg.cn/blog_migrate/83bb9a0bddc177c35687d8b228e6db06.png

3. 裁剪视频或音频

用法: ffmpeg -ss 开始时间 -to 结束时间 -i 视频/音频文件名 生成的视频/音频文件名

参数 -ss :set frame size,表示设置帧长

const { execSync, exec } = require("child_process");

// 3. 裁剪视频 或 音频 -ss(set frame size设置帧长) ? -to ? ...
execSync("ffmpeg -ss 5 -to 10 -i tiktok.mp4 test2.mp3", { stdio: "inherit" });

结果如下:

https://i-blog.csdnimg.cn/blog_migrate/74979ed19a5ce57f5f7a84cebe7c8492.png

4. 删除水印

用法: ffmpeg -i 视频文件名 -vf delogo=w=水印宽:h=水印高:x=水印x位置:y=水印y位置 新视频文件名

参数 -vf :video filters,表示使用视频滤镜功能。

const { execSync, exec } = require("child_process");

// 4. 删除水印 -vf(video filters) delogo=w=?:h=?...
execSync("ffmpeg -i tiktok.mp4 -vf delogo=w=240:h=120:x=10:y=10 test3.mp4", {
	stdio: "inherit",
});

结果如下:

https://i-blog.csdnimg.cn/blog_migrate/772b8eb5b00b6291a8e80b72800a4032.png

5. 添加水印

用法: ffmpeg -i 视频文件名 -vf drawtext=x=水印x位置:y=水印y位置:fontsize=水印字体大小:fontcolor=水印字体颜色:text='水印内容' 新视频文件名

const { execSync, exec } = require("child_process");

// 5. 添加水印 -vf(video filters) drawtext=text=?:fontsize=?...
execSync(
  "ffmpeg -i test3.mp4 -vf drawtext=x=30:y=30:fontsize=40:fontcolor=white:text='ffmpeg' test7.mp4",
  { stdio: "inherit" }
);

结果如下:

https://i-blog.csdnimg.cn/blog_migrate/24a712f33ea3f647d4e6ac03bd07c5b3.png

6. 更多用法

ffmpeg -help 查看更多用法

https://i-blog.csdnimg.cn/blog_migrate/1942f8b083552c232358b369ab82d30a.png

ffmpge -help filter=参数 :查看参数有哪些子参数,比如这里查看添加水印时使用的参数 drawtext 的子参数:

https://i-blog.csdnimg.cn/blog_migrate/108898f6a98637669680f47c2ab59a0d.png