FFmpeg是多媒体处理的出色工具,默认情况下,它使用具有多线程的CPU来执行任务,这会给您的服务器带来很高的负载,并且在大多数情况下会很慢,例如使用FFmpeg将RTSP流转码成HLS流或FLV流输出时,服务器同时开启50路转码任务时,服务器资源会耗尽,输出的视频流会花屏、卡顿。
如何提高FFmpeg的速度:
方法一:使用
-preset
降低压缩率以获得更高速度(文件大小和速度之间进行权衡);
方法二:购买硬件,移植代码,使用GPU(nvenc,nvdec和cuvid)实现硬件解码,但这并不容易。
编码器预设参数设置preset
这个参数主要调节编码速度和质量的平衡,有:
ultrafast:最快的编码方式
superfast:超级快速的编码方式
veryfast:非常快速的编码方式
faster:稍微快速的编码方式
fast:快速的编码方式
medium:折中的编码方式
slow:慢的编码方式
slower:更慢的编码方式
veryslow:非常慢的编码方式
placebo:最慢的编码方式
默认的编码速度是medium模式
medium
FFmpeg
转码
很慢,默认的调用确实如此,其实本身人家是支持多线程的,用命令启用多线程后
转码
速度
就可以大幅提升了。
假设原始指令为:
ffmpeg
-i movie.mp4 -vf "crop=640:256:0:400" -strict -2 YourCroppedMovie.mp4
那么启用多线程后的指令:
ffmpeg
-i movie.mp4 -vf "crop=640:256:0:400" -threads 5 -preset ultrafast -strict -2 YourCroppedMo
上线HTTP点播
转码
在CPU和GPU上进行代码转换是昂贵且消耗资源的操作。 对于拥有数千名客户的大公司而言,拥有专用的24/7
转码
服务器至关重要。 但是我们,零星的代码转换用户,需要采用不同的方法。 仅当确实需要输出时才应进行
转码
。 该工具正在尝试通过按需提供
转码
来解决此问题。
该工具仅适用于实时流。 尚不支持寻找。
在yaml文件中将流指定为对象。
使用您的流创建streams.yaml文件:
streams :
<stream> : <stream>
streams :
cam : rtmp://localhost/live/cam
ch1_hd : http://192.168.1.34:9981/stream/channelid/85
ch2_hd : http://192.168.1.34:9981/stream/
7 月 31 日,阿里云视频云受邀参加由开放原子开源基金会、Linux 基金会亚太区、开源中国共同举办的全球开源技术峰会 GOTC 2021 ,在大会的
音视频
性能优化专场上,分享了开源
FFmpeg
在性能
加速
方面的实战经验以及端云一体媒体系统建设与优化。
众所周知,
FFmpeg
作为开源
音视频
处理的瑞士军刀,以其开源免费、功能强大、方便易用的特点而十分流行。
音视频
处理的高计算复杂度使得性能
加速
成为
FFmpeg
开发永恒的主题。阿里云视频云媒体处理系统广泛借鉴了开源
FFmpeg
在性能
加速
方面的经验,同
MMF(Mark 的媒体框架)由一堆脚本组成,这些脚本使用
ffmpeg
、mediainfo 和 neroaacEnc 为不同的目标设备
转码
视频。
mmfplay 应用程序是 mplayer 的前端,它解析输入文件并传递正确的参数以利用 VDPAU
加速
。 如果您有 nvidia 卡,则很有用,因为默认情况下 mplayer 不利用视频解码卸载。
mmfxcode 是一个
ffmpeg
前端,可以将输入视频
转码
为适合指定目标设备的格式。 目前,代码库包括一些设备的目标规范,如摩托罗拉 Xoom、苹果 iPhone/iPad、三星/谷歌 Nexus S 和 Roku XDS 流媒体播放器,几乎都使用 H.264/AAC 混合到 mp4。
支持复制音频编解码器
为 1080p-mp4-h264-copy 添加目标
支持“相同”的音频采样率
改进使用()文档
通过 MAX
1.背景介绍
在视频号项目中,允许用户上传一分钟内的编辑视频,或者选择30min内的长视频。目前来看,整个发表(视频
转码
+上传)的耗时还略显偏久,虽然当下
转码
过程都是在手机后台运行,不会阻塞用户交互,但是由于视频未发表成功,视频点赞和转发功能都被限制,对用户和业务而言,这都是很不好的体验,有值得优化的必要。
1.1分析:耗时来源
整个耗时 = 视频
转码
耗时 + 上传耗时目前上传的时间取决于用户网络,这个不是本文讨论的重点,先暂时不予考虑。那么为什么我们需要对视频.
需求源于手机拍摄的视频,默认参数码率较大,拍摄的文件体积较大,不便于保存和转发。
手机默认拍照的720P视频,默认码率达到4M,实际上转成1M就差不多了。
FFmpeg
默认的
转码
是使用软件解码,然后软件编码,
速度
慢,CPU使用率太高(基于100%)。
硬件环境:
CPU: Intel i5-6400 4核2.7GHz
RAM: 8GB
SSD: Reeinno ST120GB
在这个命令中,`-i input.mp4` 指定输入文件为 `input.mp4`,`-c:v libx264` 指定视频编码器为 libx264(一种常用的视频编码器),`-g 60` 设置GOP间隔为 60 帧,`output.mp4` 是输出文件名。
GOP间隔决定了视频中连续两个关键帧(I帧)之间的间隔帧数量。较小的GOP间隔会增加视频文件的大小,但可以提供更好的随机访问和编辑性能。较大的GOP间隔可以减小文件大小,但会降低随机访问和编辑性能。您可以根据您的需求调整GOP间隔值。
希望这能帮到您!如果还有其他问题,请随时提问。