FFMPEG设置 cbr讨论

Q:我采用ffmpeg调用x264一直出错,命令如下
ffmpeg -s 352x288 -r 50 -pix_fmt yuv420p   -i tmp.yuv tmp.h264
可不可以给点建议,找了很久也没有找到解决办法,错误时error while opening encoder for output stream 0.0 maybe incorrect parameters,先谢了

A-vcodec libx264 没加?

加了也是一样

你把 x264编进去没

ffmpeg -s 176x144 -pix_fmt yuv420p -r 30 -b 200000 -i foreman_part_qcif.yuv -vcodec libx264 new1.h264

-qmin 10 -qmax 51 -qdiff 4 -me_range 16 -keyint_min 25 -qcomp 0.6

 

boradcasting 或者 streaming 的应用,CBR都首要优先满足的条件
现在那些高清电视台为什么要使用占用几十兆的资源的mpeg2 ts流来播放,一个主要原因就是因为h.264没有真正cbr,而mpeg2就有
streaming 应用其实也能处理一定程度的VBR,但是在某些时候,为了处理VBR码流的不稳定带来的开销远远超过它带来的好处,不如用CBR,甚至多花几倍的存储和带宽都无所谓
一直很困惑,CBR这种在boradcasting 和 streaming的大型工业级的应用上非常重要的东西,h.264是怎么考虑的

1、VBR 适合的应用场景是媒体存储,而不是网络传输,因此不要让武状元去当文官;
2、其实实际网络传输中所谓的 CBR 一般都是 ABR(平均比特率),即只要是单位时间内把码率控制在额定码率就可以了,因为编码输出本来就有缓冲可以起到平滑波动的作用;
3、你所谓的严格意义上的 CBR 是每一帧都分配同样的码字,试想一下,如果某一帧所需要的码字本来就很少,而你却一定要给它分配很多码字,那不是浪费么?另一方面,如果某一帧所需要的码字本来就多,而你却给得很少,那这帧的效果会很差。这样编下来,整体序列质量会忽好忽坏地不停发生跳变,反而对视觉冲击很大;因此 ABR 才是最适合网络传输的方案;
4、无论是 CBR、ABR 还是 VBR 都是属于码率控制,而码率控制是视频编码的开放部分,它不会改变码流结构的合法性,因此无论在 MPEG2、MPEG4 还是 H.263、H.264 当中都没有做规定;
5、由于目前的视频编码标准都是基于块编码的混合编码框架,因此一个码率控制算法可以用到任何协议上(当然有时候需要做点小的改动),只不过是控制效果好不好的问题,没有哪个 RC 是专属哪个协议的。

楼主的需求就是一种非常硬性的CBR码率控制解决方案,这种解决方案要做到每一个帧的输出比特几乎相同(或误差相当小,甚至小到可以忽略不计)。上面诸多同仁的讨论中已经指出,通过插入(无效的)比特来填充帧编码的比特是一种合理的解决方案,我也认为这可能是必要的一种解决方法了。

我是这样考虑这个问题的:

其一:如果不计编码次数,我们可以对确定的一帧枚举若干给定QP值的编码结果,然后选取不超过但最接近目标比特率的帧编码QP,再填充无效比特;也可以在选择出QP值的基础上,做宏块级枚举QP,微调QP值,以达到更接近目标比特率。这样的一种解决方案想来没有人会喜欢,因为反复编码次数太多,效率太低。但是这种方法可以近最大可能地保留有效比特。

其二:按照楼主的这个需求和您给出的图示,我发现您的应用在1280X534,甚至是1080p。目标比特率以Mkbps为单位,在24Hz和30Hz,在高清画质上做编码。我的经验是,如果给定的比特率足够高,即将此问题放在中高带宽下的码率控制的讨论中,则楼主的问题才具有现实的意义。因为中高比特率下的码率控制要比中低比特率下的好控制的多。

