如何压缩视频-ffmpeg

引子

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

背景

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

可以看到分辨率是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

效果

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

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

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

可以看到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)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

### 回答1: mobile-ffmpeg-full 是一个基于 FFmpeg 的移动端多媒体处理库。FFmpeg 是一个开源的多媒体处理工具,可以对音频、视频、字幕等多种媒体文件进行编解码和转换。 mobile-ffmpeg-full 是移动端的一个扩展,为移动设备提供了对 FFmpeg 的广泛支持。它可以在 Android 和 iOS 平台上使用,并且提供了丰富的功能,包括音频转码、视频剪辑、添加水印、合并音视频、获取视频缩略图等。 使用 mobile-ffmpeg-full 可以方便地对移动设备上的多媒体文件进行处理。它提供了简洁的 API 接口,使得开发者能够轻松地调用各种功能。同时,它还提供了高效的处理能力,能够在移动设备上快速地处理大量的媒体文件。 移动设备的媒体处理需求越来越多样化,mobile-ffmpeg-full 提供了一个强大而灵活的解决方案。它不仅可以满足常见的媒体处理需求,还支持自定义的编码和解码参数,使得开发者能够根据具体需求进行定制。 总而言之,mobile-ffmpeg-full 是一个功能强大、易于使用的移动端多媒体处理库,它为移动设备上的媒体处理提供了丰富的功能和高效的性能。无论是开发媒体编辑应用,还是进行媒体文件处理,在移动设备上使用 mobile-ffmpeg-full 都是一个不错的选择。 ### 回答2: mobile-ffmpeg-full是一款为移动设备开发的功能强大的FFmpeg库。FFmpeg是一个开源的音频和视频处理工具,可以处理各种格式的音视频文件。 mobile-ffmpeg-full提供了完整的FFmpeg功能,可以在移动设备上进行音视频的转码、剪辑、解码等操作。它支持多种音频和视频格式,包括常见的MP3、MP4、AVI等,也支持高级的音频编码格式和视频编码格式。 使用mobile-ffmpeg-full,我们可以在移动设备上灵活地处理音视频文件。比如,我们可以将一个音频文件转为另一种格式,或者将一个视频文件裁剪成指定时长。我们还可以添加水印、调整音量、变速播放等。 mobile-ffmpeg-full易于集成到移动应用程序中。它提供了简洁的API接口,开发者可以轻松使用它的功能。同时,它也提供了详细的文档和示例代码,帮助开发者快速上手并解决问题。 总的来说,mobile-ffmpeg-full是一种非常实用的工具,可以帮助开发者在移动设备上进行音视频处理。它具有强大的功能和易用的特点,让我们可以更加灵活地处理音视频文件,满足不同场景下的需求。无论是开发媒体应用还是进行多媒体处理,mobile-ffmpeg-full都是一个很好的选择。 ### 回答3: mobile-ffmpeg-full 是一款针对移动设备开发的完整版 FFmpeg 库。FFmpeg 是一个开源的跨平台音视频处理工具集,拥有广泛的应用领域。mobile-ffmpeg-full 提供了完整的 FFmpeg 功能,使移动设备具备强大的音视频处理能力。 mobile-ffmpeg-full 的特点包括以下几点。首先,它支持多种音视频格式的解码和编码,可以处理包括 MP4、MKV、MOV、FLV、MP3、AAC 等常见的音视频格式。其次,它提供了丰富的音视频处理功能,包括剪辑、拼接、转码、压缩、添加音视频轨道、提取音频等,满足了开发者对音视频处理的各种需求。此外,mobile-ffmpeg-full 还支持图像处理功能,如截图、添加水印等。 这个库的设计目标是在移动设备上提供高效的音视频处理能力。它采用了精简的架构和优化的算法,以提高音视频处理的性能和效率。同时,mobile-ffmpeg-full 支持多线程工作模式,可以充分利用多核处理器的优势,实现更快的处理速度。 开发者可以通过添加 mobile-ffmpeg-full 库到自己的移动应用程序中,实现各种复杂的音视频处理需求。无论是开发视频编辑软件、媒体播放器还是音视频社交应用,mobile-ffmpeg-full 都可以提供强大的支持。此外,移动设备上的 FFmpeg 库还可以应用于音频视频剪辑、分割、转码、加速、拼接等方面的需求,满足用户在移动端的各种音视频处理需求。 总之,mobile-ffmpeg-full 是一款强大而且灵活的移动设备音视频处理库,为移动应用开发者提供了完整的 FFmpeg 功能和高效的处理能力,可以实现各种音视频处理需求。无论是开发专业的视频编辑软件,还是实现简单的音视频处理功能,mobile-ffmpeg-full 都是一个理想的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值