文章目录
- FFmpeg 压缩视频文件
- 基本压缩命令(保持 MP4 格式)
- 转换为其他格式示例:
- 关键参数说明:
- 额外优化选项:
- 在FFmpeg中使用多线程加速
- 1. 帧级多线程 (frame-level multithreading)
- 2. 切片级多线程 (slice-level multithreading)
- 3. 编码器特定多线程选项
- H.264/H.265 (libx264/libx265)
- VP9
- 4. 硬件加速
- 5. 并行处理多个文件
- 最佳实践建议
- FFmpeg压缩MP4视频以减小文件大小(可接受画质下降)
- 1. 调整视频码率(推荐基础方法)
- 2. 降低分辨率(显著减小体积)
- 3. 修改帧率(适用于动态要求不高的视频)
- 4. 使用更高效的编码器(推荐)
- 5. 极端压缩方案(体积最小)
- 关键参数说明:
- 其他格式选项:
- 针对录屏视频的特性,可以通过FFmpeg进行高效压缩
- **1. 关键参数优化(推荐命令)**
- **参数解析**:
- **2. 进阶优化技巧**
- **针对静态内容**(如PPT演示):
- **极致压缩(WebM格式)**:
- **3. 录屏视频特性优化原理**
- **4. 质量对比与调整建议**
- **5. 批量处理脚本(Linux/macOS)**
FFmpeg 压缩视频文件
使用 FFmpeg 压缩视频文件(包括 MPEG-4/MP4 格式)并输出为其他格式的基本命令如下:
基本压缩命令(保持 MP4 格式)
ffmpeg -i input.mp4 -vcodec libx264 -crf 23 -preset medium -acodec aac -b:a 128k output.mp4
转换为其他格式示例:
- 输出为 MKV 格式:
ffmpeg -i input.mp4 -vcodec libx265 -crf 28 -preset fast -acodec libvorbis output.mkv
- 输出为 WebM (VP9) 格式:
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus output.webm
- 输出为 MOV 格式:
ffmpeg -i input.mp4 -vcodec mpeg4 -q:v 5 -acodec aac output.mov
关键参数说明:
-crf
:质量系数(18-28 是常用范围,值越大压缩率越高)-preset
:编码速度/效率平衡(ultrafast/superfast/veryfast/faster/fast/medium/slow/slower/veryslow)- 视频编码器:
libx264
:H.264/AVC(兼容性好)libx265
:H.265/HEVC(压缩率高)libvpx-vp9
:WebM 专用
- 音频编码器:
aac
:MP4 常用libopus
:WebM 专用libvorbis
:MKV 常用
额外优化选项:
- 缩放视频:
-vf "scale=1280:-1"
(设置宽度为1280,高度自动计算) - 降低帧率:
-r 24
(改为24fps) - 裁剪视频:
-ss 00:01:30 -t 10
(从1分30秒开始,截取10秒)
注意:实际使用时请先确保已安装 FFmpeg,且支持相关编解码器(可通过 ffmpeg -codecs
查看)。
在FFmpeg中使用多线程加速
FFmpeg提供了多种方式利用多线程来加速视频处理,主要包括以下几种方法:
1. 帧级多线程 (frame-level multithreading)
使用 -threads
参数可以开启帧级多线程处理:
ffmpeg -threads 4 -i input.mp4 output.mp4
或者分别控制不同组件的线程数:
ffmpeg -threads 4 -i input.mp4 -threads 8 output.mp4
2. 切片级多线程 (slice-level multithreading)
某些编码器支持切片编码,可以并行处理:
ffmpeg -i input.mp4 -c:v libx264 -slices 4 output.mp4
3. 编码器特定多线程选项
不同编码器有自己特定的多线程选项:
H.264/H.265 (libx264/libx265)
ffmpeg -i input.mp4 -c:v libx264 -preset fast -crf 23 -x264-params threads=8 output.mp4
# 或者
ffmpeg -i input.mp4 -c:v libx265 -x265-params pools=8 output.mp4
VP9
ffmpeg -i input.mp4 -c:v libvpx-vp9 -row-mt 1 -threads 8 output.webm
4. 硬件加速
虽然不是严格的多线程,但硬件加速可以显著提高速度:
# NVIDIA硬件加速
ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc output.mp4
5. 并行处理多个文件
使用GNU parallel等工具并行处理多个文件:
parallel ffmpeg -i {} -c:v libx264 {.}.mp4 ::: *.mov
最佳实践建议
- 线程数通常设置为CPU核心数或略多
- 不同阶段(I/O、解码、编码)可以设置不同线程数
- 使用
-threads 0
让FFmpeg自动选择最佳线程数 - 监控CPU使用率调整线程数以达到最佳效果
注意:过多的线程可能会导致性能下降,因为线程管理开销会增加。
FFmpeg压缩MP4视频以减小文件大小(可接受画质下降)
使用FFmpeg压缩MP4视频以减小文件大小(可接受画质下降)的常用方法如下:
1. 调整视频码率(推荐基础方法)
ffmpeg -i input.mp4 -b:v 1000k -maxrate 1500k -bufsize 2000k output.mp4
-b:v 1000k
设置目标平均码率为1000kbps-maxrate
和-bufsize
用于控制码率波动
2. 降低分辨率(显著减小体积)
ffmpeg -i input.mp4 -vf "scale=640:-1" -c:a copy output.mp4
- 将宽度缩放到640px,高度按比例调整
-c:a copy
保留原始音频不重新编码
3. 修改帧率(适用于动态要求不高的视频)
ffmpeg -i input.mp4 -r 24 output.mp4
- 将帧率改为24fps(原帧率高于此值时有效)
4. 使用更高效的编码器(推荐)
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset fast -c:a aac -b:a 128k output_h265.mp4
libx265
:H.265编码器比H.264节省约50%体积-crf 28
:质量参数(18-28较佳,值越大画质越低)-preset fast
:编码速度与压缩率的平衡
5. 极端压缩方案(体积最小)
ffmpeg -i input.mp4 -c:v libx264 -crf 35 -preset veryfast -vf "scale=480:-2" -r 15 -c:a libmp3lame -b:a 64k output_low.mp4
- 480p分辨率 + 15fps + 高CRF + 低质量音频
关键参数说明:
参数 | 说明 |
---|---|
-crf | 质量范围(libx264默认23,libx265默认28) |
-preset | 编码速度(ultrafast→slow) |
-c:v | 视频编码器(libx264/libx265/libvpx-vp9) |
-vf scale | 分辨率缩放(建议保持宽高比) |
其他格式选项:
- WebM格式(VP9编码):
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus output.webm
建议先尝试CRF参数调整(方法4),再根据需要组合分辨率/帧率调整。测试时可用-ss 00:01:00 -t 10
参数只处理1分钟处的10秒片段来快速验证效果。
针对录屏视频的特性,可以通过FFmpeg进行高效压缩
针对录屏视频的特性,可以通过FFmpeg进行高效压缩,在保持可接受画质的前提下显著减小文件体积。以下是针对录屏优化的压缩方案:
1. 关键参数优化(推荐命令)
ffmpeg -i input.mp4 -vf "scale=1280:-2" -c:v libx264 -preset slow -crf 28 -tune animation -g 60 -keyint_min 60 -c:a aac -b:a 64k output.mp4
参数解析:
-vf "scale=1280:-2"
:按宽度1280像素等比缩放(根据源视频调整,若原视频小于1280则无需缩放)-c:v libx264
:使用H.264编码(兼容性好)-preset slow
:较慢的编码速度换取更高压缩率(可选:slower
/veryslow
)-crf 28
:质量系数(18-23为高质量,24-28适合录屏,数值越大压缩越强)-tune animation
:针对屏幕内容优化(自动处理平滑色块和文字边缘)-g 60 -keyint_min 60
:关键帧间隔设为60帧(减少冗余,适合静态内容)-c:a aac -b:a 64k
:音频压缩为低码率AAC
2. 进阶优化技巧
针对静态内容(如PPT演示):
ffmpeg -i input.mp4 -vf "fps=15" -c:v libx264 -crf 30 -preset veryslow -tune stillimage output.mp4
fps=15
:降低帧率至15fps(适合无快速变化的场景)-tune stillimage
:为静态画面优化
极致压缩(WebM格式):
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 35 -b:v 0 -row-mt 1 -threads 4 -c:a libopus -b:a 32k output.webm
- VP9编码比H.264节省约30%体积,但编码速度慢。
3. 录屏视频特性优化原理
-
色彩特性:
- 录屏多为RGB色彩空间,转换为YUV420时易出现色带,建议添加:
-vf "scale=out_color_matrix=bt709"
明确色彩标准。
- 录屏多为RGB色彩空间,转换为YUV420时易出现色带,建议添加:
-
动态区域检测:
- 使用分区编码优化(自动启用于
-tune animation
),对静态区域分配更低码率。
- 使用分区编码优化(自动启用于
-
去噪处理:
- 若录屏有噪点(如摄像头画面),可添加轻度降噪:
-vf "hqdn3d=1:1:3:3"
- 若录屏有噪点(如摄像头画面),可添加轻度降噪:
4. 质量对比与调整建议
- 测试不同CRF值:用
-crf 24
/28
/32
分别输出,选择可接受的最低质量。 - 检查关键帧:用播放器逐帧观察文字/图表边缘是否清晰。
- 文件大小预估:
veryslow
预设比fast
小20%~30%,但耗时可能增加5倍。
5. 批量处理脚本(Linux/macOS)
for f in *.mp4; doffmpeg -i "$f" -vf "scale=1280:-2" -c:v libx264 -preset slow -crf 28 \-tune animation -c:a aac -b:a 64k "${f%.*}_compressed.mp4"
done
通过以上方法,通常可将录屏视频压缩至原体积的10%~30%,同时保持文字和界面元素的清晰度。