x264改变输出分辨率的算法<转>
x264改变输出分辨率的算法
在某些应用场景下,x264的输入视频分辨率与接收端输出的视频分辨率不同。
例如编码端摄像头采集到的YUV数据为1280x720,而接收端视频显示窗口为640x480。
对于这种场景,一般的处理方式是:
源端:采集,编码,传输 720p的码流
收端:接收,解码720p的码流,缩放到480p去显示。
这种方式的劣势在于编码,传输了接收端用不到的大分辨率码流。
一种改进的方式是在源端缩放720p的视频输入数据:
源端:采集720p,缩放到480p,输入480p给x264编码器编码,传输 480p的码流
收端:接收,解码,显示480p的码流。
这种方式处理掉了传输大分辨率码流的问题,但不是最有效率的方式。因为缩放本身也有计算量,同时增加了一次一帧数据读写的操作。
研究x264的代码发现,x264通过以下函数实现输入源图像到准备编码帧的格式转换:
int x264_frame_copy_picture( x264_t *h, x264_frame_t *dst, x264_picture_t *src );
其中有从src->img.planet调捡数据拷贝到dst->plane的过程,目的是实现src和dst之间颜色空间转换(x264内部用的原始数据帧,参考帧都是NV12/NV16格式, src如果是YV12需要转成NV12)。x264在这里假设src和dst的分辨率是相同的,只做颜色空间转换。既然这里有一次因为色彩空间转换而引起的数据搬移,那么可以把图像缩放操作加入其中一并完成,这样就可以达到改变输出分辨率的需求。
ffmpeg的sws_scale函数可以一次性的实现输入图像和输出图像之间分辨率以及颜色空间的转换。在这里如果发现输入输出分辨率不同,就用sws_scale函数替换掉原来plane_copy,plane_copy_interleave函数。在计算量几乎不变的情况下(缩放计算稍微增加一些计算量,但一帧数据读写操作没有增加),完美实现改变输出分辨率的功能。
http://blog.csdn.net/huibailingyu/article/details/43206107
x264改变输出分辨率的算法<转>的更多相关文章
- ubuntu添加自定义vga输出分辨率
Ubuntu有点折腾人....但是在折腾之后发现它更加方便,而且懂得更多的东西 最近在调试一个视频采集芯片的驱动,主要是接收vga输入和hdmi输入,在实验的过程中遇到了一个恼火的问题,就是同一台电脑 ...
- (64)Wangdao.com第十天_JavaScript 对象的 toString() 方法改变输出
JavaScript 对象的 toString() 方法改变输出 在平常,我们 console.log(对象); // 会打印 [Object Object] 但是我们想要更详细的输出,此时,我 ...
- JPEG压缩图像超分辨率重建算法
压缩图像超分辨率重建算法学习 超分辨率重建是由一幅或多幅的低分辨率图像重构高分辨率图像,如由4幅1m分辨率的遥感图像重构分辨率0.25m分辨率图像.在军用/民用上都有非常大应用. 眼下的超分辨率重建方 ...
- linux终端c语言改变输出字体颜色
Linux下C改变输出字体颜色 例: #include int main() { printf("\033[31mThis is RED.\n\033[0m"); return 0 ...
- CNN:扩张卷积输出分辨率计算
扩张卷积(Dilated convolutions)是另一种卷积操作,也叫做空洞卷积(Atrous convolution).相比于普通的卷积,相同的卷积核,空洞卷积能够拥有更大的感受野. 相同的卷积 ...
- CNN:转置卷积输出分辨率计算
上一篇介绍了卷积的输出分辨率计算,现在这一篇就来写下转置卷积的分辨率计算.转置卷积(Transposed convolution),转置卷积也有叫反卷积(deconvolution)或者fractio ...
- CNN:卷积输出分辨率计算
卷积是CNN非常核心的操作,CNN主要就是通过卷积来实现特征提取的,在卷积操作的计算中会设计到几个概念:步长(strides).补充(padding).卷积核(kernel)等,那卷积的输出分辨率计算 ...
- shell中使用echo命令改变输出显示样式
文本终端的颜色可以使用“ANSI非常规字符序列”来生成.举例:echo -e "\033[44;37;5m ME \033[0m COOL" 以上命令设置背景成为蓝色,前景白色,闪 ...
- python改变输出字体颜色==>colorama
colorama是python第三方库中一个可以改变输出流颜色的玩意儿, 安装可以通过: pip install colorama 简单介绍 from colorama import Fore, Ba ...
随机推荐
- spring boot 使用velocity模板(十六)
(不要使用这种模板了,spring boot最新版已经不支持了.使用FreeMarker吧:http://blog.csdn.net/clementad/article/details/5194262 ...
- vue2 过渡动画
<body> <div id="app"> <transition name="move"> // transition里面 ...
- UVALive 4639 && SPOJ SPOINTS && POJ 3805 && AOJ 1298 Separate Points 求两个凸包是否相交 难度:3
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- SGU 140. Integer Sequences 线性同余,数论 难度:2
140. Integer Sequences time limit per test: 0.25 sec. memory limit per test: 4096 KB A sequence A is ...
- 记录下返回list给前端 遇到 $ref":"$.data.*** 问题
1.通过对象返回给前端,对象里面有三个list 2.一个父list 2个子list 子list中的对象 是通过for循环父list按照某个条件放进去的 3.直接放进去会出现 $ref":& ...
- Xcode 7.0 Could not find developer disk image
在使用Xcode 7的真机运行的时候, 出现Could not find developer disk image. 解决方法:先关闭Xcode.再从Xcode 6.4中,拷贝8.4 (12H141) ...
- (转)Web系统大规模并发——电商秒杀与抢购
电商的秒杀和抢购,对我们来说,都不是一个陌生的东西.然而,从技术的角度来说,这对于Web系统是一个巨大的考验.当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要.这次我们 ...
- 经典排序方法 python
数据的排序是在解决实际问题时经常用到的步骤,也是数据结构的考点之一,下面介绍10种经典的排序方法. 首先,排序方法可以大体分为插入排序.选择排序.交换排序.归并排序和桶排序四大类,其中,插入排序又分为 ...
- ssh框架中spring整合hibernate的配置文件模板(带详细注释)
applicationContext.xml的配置文件模板 <?xml version="1.0" encoding="UTF-8"?> <b ...
- 基于typescript 强大的 nestjs 框架试用
nestjs 一个nodejs 的graphql 框架 安装 npm i -g @nestjs/cli 初始化项目 nest new dalong 运行demo 使用yarn yarn start 添 ...