来源:Node.js

FFmpeg

FFmpeg是一个开源的跨平台多媒体处理工具,可以用于处理音频、视频和多媒体流

它提供了一组强大的命令行工具和库,可以进行视频转码、视频剪辑、音频提取、音视频合并、流媒体传输等操作

FFmpeg的主要功能和特性:

  • 格式转换:可以将一个媒体文件从一种格式转换为另一种格式,支持几乎所有常见的音频和视频格式,包括 MP4、AVI、MKV、MOV、FLV、MP3、AAC 等
  • 视频处理:可以进行视频编码、解码、裁剪、旋转、缩放、调整帧率、添加水印等操作;例如调整视频的分辨率、剪辑和拼接视频片段,以及对视频进行各种效果处理
  • 音频处理:可以进行音频编码、解码、剪辑、混音、音量调节等操作;例如提取音频轨道、剪辑和拼接音频片段,以及对音频进行降噪、均衡器等处理
  • 流媒体传输:支持将音视频流实时传输到网络上,可以用于实时流媒体服务、直播和视频会议等应用场景
  • 视频处理效率高:是一个高效的工具,针对处理大型视频文件和高分辨率视频进行了优化,可以在保持良好质量的同时提供较快的处理速度
  • 跨平台支持:可以在多个操作系统上运行,包括 Windows、MacOS、Linux 等,同时支持多种硬件加速技术,如NVIDIA、CUDA和Intel Quick Sync Video

安装

官网下载入口

根据需要根据对应的操作系统下载,下载完后配置环境变量,在命令行中输入ffmpeg -version时不报错即成功

使用ffmpeg -h可以查看详细使用方法

使用

视频转gif

-i:输入的文件

1
2
const {execSync} = require('child_process')
execSync(`ffmpeg -i test.mp4 test.gif`,{stdio:'inherit'})

这是生成的动图(

添加水印

-vf:video filter

  • drawtext:添加文字
  • fontsize:字号
  • x&y:水平垂直方向
  • fontcolor:文字颜色
  • text:文字水印内容
1
2
3
const {execSync} = require('child_process')

execSync(`ffmpeg -i test.mp4 -vf drawtext=text="CherikoM":fontsize=30:fontcolor=white:x=10:y=10 test2.mp4`,{stdio:'inherit'})

视频裁剪+控制大小

  • -ss:起始时间
  • -to:结束时间
  • -ss在-i的前面可能会出现精度问题,因为视频还没被解析,进度就跳转到了相关位置,但这样解析速度快
  • -ss在-i的后面不会出现精度问题,但解析速度会变慢
  • 两个时间的单位都是秒
1
2
const {execSync} = require('child_process')
execSync(`ffmpeg -ss 2.5 -to 10 -i test.mp4 test3.mp4`,{stdio:'inherit'})

提取视频的音频

1
2
const {execSync} = require('child_process')
execSync(`ffmpeg -i test.mp4 test.mp3`,{stdio:'inherit'})

模糊水印

  • w&h:宽高
  • x&y:垂直水平坐标
  • delogo:用于模糊水印的过滤参数
1
2
const {execSync} = require('child_process')
execSync(`ffmpeg -i test2.mp4 -vf delogo=w=140:h=25:x=10:y=10 test4.mp4`,{stdio:'inherit'})