百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

ffmpeg 编码h264 profile如何设置为baseline的问题

csdh11 2025-04-23 23:18 7 浏览

使用最新版ffmpeg-0.11 libx264-125,使用默认编码时,用Eyecard发现profile-idc一直是PROFILE_H264_HIGH (profile-idc=100),但是项目要求是baseline,设置了AVCodecContext的->profile=FF_PROFILE_H264_BASELINE也没用,经过多方查找,需要如下解决方法:


AVDictionary *opts = NULL;

av_dict_set(&opts, "profile", "baseline", 0);

/* open the codec */

if (avcodec_open2(m_pEncoderCtx, encoder, &opts) < 0)

et/kisaa133/article/details/7792008

FFMPEG生成高质量的h264编码视频

FFMPEG 转换h264格式视频,为了使视频的每一秒都有关键帧,我们分两步来生成,第一步生成两个临时文件,再组合生成最终的视频文件(windows和linux系统都通用)

(1)

ffmpeg -i input.mp4 -y input.temp.wav -s 640x360 -pix_fmt yuv420p -f rawvideo -y - | x264 --profile baseline --level 3 --keyint 25 --bitrate 512 --sar 1:1 --output input.temp.264 - 640x360

(2)

ffmpeg -i input.temp.wav -f h264 -i input.temp.264 -y -vcodec copy -acodec libfaac -ab 50k output.mp4


这样生成的视频质量比较高,不会出现锯齿,也不会出现花屏。

