如何压缩视频-ffmpeg

这篇具有很好参考价值的文章主要介绍了如何压缩视频-ffmpeg。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引子

压缩视频大多使用ffmpeg,我们需要思考清楚,为什么需要压缩视频。是因为用户体验(秒开、流畅)问题?还是因为成本(带宽、存储)问题?还是因为运营(广告、互动)需要?我们在进行压缩之前要锚定好关键目标,然后平衡取舍。

背景

最初我拿到的需求是用户播放卡顿,需要解决。使用ffmpeg简单分析视频源,基本信息包括分辨率、帧率、码率这几个关键数据,参考信息包括文件格式、编码格式、像素格式等;(音频占用文件不大,先放低优先级)

ffmpeg 视频压缩,音视频开发进阶,ffmpeg,音视频,视频编解码,视频编码,H264

可以看到分辨率是1080x1928,帧率是30fps,码率是13095kbps,文件就是mp4,编码格式是h264(main),像素格式yuv420p;文件时长00:01:10.1,1分10秒;按这个码率,视频部分尺寸是13095x70=916650kb,这里是bit位,换算大KB是114581.25,换算MB是约111.90MB。

我们简单评估一下对用户网络的要求,如果缓冲是500ms,那么13095x0.5=6547.5kb=818.4375KB=约0.8MB的下载速度,还是比较苛刻的,因为网络运营商给大家报的是kbps是小b,换算一下相当于要求6.4Mb。

解决

针对以上问题,我的解决思路如下:
1、手机播放端一般不需要这么高分辨率,降低720p;
2、帧率30fps也可以适当降低,降低到22~25都可以;
3、码率压缩,选用-crf固定码率比压缩/-b:v最高码率压缩方式都可以;
4、视频编码h264(main)可以调整到h264(high);
以上4个参数配置压缩命令如下:
ffmpeg -y -i xx.mp4 -c:a copy -c:v libx264 -profile:v high -r 30 -crf 30 -s 720x1080 xx-out.mp4
简单介绍参数:
-y:表示输出文件覆盖
-i:表示输入文件
-c:a:表示音频部分编码,copy表示直接复制到新文件
-c:v:表示视频部分编码,libx264表示使用h264编码
-profile:v:h264编码参数,使用更紧凑的压缩算法
-r:表示视频帧率,30fps
-crf:表示码率应用固定码率比,从0~500,越大码率越低,一般18~32效果较好
-s:视频分辨率裁剪,720x1080表示裁剪成720p

效果

以上命令执行完成后效果如下:

ffmpeg 视频压缩,音视频开发进阶,ffmpeg,音视频,视频编解码,视频编码,H264

最明显码率降低到926kbps,其他都按照参数发生变化,新文件体积优化到926x70=64820kb,约7.91MB。从111.90MB降低到7.91MB,优化效果是很好的。对用户网络带宽要求大约降低到463kb,比起6.4Mb来说只是零头。

是不是就可以达成秒开了呢?我们再回过头看看moov头的情况:

ffmpeg 视频压缩,音视频开发进阶,ffmpeg,音视频,视频编解码,视频编码,H264

可以看到ftyp、free是文件标识,不用理会;mdat是视频+音频数据存储,占用8030053字节,接下来才是moov头,我们知道视频播放会先获取moov头才知道具体的元数据信息,如何编码,分辨率几何之类的。一般视频播放器也会有优化,就是先读取视频头前面一定数量字节,如果还没有解析到moov头,会重新发起请求从文件尾部读取一定数量字节,用于补充解析moov。理想状态肯定是第一次缓冲数据就能解析moov头,并继续缓冲数据,而不是断开再请求,解析moov头,再请求缓冲数据。所以需要针对moov头进行前移操作。
具体的ffmpeg命令如下:
-movflags +faststart
在上述命令中增加以上参数即可。最终命令如下:
ffmpeg -y -i xx.mp4 -c:a copy -c:v libx264 -profile:v high -r 30 -crf 30 -s 720x1080 -movflags +faststart xx-out.mp4

扩展

基本针对视频优化我们先介绍到这里,上面是最基本的优化,其他的优化我们也基于上面继续推进。
1、更换编码格式,尝试h265(需要兼容苹果qt),尝试vp9,尝试av1;
2、视频切片,使用hls+ts的m3u8文件格式;
3、应用2-pass优化码率;
4、最重要引进视频质量评价体系,ssim、psnr、vmaf;
5、尝试多分辨率分发,480p、720p、1080p;
6、网络优化,cdn加速;
7、其他小优化;
在实际实践过程中,还是需要不断调整应用,遇到问题解决问题;选定优化目标,选择质量比对参数,就可以不断调优上述参数,达到最终的优化平衡。

本文福利, 免费领取C++音视频学习资料包、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓文章来源地址https://www.toymoban.com/news/detail-694867.html

