ffmpeg-H264/H265常用编解码预设参数

一、概述

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

应用场景就成为了关键。本节就简单介绍一下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

        fastdecode

        • 作用:优化解码器性能,降低解码复杂度。
        • 效果:
          • 禁用复杂的解码特性(如高级运动补偿)。
          • 减少内存占用和 CPU 使用率。
        • 适用场景:低性能设备(如机顶盒、老旧手机)播放的视频。
      • zerolatency
        • 作用:最小化编码延迟,适合实时场景。
        • 效果:
          • 禁用 B 帧(双向预测帧),仅使用 I/P 帧。
          • 减少编码缓存(Lookahead)。
          • 可能降低压缩效率(文件变大)。
        • 适用场景:直播、视频会议、实时监控。
  3. 码率控制 (crf 或 bitrate)

    • 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);  // 前瞻帧数

  

posted on 2025-05-20 11:59  飘杨......  阅读(129)  评论(0)    收藏  举报