ffmpeg maxrate 导致转码输出的内容包含随机性

https://trac.ffmpeg.org/wiki/Limiting the output bitrate

问题

领导提出了一个问题,为什么转码后的视频大小字节数据都不一样,这问到我了,一时语塞。查一下吧,没有什么资料支撑。主动试一下。

尝试

首先尝试一下直接转码,

第一次尝试

ffmpeg -i 1.mp4 -f mp4 1_a.mp4

ffmpeg -i 1.mp4 -f mp4 1_b.mp4

出来的数据一致,哎呦喂。跟想的不一样啊。难道是这样ffmpeg转的太简单。

第二次尝试

ffmpeg -i 1.mp4 -b:v 800K -f mp4 1_a.mp4

ffmpeg -i 1.mp4 -b:v 800K -f mp4 1_b.mp4

嗯, 没错,还是一样。

无数次尝试

二次转码 -> 输出一致

增加码率等一系列参数 -> 输出一致

增加 maxrate -> 不一样了

maxrate 最大码率限制

简单说一下,这个的意思。

设置了maxrate,可以很好的限制生成的码流的实时比特率。这个实时判断的标准就是根据maxrate结合bufsize使用。这样理解一下,比如设置的平均码率b:v和最大码率都是2000k,bufsize是1000k,则每次生成的数据一旦把1000k的缓冲区填满就会触发码率的检测是否超过最大码率maxrate 2000k的标准。这样就比较频繁了, 而且实时性很高。ffmpeg又是一个多线程处理的程序。想要实时控制码率,又要保持生成数据一致,难度挺大的。所以出现这样的现象是正常的。

总结

确实把maxrate去掉之后,转码生成的数据就一致了。但是maxrate保证的是数据的实时码率不会过高。这个还是很有必要的。因为这个可以保证带宽压力一直在maxrate之下,避免看到一半画面一复杂卡了。但是这个确实会损失很多的画质。结合场景来吧。所以没必要去掉。不一样就不一样吧。挺好的。

相关推荐
zslefour1 天前
使用ffmpeg遍历获取音频文件相关信息
ffmpeg
Android系统攻城狮1 天前
Linux FFmpeg深度解析之avcodec_parameters_from_context调用流程与实战(十六)
linux·运维·ffmpeg·音视频进阶·ffmpeg音视频·车载音视频进阶
Android系统攻城狮1 天前
Linux FFmpeg深度解析之avcodec_alloc_context3调用流程与实战(十四)
linux·运维·ffmpeg·车载音视频·音视频进阶·ffmpeg音视频进阶
菜鸟小芯1 天前
【Quectel Pi M2 实战】Day3 USB 摄像头图像采集:拍照、录像与踩坑记录(V4L2 + FFmpeg)
ffmpeg·嵌入式
Android系统攻城狮2 天前
Linux FFmpeg深度解析之av_dump_format调用流程与实战(十一)
linux·运维·服务器·ffmpeg·1024程序员节·音视频进阶
Android系统攻城狮2 天前
Linux FFmpeg深度解析之avcodec_find_decoder调用流程与实战(十二)
linux·运维·服务器·ffmpeg·1024程序员节·音视频进阶
Hommy882 天前
【直播切片工作台】第23章:媒体探测与转码:ffprobe 与 ffmpeg 封装
人工智能·ffmpeg·直播切片
码匠许师傅2 天前
【C++三方组件】FFmpeg:音视频处理的瑞士军刀
c++·ffmpeg·音视频
全栈探索者3 天前
从素材到成片:ffmpeg 拼接、转码与字幕,一条流水线交付
macos·ffmpeg·aigc·comfyui·视频剪辑
扶尔魔ocy3 天前
【QT+FFmpeg】知识点编目及传送门
qt·ffmpeg