从视频分片转码的效率来看编码,解码效率
由于转码是非常耗时的操作。
为了加快视频文件的转码,对视频文件进行切分,分成多片,在多台机器并行执行,最后做合并来提升性能。以下做一个实验,对分片前后的数据做一个对比, 验证分片转码的性能提升效果。
1.原始 mov 转码为 mp4文件(不切片)
输入:218s 的视频文件,文件大小:215.3M,由 iPhone 11 Pro 拍摄的视频。 原始文件格式:
Duration: 00:03:38.22, start: 0.000000, bitrate: 7894 kb/s
Stream #0:0(und): Video: hevc (Main) (hvc1 / 0x31637668), yuv420p(tv, bt709), 1920x1080, 7676 kb/s, 29.97 fps, 29.97 tbr, 600 tbn, 600 tbc (default)
time(ffmpeg -i 4_minute_video.mov 4_minute_video.mp4)
real 5m42.127s
user 40m41.547s
sys 0m19.006s
218s的mov视频文件转码为mp4,转码耗时:342s
2.拆分成5段视频
time(~/workspace/video-splitter/ffmpeg-split.py -f 4_minute_video.mov -c 5)
实际的执行命令:
ffmpeg -i 4_minute_video.mov -vcodec copy -acodec copy -ss 0 -t 44 4_minute_video-1-of-5.movffmpeg -i 4_minute_video.mov -vcodec copy -acodec copy -ss 44 -t 44 4_minute_video-2-of-5.movffmpeg -i 4_minute_video.mov -vcodec copy -acodec copy -ss 88 -t 44 4_minute_video-3-of-5.movffmpeg -i 4_minute_video.mov -vcodec copy -acodec copy -ss 132 -t 44 4_minute_video-4-of-5.movffmpeg -i 4_minute_video.mov -vcodec copy -acodec copy -ss 176 -t 44 4_minute_video-5-of-5.mov
real 0m3.699s
user 0m0.503s
sys 0m0.892s
调整脚本, -ss 作用于输入文件:
ffmpeg -ss 0 -t 44 -i 4_minute_video.mov -vcodec copy -acodec copy 4_minute_video-1-of-5.movffmpeg -ss 44 -t 44 -i 4_minute_video.mov -vcodec copy -acodec copy 4_minute_video-2-of-5.movffmpeg -ss 88 -t 44 -i 4_minute_video.mov -vcodec copy -acodec copy 4_minute_video-3-of-5.movffmpeg -ss 132 -t 44 -i 4_minute_video.mov -vcodec copy -acodec copy 4_minute_video-4-of-5.movffmpeg -ss 176 -t 44 -i 4_minute_video.mov -vcodec copy -acodec copy -y 4_minute_video-5-of-5.mov
real 0m3.487s
user 0m0.382s
sys 0m0.760s
耗时几乎没有区别。
-ss 放在后面,作用于输出文件时,文件做了解码操作,解码的时间非常短。大约3秒钟,视频218秒。
分片的时间大约是视频时长的 1/70
可以这样测试解码+解封装的性能:
time(ffmpeg -i 4_minute_video.mov -f null -)
命令执行 25s。 这个时间比 ffmpeg -ss 切分的耗时要长很多, 说明做切片的时候不需要做完整的解码,只需要部分解码甚至不解码。
解码的耗时大约是视频时长的 11/100。(Mac Pro上的性能)
Null – FFmpeg
3.分段编码
前面对视频做了切片,分成了5片,下面分别对5个分片进行 mp4 转码。
time(ffmpeg -i 4_minute_video-1-of-5.mov 4_minute_video-1-of-5.mp4)
frame= 1321 fps= 19 q=-1.0 Lsize= 109386kB time=00:00:43.97 bitrate=20375.5kbits/s speed=0.636x
video:108648kB audio:690kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.043928%
real 1m9.403s
user 7m54.299s
sys 0m4.347s
time(ffmpeg -i 4_minute_video-2-of-5.mov 4_minute_video-2-of-5.mp4)
frame= 1321 fps= 20 q=-1.0 Lsize= 115025kB time=00:00:44.00 bitrate=21414.7kbits/s speed=0.667x
video:114288kB audio:690kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.041689%
real 1m6.275s
user 7m36.624s
sys 0m4.166s
time(ffmpeg -i 4_minute_video-3-of-5.mov 4_minute_video-3-of-5.mp4)time(ffmpeg -i 4_minute_video-4-of-5.mov 4_minute_video-4-of-5.mp4)time(ffmpeg -i 4_minute_video-5-of-5.mov 4_minute_video-5-of-5.mp4)
后面3片的转码耗时分别为:
real 1m8.489s
real 1m3.646s
real 0m57.631s
每一段 44s 的切片,编码时间大约为 1m9秒, 约70秒。 (Mac Pro 机器上面的转码倍速为 0.63)
4.合并最终的结果
对分片转码得到的 mp4 进行合并。
echo "file 4_minute_video-1-of-5.mp4" > concatenate.txtecho "file 4_minute_video-2-of-5.mp4" >> concatenate.txtecho "file 4_minute_video-3-of-5.mp4" >> concatenate.txtecho "file 4_minute_video-4-of-5.mp4" >> concatenate.txtecho "file 4_minute_video-5-of-5.mp4" >> concatenate.txttime(ffmpeg -f concat -i concatenate.txt -c copy 4_minute_video_merged.mp4)
执行的耗时:
frame= 6549 fps=5318 q=-1.0 Lsize= 537526kB time=00:03:38.57 bitrate=20146.3kbits/s speed= 177x
video:533872kB audio:3422kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.043218%
real 0m1.356s
user 0m0.560s
sys 0m0.478s
合并花了1s的时间。
生成的文件对比:
ffprobe 4_minute_video_merged.mp4
Duration: 00:03:38.58, start: 0.000000, bitrate: 20145 kb/s
ffprobe 4_minute_video.mp4
Duration: 00:03:38.25, start: 0.000000, bitrate: 20151 kb/s
最终两个文件的耗时相差了 0.33s。 这个差异可能跟分片的准确度有关。
5.并行转码耗时总结
原始文件转码耗时:342s
切片耗时:3.4s
5个分片分别转码,最长分片的耗时:1m9.403s = 69.4s
结果合并耗时:1.3s
如果分布到不同机器上执行,忽略网络传输的耗时,分片转码的总耗时:3.4 + 69.4 + 1.3 = 74.2
分成5片, 耗时占比原始耗时的 74.2/342 = 21%, 大约提升5倍的性能。
结论:视频转码主要的耗时在编码(Encoding)上面,通过分片转码,可以大幅提升转码效率,对于长文件,几乎可以达到线性的提升效果(跟机器数成正比)。
从视频分片转码的效率来看编码,解码效率相关推荐
- 易语言html解密源码,易语言 BASE64编码解码源码
易语言 BASE64编码源码 ------------– .版本 2 .子程序 编码转换_BASE64编码, 文本型, 公开, BASE64编码处理(返回编码后的文本) .参数 待编码数据, 字节集, ...
- 技术实践 | 网易云信视频转码提速之分片转码
导读:视频转码作为媒体处理的核心功能,在对大视频文件转码时,通常需要花费较长时间,为了提升服务质量,我们将重点提升视频转码的速率. 文|罗微恒 网易云信高级服务端开发工程师 在媒体内容传播行业中,视频 ...
- 如何把视频文件转换为视频二维码的完整教程
如何把视频文件转换为视频二维码的完整教程 二维码已经不经意间快速地融入了我们的生活,我们可以通过扫描二维码来添加好友.付款等等, 那么,如何让视频生成二维码直接免费观看和实现分享呢? 「 视频二维码 ...
- 査勇:华为云在视频AI转码领域的技术实践
随着5G的落地和消费终端的不断升级,消费环节对视频画质的要求也越来越高,为了给消费者带来更清晰.更逼真和更具沉浸感的观感体验,对云端视频处理技术也提出了更高的要求.本次分享,华为云媒体处理服务研发负责 ...
- 4k视频分辨率的码流_8K电视来了!但是8K视频仍很遥远
本届CES上,8K电视的集体发布可谓一大亮点,索尼.LG.TCL.三星等厂商纷纷推出8K电视.不光如此,本届CES上夏普突如其来的展示了一款具备8K视频拍摄功能的M43相机,这一点着实是出乎意料. 今 ...
- 华为云媒体査勇:华为云在视频AI转码领域的技术实践
随着5G的落地和消费终端的不断升级,消费环节对视频画质的要求也越来越高,为了给消费者带来更清晰.更逼真和更具沉浸感的观感体验,对云端视频处理技术也提出了更高的要求.在2022 LiveVideoSta ...
- Android平台下的图片/视频转Ascii码图片/视频 (一)
前一阵看鸿洋公众号日推,看到一个几年前就感觉有意思的一个技术,那就是图片转Ascii码,记得上大学时玩过windows的图片或视频转ascii码,可惜那个软件不好用,有bug,转视频的时候动不动就卡死 ...
- Xilinx低比特率高品质 ABR 视频实时转码(HPE 参考架构)
Xilinx低比特率高品质 ABR 视频实时转码(HPE 参考架构) 介 绍 对实时视频流的需求给视频服务提供商带来了严峻挑战,必须在管理基础设施和互联网带宽运营成本,还要为客户提供高质量体验.鉴于视 ...
- 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)
转自:http://www.tuicool.com/articles/jUz2Y3b 编者按:本文收集了百来篇关于机器学习和深度学习的资料,含各种文档,视频,源码等.而且原文也会不定期的更新,望看到文 ...
最新文章
- 【javamatlab】以一个简单的例子实现java和matlab混编
- 2010 PDC Party @深圳 免费技术交流活动公告
- Chrome 技术篇-F12开发者工具清理缓存,高级、专业清浏览器缓存,storage和cache都指什么、区别
- 音视频技术开发周刊 | 186
- devserver配置_03-零基础学webpack4.0之html相关配置
- 焦旭超 201771010109《面向对象程序设计课程学习进度条》
- 深度学习框架PyTorch与TensorFlow,谁更胜一筹?
- 安卓开发面试书籍,每个程序员都必须掌握的8种数据结构!面试必会
- [转] 春晚诗朗诵《心里话》之程序员版!!
- java方法语句错误需要标识符_java错误需要标识符_Java错误 找不到符号
- 摄影网站主页源码html,2017年最新15个漂亮的 HTML 摄影网站模板
- 【实战】通过命令行调用360杀毒软件接口对指定文件或文件夹杀毒
- python批量转换音频采样率
- css3(属性选择器,结构伪类选择器,伪元素选择器 ,css3盒子模型,滤镜filter, cale, 过渡transition))
- 【面试总结】涵盖1-3年Java程序员必须精通的面试技巧
- P1413 坚果保龄球洛谷c++题解
- Excel批量调整行高
- 1034. 边框着色
- 历史类:伊斯兰教与阿拉伯帝国
- 《C语言编程魔法书:基于C11标准》——2.9 本章小结