我对这个问题非常感兴趣,若有空闲希望做进一步的深入。稍早些时候我也考虑过这个问题,但是限于知识面太窄,不清楚具体是否有价值作这个问题。楼主在讨论中给出的应用需求和相关背景非常具有参考意义。

我希望给楼主请教一个问题:我看到你给出的图是用bitrate viewer 这个应用程序作图。以前我没有见过,效果还挺好。我想问,这个应用程序是您自己写的还是哪里可以提供的呢?

今晚太困,话不成句,若有闲暇,后作修订。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

博文声明

本博客用于分享学习笔记 欢迎大神指正,我们互相学习交流,共同成长进步! 博客首页:秋叶夏风的博客

【经验分享】工程开发与Coding规范

今天分享分为两部分 :) PART01 工程开发代码规范分享/ PART02 关于某易云自动签到听歌分享- 5Mins DevCoding Rule: PART 1 了解真实工程开发🏗..... 本篇内容分享的宗旨: 学长工作经验之谈仅作分享🏷 Ready,Go 代码管理——工具篇 •工程上首先需要…

过滤器与拦截器区别

过滤器与拦截器区别 参考:http://www.cnblogs.com/dreamroute/p/4198087.html?utm_sourcetuicool 过滤器 过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。它是随你的web应用启动而启动的,只初始化一次,以后就…

二进制-高效位运算

数独 数独是介绍位运算的好例子,运用位运算和不运用效率差别还是挺大的。我们先看数独需求: 1、当前数字所在行数字均含1-9,不重复 2、当前数字所在列数字均含1-9,不重复 3、当前数字所在宫(即3x3的大格)数字均含1-9&a…

pytorch resnet50_PyTorch终于能用上谷歌云TPU,推理性能提升4倍,我们该如何薅羊毛?...

晓查 发自 凹非寺量子位 报道 | 公众号 QbitAIFacebook在PyTorch开发者大会上正式推出了PyTorch 1.3,并宣布了对谷歌云TPU的全面支持,而且还可以在Colab中调用云TPU。之前机器学习开发者虽然也能在Colab中使用PyTorch,但是支持云TPU还是第一次…

x264里的2pass指的是什么意思? x264源代码分析2.encode()

A:x264里的2pass指的是什么意思?另外stat是什么意思, 比如有个参数--stats <string> Filename for 2 pass stats [/"%s/"]/n", defaults->rc.psz_stat_out );stats在这是什么意思? 2pass是2次编码的意思&#xff0c;stats是统计文档的名称&a…

项目启动居然如此重要!

项目的启动阶段比较短&#xff0c;项目经理往往容易忽视这个阶段&#xff0c;但是&#xff0c;项目的启动却具有着重要的意义。 定基调&#xff1a; 基调包括工作的节奏、团队氛围和沟通风格等。 一首歌的第一句决定了这首歌的基调&#xff0c;如何唱好这第一句就是项目启动所要…

mysql数据库导入导出文件sql文件

window下 1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u dbuser -p dbname > dbname.sql 2.导出一个表 mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名 mysqldump -u dbuser -p dbname users> dbname_users.sql 3.导出…

Android Studio主题设置、颜色背景配置

2019独角兽企业重金招聘Python工程师标准>>> color-themes 效果展示 打开http://color-themes.com/有很多样式可供选择 1. Monokai Sublime Text 3(color theme) 2. Solarized Light (color theme) 3. Visual Studio 2015 Dark(color theme) 导入方式 下载主…

JavaScript中的函数

js函数 *第一种是使用function语句定义函数 function abc(){alert(abc); }*第二种是在表达式中定义函数 var 函数名 function\(参数1&#xff0c;参数2&#xff0c;…\){函数体};//例如&#xff1a;//定义var add function\(a,b\){return ab;}//调用函数document.write\(a…

x264源代码分析1。fread()

相关说明:1. 使用版本: x264-cvs-2004-05-11 2. 这次的分析基本上已经将代码中最难理解的部分做了阐释,对代码的主线也做了剖析,如果这个主线理解了,就容易设置几个区间,进行分工阅读,将各个区间击破了. 3. 需要学习的知识:a) 编码器的工作流程.b) H.264的码流结构,像x264_sp…

