挤出一点时间把之前研究视频压缩的资料粘贴出来, 主要是FFmpeg这个工具用途太广太实用了。视频压缩、转换、剪裁、提取音频、GIF制作等。我这段时间写博客GIF图制作都是用它,本文将以示例的形式讲解FFmpeg的使用技巧
官网
为什么说FFmpeg是最强的的音视频处理工具?
因为它可以实现几乎所有你想要的功能
它是一个命令行工具 全平台通用,你可以写脚本进行批处理等等。
其实相当多的视频工具、平台、播放都用到了FFmpeg或着它的核心库
ffmpeg -i test.avi -c:v libx264 -ss 00:00:03 -t 00:00:05 out.mp4-ss 指定其实位置 后面是 时:分:秒-t 可以是个整数,以秒为单位,也可以是时:分:秒-ss要放在 -i 参数后面,这样才能做到分毫不差的剪切-to 代替 -t 指定一个片段的终止位置-c copy:直接复制,不经过重新编码(这样比较快)注更多关于
-c参数后面说
需要将要合并的文件列举到txt文件中
mylist.txttxtfile '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用于将水印叠加在原始视频的上方,后面的两个参数指定了在图像中的位置需要指定视频片段
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缩放视频宽度为 480flags=lanczos指定使用Lanczos算法进行缩放,Lanczos是一种高质量的缩放算法,用于保持图像细节的清晰度。GIF转Webp
ffmpeg -i heap.gif heap.webp
关于视频压缩主要从三个方面着手
关于码率你可能比较萌,更多建议了解一下视频格式压缩
案例1:
ffmpeg -i 人性与管理中.mp4 -c:v libx264 -crf 32 2.人性与管理.mp4

参数讲解
-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 算法-c:v:指定视频编码器-c:a:指定音频编码器-i:指定输入文件-an:去除音频流-vn: 去除视频流-preset:指定输出的视频质量,会影响文件的生成速度-y:不经过确认,输出时直接覆盖同名文件。-preset参数ffmpeg -i test.avi -c:v libx264 -preset xxx out.mp4ultrafast 拥有最快的编码速度 但同时会产生一个较大的文件superfastveryfastfasterfastmedium 默认slowslowerveryslow 虽然速度很慢,但生成的文件较小-crf参数 (constant rate factor) 他是用来控制图像质量的ffmpeg -i test.avi -c:v libx264 -crf number out.mp4number 取值范围 0 - 51
-vf
-vf "scale=1024:576" 缩放为宽度1024,像素高度576像素-vf "scale=1024:-1" 缩放为宽度1024,高度自适应-vf "scale=-1:720p" 将视频转换为 720ptranspose=numbernumber取值 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原始视频的宽度和高度, iw 是 input width的缩写, ih你懂的本文作者:郭敬文
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!