到了这里,关于如何压缩视频-ffmpeg的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux 音视频架构 linux音视频开发

    转载 mob6454cc65110a 2023-07-26 22:27:01 文章标签 linux 音视频架构 ci QT 视频教程 文章分类 架构 后端开发 阅读数 117 目录 前言 1、软件工具准备 a. 录音软件 b. 录屏软件 c. 摄像头软件 d. 安卓屏幕操作软件 e. 视频剪辑软件

    2024年02月07日
    浏览(76)
  • Qt音视频开发45-音视频类结构体参数的设计

    视频监控内核组件重构和完善花了一年多时间,整个组件个人认为设计的最好的部分就是各种结构体参数的设计,而且分门别类,有枚举值,也有窗体相关的结构体参数,解码相关的结构体参数,同时将部分常用的结构体参数的获取和设置单独提供了函数,参阅海康大华等大

    2024年02月05日
    浏览(75)
  • 5G到来未来五年,做纯应用的Android开发者如何学习通过音视频破局?附《578页NDK七大模块学习宝典》(1)

    “只懂应用层,目前越来越多的企业要求音视频技术,我该怎么办?” “到底该不该学习音视频,怎么抉择?\\\" “想从事音视频开发,该怎么入门?如何进阶 ?” 如果你有这样的问题,从侧面反映了你是一个积极向上,想不断努力来提升自己的人。 先从一个简单的问题聊起

    2024年04月23日
    浏览(63)
  • Qt/C++音视频开发46-音视频同步保存到MP4

    用ffmpeg单独做视频保存不难,单独做音频保存也不难,难的是音视频同步保存到MP4中,重点是音视频要同步,其实这也不难,只要播放那边音视频同步后的数据,写入到文件即可。最难的是在播放过程中不断随机的切换播放进度,而且还会暂停播放、暂停录制的情况出现,这

    2024年02月17日
    浏览(72)
  • 【音视频原理】视频帧的 I P B 帧概念 ① ( 码率 / 帧率 / 分辨率 视频信息 | I 帧 - 内部编码帧 | I 帧 - 关键帧压缩法 | P 帧 - 前向预测帧 )

    使用 MediaInfo 软件 打开一个 mp4 文件 , 查看其属性 ; 该视频的属性如下 : 码率 : 212kb/s , 这是 视频文件 的 视频信息 在 单位时间内的 数据流量 , 码率越大 , 单位时间内采样率越大 , 数据流精度越高 , 视频质量越高 ; 视频帧率 : 5fps , 1 秒中有 5 帧的信息 , 帧率越高 , 视频越流畅

    2024年02月20日
    浏览(46)
  • 音视频开发常见问题(五):视频黑屏

    本文介绍了视频黑屏的可能原因和解决方案。主要原因包括用户主动关闭视频、网络问题和渲染问题。解决方案包括优化网络稳定性、确保视频渲染视图设置正确、提供清晰的提示、实时监测网络质量、使用详细的日志系统、开启视频预览功能、使用视频流回调、处理编解码

    2024年02月08日
    浏览(74)
  • 【音视频原理】视频帧的 I P B 帧概念 ② ( B 帧 - 双向内插帧 | 画面组 Group of Pictures 概念 | 各类型帧解码错误影响 | 画面组编解码顺序 | 常用视频压缩算 )

    B 帧 全称 \\\" 双向内插帧 ( Bi-directional Predicted Frames ) \\\" , 采用 双向预测编码方式 , 也就是 B 帧 记录的是 本帧 B 帧 与 前后 I 帧 或 P 帧 的差别 ; 注意 : B 帧 需要依赖于其前的最近的一个 I 帧 或者 P 帧 及其后的最近的一个 P 帧 进行解码 , B 帧 不能 依赖与 B 帧 ; B 帧 依赖的 前一

    2024年01月25日
    浏览(46)
  • 5G时代下,Android音视频强势崛起,我们该如何快速入门音视频技术?

    作为Android开发者的我们到底应不应该上音视频这条船? 接下来一起分析下。 大趋势 从未来的大趋势来看,随着5G时代的到来,音视频慢慢变成人们日常生活中的必需品。除了在线教育、音视频会议、即时通讯这些必须使用音视频技术的产品外,其它的产品也需要加入音频、

    2024年04月15日
    浏览(79)
  • 【音视频】如何播放rtsp视频流

    现阶段直播越来越流行,直播技术发展也越来越快。Webrtc和rtsp是比较火热的技术,而且应用也比较广泛。本文通过实践来展开介绍关于rtsp、webrtc的使用过程。 本文重点介绍如何播放rtsp视频流,通过ffplay方式以及VLC media player的方式来播放 可以参考上一篇博文:【音视频】基于

    2024年01月19日
    浏览(97)
  • FFmpeg 音视频开发工具

    目录 FFmpeg 下载与安装 ffmpeg 使用快速入门 ffplay 使用快速入门 1、FFmpeg 是处理音频、视频、字幕和相关元数据等多媒体内容的库和工具的集合。一个完整的跨平台解决方案,用于录制、转换和流式传输音频和视频。 官网:https://www.ffmpeg.org/ 源码:https://github.com/FFmpeg/FFmpeg。

    2024年02月15日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包