ffmpeg 编码生成mp4文件大小 码率控制
来源:互联网 发布:sai软件绘画电脑版 编辑:程序博客网 时间:2024/06/15 23:03
JP_ASSERT(NULL != pCodecCtx);
pCodecCtx->codec_id = eVideoCodecId;
pCodecCtx->gop_size = 12;
pCodecCtx->time_base.den = lFrameRate;
pCodecCtx->time_base.num = 1;
pCodecCtx->pix_fmt = AV_PIX_FMT_YUV420P;
pCodecCtx->width = lWidth;
pCodecCtx->height = lHeight;
if (iBitRate <= 0)
{
pCodecCtx->bit_rate = lWidth*lHeight*5;
if (AV_CODEC_ID_H264 != eVideoCodecId)
{
pCodecCtx->bit_rate *= 2;
}
}
else
{
//保证为4的倍数 //keivin 2017.04.26
pCodecCtx->bit_rate = (iBitRate+2)/4;
抄与网络:
码率控制对于在线视频比较重要。因为在线视频需要考虑其能提供的带宽。
那么,什么是码率?很简单:
bitrate = file size / duration
比如一个文件20.8M,时长1分钟,那么,码率就是:
biterate = 20.8M bit/60s = 20.8*1024*1024*8 bit/60s= 2831Kbps
一般音频的码率只有固定几种,比如是128Kbps,
那么,video的就是
video biterate = 2831Kbps -128Kbps = 2703Kbps。
说完背景了。好了,来说ffmpeg如何控制码率。
ffmpg控制码率有3种选择,-minrate -b:v -maxrate
-b:v主要是控制平均码率。
比如一个视频源的码率太高了,有10Mbps,文件太大,想把文件弄小一点,但是又不破坏分辨率。 ffmpeg -i input.mp4 -b:v 2000k output.mp4
上面把码率从原码率转成2Mbps码率,这样其实也间接让文件变小了。目测接近一半。
不过,ffmpeg官方wiki比较建议,设置b:v时,同时加上 -bufsize
-bufsize 用于设置码率控制缓冲器的大小,设置的好处是,让整体的码率更趋近于希望的值,减少波动。(简单来说,比如1 2的平均值是1.5, 1.49 1.51 也是1.5, 当然是第二种比较好) ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4
-minrate -maxrate就简单了,在线视频有时候,希望码率波动,不要超过一个阈值,可以设置maxrate。 ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4
原来 pCodecCtx->bit_rate = lWidth*lHeight 1600*1200直接取的编码分辨率 ,1分钟生成文件20mb,太大了,
最后修改这个取1/4大小,文件真就变成5mb,没发现视频质量有明显差别!
- ffmpeg 编码生成mp4文件大小 码率控制
- 利用FFmpeg转码生成MP4文件
- 运用ffmpeg生成MP4文件
- 运用ffmpeg生成MP4文件
- 运用ffmpeg生成MP4文件
- 运用ffmpeg生成MP4文件
- 运用ffmpeg生成MP4文件
- 运用ffmpeg生成MP4文件
- ffmpeg编码jpg为mp4文件
- 码率控制 ffmpeg
- ffmpeg码率控制
- ffmpeg码率控制
- ffmpeg代码笔记4:获取MP4文件的码率
- 在Andorid中使用FFmpeg实现YUV编码为MP4
- 使用ffmpeg将视频转为x264编码的mp4文件
- ffmpeg的码率控制
- ffmpeg的码率控制
- ffmpeg 码率控制设置
- 学习笔记---枚举类型、联合体、自定义类型
- jsp核心标签库详情例子
- 杨冰之:数据基因与政务大数据发展浅见
- 如何使用Junit进行单元测试
- Android emoji显示
- ffmpeg 编码生成mp4文件大小 码率控制
- 读《java编程思想》
- Git获取远端分支
- 【微信小程序】小程序的动态传参
- Tomcat配置虚拟路径,供Web项目访问以外的静态资源
- GIT 使用
- ECharts
- 根据桌面大小调整窗体大小
- java maven项目启动提示 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderList