专业名词
视频码率:是指视频文件在单位时间内使用的数据流量,也叫比特率/码流率。 码率越大,说明单位时间内取样率越大,数据流精度就越高,这样表现出来的的效果就是:视频画面更清晰画质更高
帧率:每秒显示的画面帧。帧率越高,画面的连贯性越强。电影通常以24fps的速度显示,因为这个帧率与我们肉眼看世界的方式相似
分辨率:画面的像素数量,分辨率越高,像素越多,画面越细腻,越清晰
安装
brew install ffmpeg
视频格式转换
ffmpeg能够自动识别文件的后缀名并转换
ffmpeg -i xxx.mov xxx.mp4
mp4转m3u8,生成一个m3u8文件和若干个*.ts文件
# -hls_time 设置每个HLS分片的最大持续时间(以秒为单位)。默认值为2秒
# -hls_list_size n:设置为0会保存有所片信息,默认只保留最后5个片段
# -start_number 1000 将使首个分段的序列号为1000,方便文件排序
ffmpeg -i youtube.mp4 -hls_time 10 -hls_list_size 0 -start_number 1000 youtube.m3u8
# 获取视频第一帧,当作封面
# -vframes 1:指定要提取的帧数
# -f image2:指定输出格式为图像。FFmpeg支持多种输出格式,通过指定image2,我们告诉它将输出文件保存为图像文件
ffmpeg -i youtube.mp4 -vframes 1 -f image2 youtube-cover.jpg
视频压缩
ffmpeg -i input.mp4 -r 25 -crf 23 -s 1280x720 output.mp4
r
帧率crf
这个参数的取值范围为0-51,其中0为无损模式,数值越大,画质越差,生成的文件却越小。从主观上讲,18-28是一个合理的范围。18被认为是视觉无损的(从技术角度上看当然还是有损的),它的输出视频质量和输入视频相当。s
设置画面的宽高,-s 1280x920
视频转GIF
要使用ffmpeg将MP4转换为GIF,并设置压缩率,你可以通过调整输出GIF的分辨率、帧率和颜色深度来实现。以下是一个基本的命令,示例中设置了分辨率和帧率,达到压缩效果:
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1:flags=lanczos" -c:v gif output.gif
参数说明
- -i input.mp4:输入视频文件。
- fps=10:设置输出GIF的帧率为10帧每秒,可以调整来降低文件大小。
- scale=320:-1:将GIF的宽度设置为320像素,-1表示根据宽度自动调整高度,保持原始比例。
- flags=lanczos:使用Lanczos算法进行高质量的缩放。
- -c:v gif:指定输出视频编码为GIF。
- output.gif:输出文件名。
进一步压缩
如果你希望进一步减少GIF的文件大小,可以通过调整帧率、分辨率或者使用-filter_complex来减小颜色数量。以下是通过调整颜色深度的例子:
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1:flags=lanczos" -filter_complex "[0:v] palettegen" palette.png
ffmpeg -i input.mp4 -i palette.png -filter_complex "[0:v][1:v] paletteuse" output.gif
步骤说明:
第一条命令生成颜色调色板,使用palettegen。 第二条命令应用调色板,并生成GIF。