C++音视频八股文(视频处理基础)
1. 如何实现视频的缩放?需要注意什么?
- 实现方式:使用FFmpeg的scale滤镜或libswscale库进行缩放。命令行使用-vf scale参数,代码中使用sws_scale函数
- 缩放方法:指定目标分辨率:scale=1280:720保持宽高比:scale=1280:-1(高度自动计算)或scale=-1:720按比例缩放:scale=iw0.5:ih0.5(缩小到50%)适应尺寸:scale='min(1920,iw)':'-1'(宽度不超过1920)
- 缩放算法:bilinear:双线性插值,速度快质量一般,默认算法bicubic:双三次插值,质量较好速度中等lanczos:质量最好但速度慢,适合高质量缩放neighbor:最近邻,速度最快但质量差spline:样条插值,质量和速度平衡
- 注意事项:宽高必须是偶数(H.264要求),使用scale=1280:720:force_original_aspect_ratio=decrease放大会损失清晰度,尽量避免缩小可以降低码率和文件大小选择合适的缩放算法平衡质量和性能注意保持宽高比避免画面变形
- 性能优化:硬件加速缩放(使用GPU),批量处理时复用SwsContext,选择合适的像素格式
2. 如何实现视频的裁剪?
- 裁剪定义:从视频画面中截取指定区域,改变画面的可视范围
- 实现方式:使用FFmpeg的crop滤镜,语法为crop=width:height:x:y
- 参数说明:width和height:裁剪后的宽度和高度x和y:裁剪区域左上角的坐标(相对于原视频)可以使用表达式:crop=iw/2:ih/2:iw/4:ih/4(裁剪中心1/4区域)
- 常见用法:裁剪中心区域:crop=1280:720:(iw-1280)/2:(ih-720)/2去除黑边:crop=in_w:in_h-100:0:50(去除上下黑边)16:9转4:3:crop=ih4/3:ih:(iw-ih4/3)/2:0提取左半部分:crop=iw/2:ih:0:0
- 时间裁剪:使用-ss和-t参数裁剪时间段,-ss指定开始时间,-t指定持续时间,-to指定结束时间
- 注意事项:裁剪尺寸要是偶数坐标不能超出原视频范围裁剪会改变分辨率,可能需要调整码率时间裁剪时-ss放在-i前面可以快速定位(关键帧)
3. 如何实现视频的旋转?
- 旋转方式:使用FFmpeg的transpose滤镜或rotate滤镜
- transpose滤镜:用于90度旋转和翻转transpose=0:逆时针旋转90度并垂直翻转transpose=1:顺时针旋转90度transpose=2:逆时针旋转90度transpose=3:顺时针旋转90度并垂直翻转
- rotate滤镜:用于任意角度旋转rotate=PI/4:旋转45度(弧度制)rotate=30*PI/180:旋转30度可以指定旋转中心和填充颜色
- 元数据旋转:使用-metadata:s:v rotate=90设置旋转元数据,播放器自动旋转,不重新编码,速度快但兼容性差
- 常见场景:手机竖屏视频转横屏:tra
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
C++八股文全集 文章被收录于专栏
本专栏系统梳理C++技术面试核心考点,涵盖语言基础、面向对象、内存管理、STL容器、模板编程及经典算法。从引用指针、虚函数表、智能指针等底层原理,到继承多态、运算符重载等OOP特性从const、static、inline等关键字辨析,到动态规划、KMP算法、并查集等手写实现。每个知识点以面试答题形式呈现,注重原理阐述而非冗长代码,帮助你快速构建完整知识体系,从容应对面试官提问,顺利拿下offer。
查看19道真题和解析