欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > FFmpeg 压缩视频文件

FFmpeg 压缩视频文件

2025/6/15 4:28:59 来源:https://blog.csdn.net/weixin_42849849/article/details/148615667  浏览:    关键词:FFmpeg 压缩视频文件

文章目录

  • 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

转换为其他格式示例:

  1. 输出为 MKV 格式
ffmpeg -i input.mp4 -vcodec libx265 -crf 28 -preset fast -acodec libvorbis output.mkv
  1. 输出为 WebM (VP9) 格式
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus output.webm
  1. 输出为 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

最佳实践建议

  1. 线程数通常设置为CPU核心数或略多
  2. 不同阶段(I/O、解码、编码)可以设置不同线程数
  3. 使用 -threads 0 让FFmpeg自动选择最佳线程数
  4. 监控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. 录屏视频特性优化原理

  1. 色彩特性

    • 录屏多为RGB色彩空间,转换为YUV420时易出现色带,建议添加:
      -vf "scale=out_color_matrix=bt709"明确色彩标准。
  2. 动态区域检测

    • 使用分区编码优化(自动启用于-tune animation),对静态区域分配更低码率。
  3. 去噪处理

    • 若录屏有噪点(如摄像头画面),可添加轻度降噪:
      -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%,同时保持文字和界面元素的清晰度。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词