挤出一点时间把之前研究视频压缩的资料粘贴出来, 主要是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.txt
txtfile '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.mp4
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-vf
-vf "scale=1024:576"
缩放为宽度1024,像素高度576像素-vf "scale=1024:-1"
缩放为宽度1024,高度自适应-vf "scale=-1:720p"
将视频转换为 720ptranspose=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原始视频的宽度和高度, iw
是 input width
的缩写, ih
你懂的本文作者:郭敬文
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!