FPS越大越流畅
FPS标准差代表离散率,越小越好
CPU占用越低越好
不关注起始帧耗时,结束帧耗时越小越好
WebElement searchText = null;
int count_searchText = 0;
while (searchText == null) {
searchText = driver.findElementByAccessibilityId("uitest_home_searchbox");
count_searchText++;
}
customLog.log("查找首页输入框,第" + count_searchText + "次查找");
//输入框区域的中心点坐标
Point lc = searchText.getLocation();
Dimension size = searchText.getSize();
float x = lc.x + size.width / 2;
float y = lc.y + size.height / 2;
sleep(1000);
DialogManage.getInstance().register(IPhoneMicDialog.class);
// 搜索RT测试开始,
setVideoCut(false);
customLog.log("搜索默认页响应时间测试开始");
sampleByElement(x,y);
customLog.log("搜索默认页响应时间测试结束");
long endTime = System.currentTimeMillis();
long runTime = (endTime - processStartTime) / 1000 / 60;
System.out.println("===================runTime为:【" + runTime + "】分钟,搜索RT响应时间测试结束啦===================");
}
@Before
public void setUp() {
super.setUp();
customLog.log("setup");
System.out.println("setup");
}
// 本地调试重载方法,不走关闭弹框的验证,提交git时,需要注释掉
// @Override
// protected void loopPrecondition() {
// customLog.log("ignore precondition");
// }
@After
public void tearDown() {
super.tearDown();
customLog.log("tearDown");
System.out.println("tearDown");
long processEndTime = System.currentTimeMillis();
long processRuntime = (processEndTime - processStartTime) / 1000 / 60;
System.out.println("===================processRuntime为:【" + processRuntime + "】分钟,程序运行结束啦===================");
}
====================================================================================================================================================================================================
以下是性能手动测试方法。以上是性能自动化方式
安装分帧软件
背景
视频的很多问题都是来自视频本身,因此需要一个可以在mac上进行视频处理的工具,这里我们选择:ffmpeg
安装
1. 安装homebrew
打开终端,执行 brew
,出现下图则表示已经安装
➜ ~ brew list
否则,请执行下述命令进行安装,参考homebrew官网
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2. 安装ffmpeg
brew install ffmpeg
3.sometimes,会出现下图 Error: Cannot write to /usr/local/Cellar
此时,可以执行下述命令解决,需要输入密码,参考:Can't chown /usr/local in High Sierra
sudo chown -R $(whoami) $(brew --prefix)/*
使用
Eg: 视频首帧出现很慢,借助ffmpeg将moov提前以减少客户端连接数
ffmpeg -i video.mp4 -movflags faststart -acodec copy -vcodec copy output.mp4
实际使用
ffmpeg -i normal\ video1.mp4 -movflags faststart -acodec copy -vcodec copy output1.mp4
使用ffmpeg
输入命令行
在视频文件目录下
ffmpeg -i seek.mp4 %d.jpg
回车,即可自动输出1.jpg;2.jpg……
ffmpeg -i VID_20170913_141530.mp4 -r 35 ./1111/%d.jpg
ffmpeg -i 视频的名字 %d.jpg -r 帧率 %d.jpg
1000/帧率 * 分片数
注:或者命令错误~~~~
➜ weex1 ffmpeg -i output1.mp4 -r 20 -f image2 ./1111/image-%3d.jpeg
因为视频分帧图片很多,为了不显得那么乱,先建立好存放文件的文件夹,把路径写到命令行
搜索一般是每秒20张,即 -r 20
比如,现在有50张图片,从第5张开始算,到底20张结束,一共是16张,1000/20*16,就是时间,录屏分帧(ms)
如遇 [NULL @ 0x7fd52300a000] Unable to find a suitable output format for '–i'
–i: Invalid argument 报错
参考博客 https://blog.csdn.net/liuzehn/article/details/82748755
遇到这个问题就是不细致造成的,从网页上粘贴过来命令,直接运行。(我也是这样的~~)
其实原因很简单,就是我们使用了破折号(–)代替来了应该使用的连字符号(-)。
睁大自己的眼睛哟!
心得:首先我自己不会犯这么低级的错误,其次是搜的内网查的资料,要么写文章的人犯错了,要么wiki有bug。。。。也怪自己懒下次还是自己输入吧。。。直接复制粘贴找这个bug耗费我26min,无语了。。。
分完帧后,查看图片是否已生成 ➜ weex1 ls -al ./1111
统计image的数量 ➜ 1111 ls -l|grep 'image-'|wc -l
一共452张
找到从性能测试开始的图片如第50张,到结束的图片如第200张,则录屏分帧(ms) = 1000/20*15
一个个视频解析比较慢,用脚本实现
#!/usr/bin/python
# -*- coding: utf-8 -*-
# @Time : 2018/8/29 下午8:26
# @Author : Arvin
import os
import subprocess
def handle_record_file(root_dir):
'''
遍历root_dir 目录下的文件,处理 .mp4 结尾的文件
:param root_dir:
:return:
'''
for var in os.listdir(root_dir):
path = os.path.join(root_dir,var)
print(path)
if os.path.isdir(path):
handle_record_file(path)
elif path.endswith("mp4"):
split_pic(root_dir,var)
def split_pic(root_dir,path):
'''
将视频拆分成图片
:param root_dir:
:param path:
:return:
'''
file_name = path.split(".")[0]
pic_path = os.path.join(root_dir,file_name)
if not os.path.exists(pic_path):
os.makedirs(pic_path)
ffmpeg_cmd = "ffmpeg -i "+ os.path.join(root_dir,path)+" -r 40 -f image2 " + pic_path + os.sep + "%d.jpg"
print(ffmpeg_cmd)
subprocess.check_call(ffmpeg_cmd,shell=True)
# pass
if __name__ == "__main__":
root_dir = "/Users/lishan/Downloads/weex1"
#root_dir = "/Users/arvin/Documents/daily_work/20180829/test"
handle_record_file(root_dir)
执行命令行 ➜ weex1 python split2pic.py
解析之前只有视频
用如上脚本分帧后,生成文件名称(与视频名称一致),文件名为视频分帧图片
FFMPEG常用命令收录(持续更新)
ffmpeg two pass转码
ffmpeg -y -i input -c:v libx264 -preset medium -b:v 555k -pass 1 -an -f mp4 /dev/null &&
ffmpeg -i input -c:v libx264 -preset medium -b:v 555k -pass 2 -c:a libfdkaac -b:a 128k mp4 output.mp4
ffmpeg 转码crf测试
ffmpeg -i input -c:v libx264 -preset medium -crf XX -an output.mp4
ffplay播放YUV数据
~/ffplay -v info -f rawvideo -pixel_format yuv420p -video_size 528x864 i420.yuv
ffplay播放h264数据
~/ffplay -stats -f h264 workspace/android/qusdk-android/h264_test.h264
ffplay播放pcm数据
~/ffplay -f s16le -ar 16k -ac 1 workspace/android/qusdk-android/pcm_file.pcm
ffmpeg 转mp4 到 yuv420p
ffmpeg -i sample.mp4 -c:v rawvideo -pix_fmt yuv420p out.yuv
ffmpeg提取yuv数据
ffmpeg -i ~/Desktop/0819/QQ视频20170819205412.mp4 -q:v 2 -f image2 ~/Desktop/0819/image/%07d.jpeg
ffmpeg 转yuv420p 到mp4
ffmpeg -f rawvideo -pix_fmt yuv420p -s:v 1920x1080 -r 25 -i input.yuv -c:v libx264 output.mp4
ffmpeg 给mp4文件设置角度信息
ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=90 output.mp4
ffmpeg转mpeg4 编码到h264编码
ffmpeg -i ~/Documents/手淘算法对接/归档\(1\)/input.mp4 -c:v libx264 -crf 30 -preset fast -c:a aac input_h264.mp4
ffprobe 抽取视频流packet信息
ffprobe ~/Desktop/0509/11.mp4 -select_streams v:0 -show_packets > a.txt
ffmpeg 设置开始时间,结束时间
ffmpeg -ss 00:00:06 -i ~/Desktop/晋升草稿/转场.mov -c:v libx264 ~/Desktop/晋升草稿/转场.mp4
MV素材转换(mov转mp4,保证时间戳不变)
~/ffmpeg -i mask_alpha.mov -vcodec libx264 -pix_fmt yuvj420p -copyts -profile baseline a.mp4
ffmpeg 从mp4提取h264数据
ffmpeg -i output1.mp4 -codec copy -bsf h264_mp4toannexb -f h264 output1.264
ffmpeg 等比缩放视频
ffmpeg -i /Users/tom/Downloads/IMG_0264.MOV -vf scale=1080:-1 -vcodec libx264 -f mov a_1080.mov
ffmepg提取音频流
ffmpeg -i 11.mp4 -vn -y -acodec copy 11.aac
ffmpeg 提取视频流
ffmpeg -i 11.mp4 -vcodec copy –an 11_v.mp4
ffmpeg拼接视频
ffmpeg -f concat -i filelist.txt -c copy 11_3.mp4
//filelist.txt内部记录需要拼接的文件,格式如下: file '11.mp4'
file '22.mp4'