2023-09-04
开源项目-工具介绍
00
请注意,本文编写于 442 天前,最后修改于 385 天前,其中某些信息可能已经过时。

目录

介绍
剪切
合并
修改音频
转换音频
提取视频缩略图
给视频添加水印
GIF动图的制作
视频压缩
视频压缩原理
案例
API不完全笔记
指定编码器 -c:
指定编码(压缩)
压缩图像质量
指定过滤器-vf

挤出一点时间把之前研究视频压缩的资料粘贴出来, 主要是FFmpeg这个工具用途太广太实用了。视频压缩、转换、剪裁、提取音频、GIF制作等。我这段时间写博客GIF图制作都是用它,本文将以示例的形式讲解FFmpeg的使用技巧

介绍

官网
为什么说FFmpeg是最强的的音视频处理工具?
因为它可以实现几乎所有你想要的功能

  • 添加水印
  • 路径
  • 剪裁、拼接
  • 视频缩略图
  • 转码、格式转换
  • 压缩
  • GIF动图
  • 声音处理
  • 录屏
  • 。。。

它是一个命令行工具 全平台通用,你可以写脚本进行批处理等等
其实相当多的视频工具、平台、播放都用到了FFmpeg或着它的核心库

剪切

  • ffmpeg -i test.avi -c:v libx264 -ss 00:00:03 -t 00:00:05 out.mp4
  • 从第三秒开始剪切,长度5秒
  • -ss 指定其实位置 后面是 时:分:秒
  • -t 可以是个整数,以秒为单位,也可以是时:分:秒
  • -ss要放在 -i 参数后面,这样才能做到分毫不差的剪切
  • 也可以使用 -to 代替 -t 指定一个片段的终止位置
  • -c copy:直接复制,不经过重新编码(这样比较快)

注更多关于 -c 参数后面说

合并

需要将要合并的文件列举到txt文件中

  • mylist.txt
txt
file 'clip1.mp4' file 'clip2.mp4' file 'clip3.mp4'

ffmpeg -f concat -i mylist.txt -c copy output.mp4

修改音频

-af ffmpeg -i test.mp4 -af "volume=1.5" output.mp4

  • "volume=1.5" 音量放大50%
  • "loudnorm=I=-5:LRA=1" 统一视频的音量
  • "equalizer=f=1000:width_type=h:width=200:g-10" 添加高通、低通滤波器、甚至均衡器等等
  • -an 删除音频轨 无声视频
  • -vn 删除视频轨
  • -sn 删除字幕
  • -dn 删除视频流

转换音频

ffmpeg -i sound.wav sound.mp3

提取视频缩略图

ffmpeg -i test.mp4 -vf "fps=1/10,scale=-2:720" thumbnail-%03d.jpg

  • thumbnail-%03d.jpg ---> thumbnail-001.jpg thumbnail-002.jpg ......
  • fps 表示视频帧率 1/10表示每10秒输出一帧画面
  • scale指定输出图像大小

给视频添加水印

ffmpeg -i test.mp4 -i cat.jpg -fitter_complex "overlay:=100:100" output.mp4

  • overlay用于将水印叠加在原始视频的上方,后面的两个参数指定了在图像中的位置

GIF动图的制作

需要指定视频片段
ffmpeg -i scrollbar.mov -ss 00:00:01 -t 5 -vf "fps=10,scale=480:-1:flags=lanczos" scrollbar.gif

  • -i输入文件 结尾输出文件
  • -ss 00:00:01 -t 5 开始时间持续时长
  • fps=10每秒渲染10帧
  • scale=480:-1缩放视频宽度为 480
  • flags=lanczos指定使用Lanczos算法进行缩放,Lanczos是一种高质量的缩放算法,用于保持图像细节的清晰度。

GIF转Webp ffmpeg -i heap.gif heap.webp

视频压缩

视频压缩原理

关于视频压缩主要从三个方面着手

  1. 调整视频编码格式,使用更高的压缩算法
  2. 降低分辨率和帧数
  3. 降低码率

关于码率你可能比较萌,更多建议了解一下视频格式压缩

案例

案例1:
ffmpeg -i 人性与管理中.mp4 -c:v libx264 -crf 32 2.人性与管理.mp4 image.png

参数讲解

  • -i 输入文件
  • -c:v libx264 指定编码为 H264
  • -crf [number] 控制图像质量;取值范围 0 - 51,值越大代表图像质量越差,0为无损压缩; 实际常用的取值为 19-28
  • -preset 指定编码器 默认是 medium ,上述案例就是用的normal, 有 fast/slow 等等,越快质量越大 越慢质量越小

案例2:
ffmpeg -i 24.mov -ss 00:00:00 -vf "fps=10,scale=1024:-1:flags=lanczos" 24.gif

补充参数讲解

  • --ss 开始时间 可省略表示 从视频开始
  • -t 结束时间 可以是 秒(数字)也可以是时:分:秒, 省略表示视频结束
  • fps=10 一秒内有10帧画面,
  • scale=1024:-1 缩放为宽度1024,高度自适应
  • flags=lanczos 指定使用 Lanczos 算法

API不完全笔记

指定编码器 -c:

  • -c:v:指定视频编码器
  • -c:a:指定音频编码器
  • -i:指定输入文件
  • -an:去除音频流
  • -vn: 去除视频流
  • -preset:指定输出的视频质量,会影响文件的生成速度
  • -y:不经过确认,输出时直接覆盖同名文件。

指定编码(压缩)

  • -preset参数ffmpeg -i test.avi -c:v libx264 -preset xxx out.mp4
  • xxx取值如下
  • ultrafast 拥有最快的编码速度 但同时会产生一个较大的文件
  • superfast
  • veryfast
  • faster
  • fast
  • medium 默认
  • slow
  • slower
  • veryslow 虽然速度很慢,但生成的文件较小

压缩图像质量

  • -crf参数 (constant rate factor) 他是用来控制图像质量的
  • ffmpeg -i test.avi -c:v libx264 -crf number out.mp4
  • number 取值范围 0 - 51
  • 这个值越大代表图像质量越差 0无损压缩 51最差质量
  • 实际使用中最长用到的是 19-28 image.png

指定过滤器-vf

  • 修改尺寸 旋转 增加滤镜等等,可以指定一系列的过滤器
  • image.png
  • -vf "scale=1024:576" 缩放为宽度1024,像素高度576像素
  • -vf "scale=1024:-1" 缩放为宽度1024,高度自适应
  • -vf "scale=-1:720p" 将视频转换为 720p
  • 旋转视频可以使用另一个过滤器 transpose=number
  • number取值 0-7
    • 1 顺时针旋转90度
    • 2 逆时针旋转90度
  • 当然不同的过滤器可以相互组合,比如先缩放再旋转 -vf "scale=256:256,transpose=1"
  • 裁剪视频中的某一块区域 -vf "crop=w:h:x:y" 四个数字分别代表宽、高、左上角x y坐标
  • 也可以是表达式 -vf "crop=iw/3:ih/3" 转换为1/3原始视频的宽度和高度, iwinput width的缩写, ih你懂的

本文作者:郭敬文

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!