由于转码是非常耗时的操作。

为了加快视频文件的转码,对视频文件进行切分,分成多片,在多台机器并行执行,最后做合并来提升性能。以下做一个实验,对分片前后的数据做一个对比, 验证分片转码的性能提升效果。

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)上面,通过分片转码,可以大幅提升转码效率,对于长文件,几乎可以达到线性的提升效果(跟机器数成正比)。

从视频分片转码的效率来看编码,解码效率相关推荐

  1. 易语言html解密源码,易语言 BASE64编码解码源码

    易语言 BASE64编码源码 ------------– .版本 2 .子程序 编码转换_BASE64编码, 文本型, 公开, BASE64编码处理(返回编码后的文本) .参数 待编码数据, 字节集, ...

  2. 技术实践 | 网易云信视频转码提速之分片转码

    导读:视频转码作为媒体处理的核心功能,在对大视频文件转码时,通常需要花费较长时间,为了提升服务质量,我们将重点提升视频转码的速率. 文|罗微恒 网易云信高级服务端开发工程师 在媒体内容传播行业中,视频 ...

  3. 如何把视频文件转换为视频二维码的完整教程

    如何把视频文件转换为视频二维码的完整教程 二维码已经不经意间快速地融入了我们的生活,我们可以通过扫描二维码来添加好友.付款等等, 那么,如何让视频生成二维码直接免费观看和实现分享呢? 「 视频二维码 ...

  4. 査勇:华为云在视频AI转码领域的技术实践

    随着5G的落地和消费终端的不断升级,消费环节对视频画质的要求也越来越高,为了给消费者带来更清晰.更逼真和更具沉浸感的观感体验,对云端视频处理技术也提出了更高的要求.本次分享,华为云媒体处理服务研发负责 ...

  5. 4k视频分辨率的码流_8K电视来了!但是8K视频仍很遥远

    本届CES上,8K电视的集体发布可谓一大亮点,索尼.LG.TCL.三星等厂商纷纷推出8K电视.不光如此,本届CES上夏普突如其来的展示了一款具备8K视频拍摄功能的M43相机,这一点着实是出乎意料. 今 ...

  6. 华为云媒体査勇:华为云在视频AI转码领域的技术实践

    随着5G的落地和消费终端的不断升级,消费环节对视频画质的要求也越来越高,为了给消费者带来更清晰.更逼真和更具沉浸感的观感体验,对云端视频处理技术也提出了更高的要求.在2022 LiveVideoSta ...

  7. Android平台下的图片/视频转Ascii码图片/视频 (一)

    前一阵看鸿洋公众号日推,看到一个几年前就感觉有意思的一个技术,那就是图片转Ascii码,记得上大学时玩过windows的图片或视频转ascii码,可惜那个软件不好用,有bug,转视频的时候动不动就卡死 ...

  8. Xilinx低比特率高品质 ABR 视频实时转码(HPE 参考架构)

    Xilinx低比特率高品质 ABR 视频实时转码(HPE 参考架构) 介 绍 对实时视频流的需求给视频服务提供商带来了严峻挑战,必须在管理基础设施和互联网带宽运营成本,还要为客户提供高质量体验.鉴于视 ...

  9. 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)

    转自:http://www.tuicool.com/articles/jUz2Y3b 编者按:本文收集了百来篇关于机器学习和深度学习的资料,含各种文档,视频,源码等.而且原文也会不定期的更新,望看到文 ...

最新文章

  1. 【javamatlab】以一个简单的例子实现java和matlab混编
  2. 2010 PDC Party @深圳 免费技术交流活动公告
  3. Chrome 技术篇-F12开发者工具清理缓存,高级、专业清浏览器缓存,storage和cache都指什么、区别
  4. 音视频技术开发周刊 | 186
  5. devserver配置_03-零基础学webpack4.0之html相关配置
  6. 焦旭超 201771010109《面向对象程序设计课程学习进度条》
  7. 深度学习框架PyTorch与TensorFlow,谁更胜一筹?
  8. 安卓开发面试书籍,每个程序员都必须掌握的8种数据结构!面试必会
  9. [转] 春晚诗朗诵《心里话》之程序员版!!
  10. java方法语句错误需要标识符_java错误需要标识符_Java错误 找不到符号
  11. 摄影网站主页源码html,2017年最新15个漂亮的 HTML 摄影网站模板
  12. 【实战】通过命令行调用360杀毒软件接口对指定文件或文件夹杀毒
  13. python批量转换音频采样率
  14. css3(属性选择器,结构伪类选择器,伪元素选择器 ,css3盒子模型,滤镜filter, cale, 过渡transition))
  15. 【面试总结】涵盖1-3年Java程序员必须精通的面试技巧
  16. P1413 坚果保龄球洛谷c++题解
  17. Excel批量调整行高
  18. 1034. 边框着色
  19. 历史类:伊斯兰教与阿拉伯帝国
  20. 《C语言编程魔法书:基于C11标准》——2.9 本章小结

热门文章

  1. Kafka 消息可靠性
  2. openssh防火墙
  3. 机器 · 搜索 · 未来
  4. 蜂鸟E203学习笔记(二)--蜂鸟E203总体框架
  5. Tomcat安装与使用
  6. 机器学习中的先验、后验和似然
  7. 对腾讯云的TDSQL的简单入门学习
  8. 先进先出页面置换算法详解
  9. 赛门铁克警告Switch模拟器下载链接实为垃圾站点
  10. ad15原理图中变压器种类_最简单的变压电路图大全(十一款最简单的变压电路设计原理图详解) - 全文...