FFmpeg码率控制及内置编码参数介绍

  • 一、码率控制参数
  • 二、编码速度&编码质量&视觉优化参数
  • 一、码率控制:



    普通用户常用CRF、Two-Pass ABR 两种

    CRF(Constant Rate Factor - 限制码率因子)

    适用范围

    优点:该方法在输出文件的大小不太重要的时候,可以使整个文件达到特定的视频质量。该编码模式在单遍编码模式下提供了最大的压缩效率,每一帧可以按照要求的视频质量去获取它需要的比特数。

    缺点:不好的一面是,你不能获取一个特定大小的视频文件,或者说将输出位率控制在特定的大小上。

    参数解析:

    1)量化比例的范围为0~51,其中0为无损模式,23为缺省值,51可能是最差的。该数字越小,图像质量越好。从主观上讲,18~28是一个合理的范围。18往往被认为从视觉上看是无损的,它的输出视频质量和输入视频一模一样或者说相差无几。但从技术的角度来讲,它依然是有损压缩。

    2)若Crf值加6,输出码率大概减少一半;若Crf值减6,输出码率翻倍。通常是在保证可接受视频质量的前提下选择一个最大的Crf值,如果输出视频质量很好,那就尝试一个更大的值,如果看起来很糟,那就尝试一个小一点值。

    使用方法 - 命令行



    使用方法 - 源码
    在代码中使用时,通过 av_dict_set 设置到 AVDictionary 中,并作为参数传递给 avcodec_open2 即可


    Two-Pass ABR(两遍模式)

    适用范围:如果你的目标是一个确定大小的文件而且帧与帧之间的视频质量并不重要,这个方法很适用。这通过一个例子可以得到很好地解释。比如预期视频文件有10min(600s),200 MB: 200 * 8192 / 600 = ~2730 Kb 2730 - 128(音频常用的比特率) = 2602 kb

    使用方法 - 命令行


    其他码率控制方式

    ABR(Average Bitrate - 平均码率)

    解析:

    它提供了某种“运行均值”的目标,终极目标是最终文件大小匹配这个“全局平均”数字(因此基本上来说,如果编码器遇到大量码率开销非常小的黑帧,它将以低于要求的比特率编码,但是在接下来几秒内的非黑帧它将以高质量方式编码方式使码率回归均值)使用两遍编码模式时这个方法变得更加有效,你可以和“max bit rate ”配合使用来防止码率的波动。

    使用方法 - 命令行



    使用方法 - 源码

    如果设置了AVCodecContext中bit_rate的大小,则采用abr的控制方式

    如果没有设置AVCodecContext中的bit_rate,则默认按照crf方式编码,crf默认大小为23

    CBR(Constant BitRate - 恒定码率)

    解析:


    使用方法 - 命令行

    ffmpeg -i <input> -c:v libx264 -x264-params "nal-hrd=cbr:force-cfr=1" -b:v 1M -minrate 1M -maxrate 1M -bufsize 2M <output>

    // VP9

    ffmpeg -i <input> -c:v libvpx-vp9 -b:v 1M -maxrate 1M -minrate 1M <output>

    CQP(Constant Quantization Parameter - 固定质量参数)

    解析

    值越大,压缩率越大,质量越低。

    使用方法 - 命令行


    最大比特率的CRF/2-pass模式

    你可以通过声明-maxrate确保最大码率限制在一个范围里,对于流式传输非常有用,可以配合到(2-Pass)ABR或CRF模式一起使用。

    使用方法 - 命令行


    ffmpeg -i <input> -c:v libx265 -b:v 1M -x265-params pass=1:vbv-maxrate=1000:vbv-bufsize=2000 -f mp4 /dev/null

    ffmpeg -i <input> -c:v libx265 -b:v 1M -x265-params pass=2:vbv-maxrate=1000:vbv-bufsize=2000 <output>


    编写代码的话,指定 AVCodecContext 的 rc_max_rate 和 rc_buffer_size 即可。bufsize 根据你希望比特率获得多大的可变性而设置,默认为 maxrate 的两倍,如果想限制流的比特率,可以设置为 maxrate 的一半。

    配合 CRF 模式使用的时候,如果设置的 crf 值过低,视频码率可能超出 -maxrate 的时候,编码器会自动调整 crf,避免出现较大的码率波动。然而,x264 不会严格控制你指定的最大码率,除非使用 2 pass 模式。

    使用方法 - 源码


    二、编码速度&编码质量&视觉优化参数

    preset

    主要调节编码速度和质量的平衡,有ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo这10个选项,从快到慢。

    tune

    主要配合视频类型和视觉优化的参数况。如果视频的内容符合其中一个可用的调整值又或者有其中需要,则可以使用此选项,否则建议不使用(如tune grain是为高比特率的编码而设计的)。

    tune的值有: film: 电影、真人类型;

    animation: 动画;

    grain: 需要保留大量的grain时用;

    stillimage: 静态图像编码时使用;

    psnr: 为提高psnr做了优化的参数;

    ssim: 为提高ssim做了优化的参数;

    fastdecode: 可以快速解码的参数;

    zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。

    profile

    H.264有四种画质级别,分别是baseline, extended, main, high:

      1、Baseline Profile:基本画质。支持I/P 帧,只支持无交错(Progressive)和CAVLC;

      2、Extended profile:进阶画质。支持I/P/B/SP/SI 帧,只支持无交错(Progressive)和CAVLC;(用的少)

      3、Main profile:主流画质。提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced),

        也支持CAVLC 和CABAC 的支持;

      4、High profile:高级画质。在main Profile 的基础上增加了8x8内部预测、自定义量化、 无损视频编码和更多的YUV 格式;

    H.264 Baseline profile、Extended profile和Main profile都是针对8位样本数据、4:2:0格式(YUV)的视频序列。在相同配置情况下,High profile(HP)可以比Main profile(MP)降低10%的码率。

    根据应用领域的不同,Baseline profile多应用于实时通信领域,Main profile多应用于流媒体领域,High profile则多应用于广电和存储领域。

    设置preset、tune、profile

    使用方法 - 命令行

    命令行的方式详见文档。

    使用方法 - 源码


    参考资料;

    C/C++,Linux,golang,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,RTSP RTMP HLS 流媒体 ffmpeg

    WebRTC,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,嵌入式


    台私信;资料;两个字可以免费领取

    相关推荐

    Centos离线静默安装 oracle11g,步骤细验证成功

    一、环境要求1.1.涉及工具及环境1)CentOS764位系统2)oracle安装包文件a)linux.x64_11gR2_database_1of2.zip...

    zabbix 5.0 ODBC监控Oracle

    以下配置基于zabbix5.0.24完成,基于5.4测试无法提示找到libsqora.so.21.1类库文件,网上搜索了很多方法都无法解决。本次ODBC数据采集服务不在zabbix中部署,而是由单独...

    Windows环境中Oracle数据库ORA-01034错误的处理过程

    摘要:今天一早发现公司的一台Oracle数据库无法访问,使用PL/SQL登录Oracle数据库,提示【ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务】,后来经过修复后,并在服务...

    部署单机oracle数据库,干货太多,我编辑都累

    一、前言本次实施内容是,oracle单实例系统文件安装,操作系统为CentOS6.9,数据库版本11.2.0.4。二、oracle软件安装...

    带你部署单机oracle数据库,超详细带图解说

    一、前言本次实施内容是,oracle单实例系统文件安装,操作系统为CentOS6.9,数据库版本11.2.0.4。二、oracle软件安装...

    oracle用户创建及权限设置

    权限:createsessioncreatetableunlimitedtablespaceconnectresource...

    简单且优雅数据库操作-测试向

    cmd打开命令行输入框sqlplus/nolog连接无用户数据库connectsys/zhwylanassysdba;连接sys用户的管理员身份showuser;显示当前用户目录...

    手撸一个Oracle Rac(3)

    (文章太长,只能分段发表,哎~)四、RAC维护一般命令1.查看集群状态grid用户执行crs_stat-t...

    「运维经」第23章——忘记oracle密码

    忘记oracle密码前提条件:你确保安装oracleserver主机的oracle用户密码你还记得。...

    详解BarTender超过文件尾访问

    Bartender标签打印机软件出现不能正常运行,在打开这个软件会出来一个窗口“尝试超过文件尾访问文件…….btw”的字样。解决方法:彻底卸载软件,删除软件所有的注册信息。方法一:可以采用360安全助...

    BarTender只打印口令密码去除教程

    BarTender条码打印软件具有“只打印口令设置”功能,通过设置该口令密码可以防止操作人员随意变动模板内容。但是,如果您将BarTender只打印口令设置密码忘了怎么办?也许你会觉得卸载软件重装就O...

    Bartender怎么破解?Bartender如何安装图文教程讲解

    什么是bartender?bartender是美国海鸥科技推出的一款条码打印软件bartender在150多个国家与地区已拥有上千万的用户,该软件在条码行业中得到众多群体使用和行业设备巨头认可并与...

    FFmpeg+SDL视频播放器-图形界面版

    MFC知识创建MFC工程的方法...

    技术|开源空间音频格式Eclipsa Audio登场,继HDR10+后Samsung再次硬杠Dolby

    说到空间音频/沉浸式3D音效,你首先想到谁?DolbyAtmos、DTS:X还是Auro3D?如今新的“搅局者”出现了!韩系电视大厂Samsung与Google合作,推出空间音频格式Eclipsa...

    视频怎么进行格式转换?6款视频转换MP4格式的免费软件!

    在数字时代,视频格式的多样性为我们提供了丰富的观看和编辑选择,但同时也带来了格式不兼容的困扰:MOV、AVI、WMV、MKV……这些格式多多少少都会遇到因不兼容而无法播放或下载分享的场景。当你想要将视...