当前位置: 首页 > news >正文

FFmpeg 压缩视频文件

文章目录

  • FFmpeg 压缩视频文件
    • 基本压缩命令(保持 MP4 格式)
    • 转换为其他格式示例:
    • 关键参数说明:
    • 额外优化选项:
  • 在FFmpeg中使用多线程加速
    • 1. 帧级多线程 (frame-level multithreading)
    • 2. 切片级多线程 (slice-level multithreading)
    • 3. 编码器特定多线程选项
      • H.264/H.265 (libx264/libx265)
      • VP9
    • 4. 硬件加速
    • 5. 并行处理多个文件
    • 最佳实践建议

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使用率调整线程数以达到最佳效果

注意:过多的线程可能会导致性能下降,因为线程管理开销会增加。

http://www.xdnf.cn/news/1001719.html

相关文章:

  • 力扣HOT100之技巧:136. 只出现一次的数字
  • C#调用C++ 结构体方法
  • GitHub 上 PAT 和 SSH 的 7 个主要区别:您应该选择哪一个?
  • Transformer 与 XGBoost 协同优化的时间序列建模
  • LSTM助力迁移学习!深度学习架构性能提升,准确率达到99.91%!
  • TCN+Transformer+SE注意力机制多分类模型 + SHAP特征重要性分析,pytorch框架
  • 用于在多个远程计算机上求解的 Ansoft RSM 设置 - Windows
  • 实战案例-FPGA的JESD204B IP核配置详解
  • 【springboot组件开发】三方中间件自定义自动装载(rabbitmq/rocketmq/cmq)
  • 记录一次jenkins slave因为本地安装多个java版本导致的问题
  • stm32f103 标准库移植rt-thread nano
  • 学习笔记整理之状态图与状态图搜索
  • Windows 提权工具(“Potato“ 系列)用法指南
  • 火线、零线、地线 基础知识
  • 实现图片懒加载
  • 大话软工笔记—架构的概要设计
  • 【AS32系列MCU调试教程】基础配置:Eclipse项目与工具链的优化
  • SD-WAN优化云应用与多云架构访问的关键策略
  • 408考研逐题详解:2009年第39题
  • 深入探索IIC-OLED显示技术:嵌入式仿真平台如何重塑高校教学范式——深圳航天科技创新研究院技术赋能新一代工程教育
  • 观点 | 科技企业到了品牌建设的历史性窗口期
  • 界面开发框架DevExpress XAF实践:集成.NET Aspire后如何实现服务安排?
  • Kratos 与Golang Cms的关系
  • 深度学习环境搭建(pycharm+yolov5)
  • 【AWS入门】IAM多重身份验证(MFA)简介
  • 深度解析Git错误:`fatal: detected dubious ownership in repository` 的根源与解决方案
  • OpenAI API:LLM编程的事实标准(上)
  • R语言缓释制剂QBD解决方案之五
  • GitLab 拉取变慢的原因及排查方法
  • UE5 学习系列(九)光照系统介绍