惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
博客园_首页
IT之家
IT之家
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Vercel News
Vercel News
美团技术团队
D
Docker
WordPress大学
WordPress大学
T
Tailwind CSS Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
The Cloudflare Blog
Y
Y Combinator Blog
F
Fortinet All Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
G
Google Developers Blog
爱范儿
爱范儿
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
MongoDB | Blog
MongoDB | Blog
S
SegmentFault 最新的问题
GbyAI
GbyAI
Hugging Face - Blog
Hugging Face - Blog
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans

博客园 - 飘杨......

为ZLMediaKit在windows10编译srtp Windows10安装部署ZLMediaKit SurfaceView+EGL+OpenGL ES+ffmpeg播放视频并解决黑屏不显示画面的问题 SurfaceView+ANativeWindow+ffmpeg播放视频并解决花屏问题 SDL播放音频工具类封装 Qt QWidget中dropEvent(QDropEvent* e)拖拽放开不接收事件/不执行,且拖拽到目标后鼠标显示禁用符号 ffmpeg视频转码遇到H264黑屏问题 ffmpeg根据输入的参数截取视频 ffmpeg将视频流录制下来并保存到本地 ffmpeg解封装mp4并解码渲染(SDL2) Qt+ffmpeg+SDL硬件解码并渲染 ffmpeg+sdl播放H264/H265文件 FFmpeg实战:录制Windows屏幕并用FFmpeg压缩成H.264/H.265并保存 ffmpeg SwsContext像素格式转换BGRA转YUV420P H264/H265 NALU的nalu_unit_type解析 ffmpeg码率控制模式详解 Qt+FFmpeg+SDL 实现多路多格式原始视频播放工具:从像素处理到实时渲染 Qt+SDL 实战:多格式视频播放工具开发 —— 支持 RGBA/ARGB/RGB24/YUV420P 的完整实现 SDL将YUV视频渲染到Qt窗口播放
ffmpeg-H264/H265常用编解码预设参数
飘杨...... · 2025-05-20 · via 博客园 - 飘杨......

一、概述

  不管是实时互动、直播、点播、还是离线渲染等场景都需要对视频文件进行编解码。且不同的应用场景对编解码的速度以及质量也是不同的,那么如何平衡速度与质量的关系以及选取合适的

应用场景就成为了关键。本节就简单介绍一下AVCodecContext->pre_data的预设参数的用法,来更好的视线视频质量速度的平衡。

二、示例

  1. 控制编码速度与压缩效率的平衡
    AVCodecContext *c;
    av_opt_set(c->priv_data, "preset", "ultrafast", 0);

    key:preset      从ultrafast~veryslow 编码速度越来越慢,相应的视频压缩率也越来越高。

    预设值编码速度压缩效率文件大小编码时间推荐场景
    ultrafast 最快 最差 最大 最短 实时直播、低延迟场景
    superfast 很快 较差 较大 很短 实时处理、临时文件
    veryfast 一般 适中 在线视频、快速转码
    fast 较快 较好 较小 标准转码、平衡选择
    medium 中等 良好 中等 默认预设(无特殊需求)
    slow 较慢 优秀 离线渲染、存储空间有限
    slower 更优 更小 很长 高质量归档、不考虑时间
    • ultrafast
    • superfast
    • veryfast
    • faster
    • fast
    • medium
    • slow
    • slower
    • veryslow
      • 应用场景
        • 直播、视频会议、实时互动可以使用ultrafast、superfast、veryfast,这样编码速度更快,可以把视频尽快传递出去(ps:虽然加大了一定的码率)
        • 本地视频存储/编辑/播放:使用slow、slower、veryslow可以有更好的压缩率,节省存储空间
  2. 针对特定场景优化编码参数,从film~zerolatency,编码延迟从高到底。根据自己场景的需要进行选择,如直播选择zerolatency(最小化编码延迟)
    1. key:tune
      • film
        • 作用:优化电影、实拍视频的编码效果。
        • 效果:
          • 增强细节保留(如人脸、纹理)。
          • 调整去块滤波器,减少块状效应。
          • 启用更精细的运动估计(适合复杂场景)。
        • 适用场景:电影、纪录片、剧情片等实拍内容
      • animation
        • 作用:优化动画、卡通的编码效果。
        • 效果:
          • 保留锐利边缘(如线条画)。
          • 减少颜色渐变的条带效应。
          • 降低运动估计精度(动画运动通常较规律)。
        • 适用场景:动漫、2D/3D 动画、游戏过场动画。
      • grain
        • 作用:保留胶片颗粒或噪点。
        • 效果:
          • 避免降噪算法模糊颗粒感。
          • 优化噪点区域的码率分配。
        • 适用场景:电影胶片转码、复古风格视频、高 ISO 拍摄的素材。
      • stillimage
        • 作用:优化静态图像或变化较少的场景。
        • 效果:
          • 增加 I 帧密度(减少 P/B 帧)。
          • 提高静止区域的压缩效率。
        • 适用场景:幻灯片、演示视频、监控录像。
      • psnr
        • 作用:针对 PSNR(峰值信噪比)或 SSIM(结构相似性)指标优化。
        • 效果:
          • 优先减少客观量化误差(PSNR)或保持结构相似性(SSIM)。
          • 注意:高 PSNR/SSIM 不直接等同于视觉质量更好,仅用于算法对比。
        • 适用场景:编码器性能测试、画质对比实验。
      • ssim(同上)
      • fastdecode
        • 作用:优化解码器性能,降低解码复杂度。
        • 效果:
          • 禁用复杂的解码特性(如高级运动补偿)。
          • 减少内存占用和 CPU 使用率。
        • 适用场景:低性能设备(如机顶盒、老旧手机)播放的视频。
      • zerolatency
        • 作用:最小化编码延迟,适合实时场景。
        • 效果:
          • 禁用 B 帧(双向预测帧),仅使用 I/P 帧。
          • 减少编码缓存(Lookahead)。
          • 可能降低压缩效率(文件变大)。
        • 适用场景:直播、视频会议、实时监控。
    • CRF 模式:
      • 值范围:18-28(默认 23),越小画质越好。
      • 用法:av_opt_set(c->priv_data, "crf", "20", 0)
      • 场景:输出文件大小不限时,优先使用 CRF(质量恒定)。
    • 固定码率 (CBR):
      • 用法
        av_opt_set(c->priv_data, "bitrate", "2000k", 0);  // 2Mbps
        av_opt_set(c->priv_data, "rc-lookahead", "60", 0);  // 前瞻帧数