在centos下安装pycrypto报错 RuntimeError: autoconf error

解决&#xff1a;yum -y install gcc File "/usr/lib64/python3.6/distutils/dist.py", line 974, in run_command cmd_obj.run() File "/usr/lib64/python3.6/distutils/command/build.py", line 135, in run self.run_command(cm…

Java多线程实现异步调用

在Java平台,实现异步调用的角色有如下三个角色&#xff1a;调用者、 提货单 、真实数据&#xff0c;一个调用者在调用耗时操作,不能立即返回数据时,先返回一个提货单 .然后在过一断时间后凭提货单来获取真正的数据.去蛋糕店买蛋糕&#xff0c;不需要等蛋糕做出来(假设现做要很长…

sql server 2008 r2卸载重装_免费下载:Intouch软件、Windows操作系统、SQL数据库,VB6.0、C#...

为大家整理了常用的Windows操作系统和安装软件&#xff0c;基本上都是经过我们项目测试OK的版本&#xff0c;以后项目调试就齐全了&#xff0c;不用再“东奔西走”&#xff0c;“小鹿乱撞”了。整理不易&#xff0c;若对您有帮助请关注并转发&#xff0c;以便帮助到更多的人。I…

Android ToolBar 使用完全解析

ToolBar简介 ToolBar是Android 5.0推出的一个新的导航控件用于取代之前的ActionBar&#xff0c;由于其高度的可定制性、灵活性、具有Material Design风格等优点&#xff0c;越来越多的应用也用上了ToolBar&#xff0c;比如常用的知乎软件其顶部导航栏正是使用ToolBar。官方考虑…

【零散积累】传输文件(sz/rz/scp命令)

来自wiki迁移页面路径&#xff1a;刘旺的主页 / 个人零散积累 / 01> 传输文件&#xff08;sz/rz/scp命令&#xff09; 工作中的传输文件会出现在linux之间&#xff0c;或者linux与windows之间。 一、怎么实现linux与windows之间的文件传输&#xff1f; 1.sz和rz是什么 s…

x264_macroblock_cache_load()

功能:完成将已编码数据参数和待编码数据装入到h->mb.cache中,下图是BUF中存储的数据在以MB为单位的时候的存储顺序 x264_macroblock_cache_load( h, i_mb_x, i_mb_y );//是把当前宏块的up宏块和left宏块的intra4x4_pred_mode&#xff0c;non_zero_count加载进来&#xff0c…

U(优)盘安装FreeBSD-9.0+GNOME_lite桌面

贴图在我的主页&#xff1a;http://hi.baidu.com/daodej/item/26313f4fc3db51ef1f19bcc6 修订于&#xff1a;2012/07/04 标题&#xff1a;U(优)盘安装FreeBSD-9.0GNOME_lite桌面&#xff0c;boot0启动XP(Windows)、FreeBSD、Ubuntu(Linux)三系统 【黑括号表示说明&#xff0c;中…

【零散积累】 vim常用操作

类型 操作 含义 删除 dd 删除游标所在的一整行(常用) ndd n为数字。删除光标所在的向下n行&#xff0c;例如20dd则是删除光标所在的向下20行 d1G 删除光标所在到第一行的所有数据 dG 删除光标所在到最后一行的所有数据 d$ 删除光标所在处&#xff0c;到该…

生活中常见物联网实例_物联网网关常见问题解答(一)

1.为什么物联网解决方案需要网关&#xff1f;物联网网关弥合了设备&#xff0c;传感器&#xff0c;设备&#xff0c;系统和云之间的通信鸿沟。通过系统地连接云&#xff0c;物联网网关提供了本地处理和存储&#xff0c;并具有基于传感器输入的数据自主控制现场设备的功能。物联…