前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mac端也可以做视频分帧啦!——性能测试视频分帧工具

Mac端也可以做视频分帧啦!——性能测试视频分帧工具

原创
作者头像
keenfan
发布2024-03-28 20:36:38
1720
发布2024-03-28 20:36:38

一、当前现状背景

      近期由于做了几个关于端外跳转到打车和检索页的性能优化项目,考虑到Mac端没有靠谱并且好用的视频分帧工具,于是决定自己基于ffmpeg写一个视频分帧的小工具,以便后续能够对于视频分帧性能测试场景有专属的测试工具,提高该场景的性能测试效率。经过调研发现,Windows端大家都在用一个网上较多人使用的yyb_so_test的视频分帧小工具,而Mac端就没有找到类似的,下面我就自己使用的经验,给大家分享一下,我的Mac端使用的视频分帧小工具!

Windows分帧工具:附件安装包yyb_so_test.zip

二、FFmpeg介绍

      FFMPEG堪称自由软件中最完备的一套多媒体支持库,它几乎实现了所有当下常见的数据封装格式、多媒体传输协议以及音视频编解码器,堪称多媒体业界的瑞士军刀。除去部分具备系统软件开发能力的大型公司(Microsoft、Apple等)以及某些著名的音视频技术提供商(Divx、Real等)提供的自有播放器之外,绝大部分第三方开发的播放器都离不开FFMpeg的支持,像Linux桌面环境中的开源播放器VLC、MPlayer,Windows下的KMPlayer、暴风影音以及Android下几乎全部第三方播放器都是基于FFMPEG的。

      FFMPEG从功能上划分为几个模块,分别为核心工具(libutils)、媒体格式(libavformat)、编解码(libavcodec)、设备(libavdevice)和后处理(libavfilter, libswscale, libpostproc),分别负责提供公用的功能函数、实现多媒体文件的读包和写包、完成音视频的编解码、管理音视频设备的操作以及进行音视频后处理。

三、分帧工具的使用方法

了解到了ffmpeg的强大,我们就开始写我们的分帧工具吧;

工具全部内容,基于python3:

代码语言:javascript
复制
# -*- coding: UTF-8 -*-
#!/usr/bin/env python3

import sys
import os
import time
import argparse
import numpy as np
import cv2 as cv
import functools


def separate_frame(path1, path2):
    video_path = os.path.join(os.getcwd(), path1, path2)
    print ("video_path:"+video_path)
    if not os.path.exists(video_path):
        return

    list = os.listdir(video_path)
    for file in list:
        # print(file)
        if file.find("mov") == -1 and file.find("MOV") == -1:
            continue
        # if file.endswith() != -1:
        #     continue
        # try:
        #     os.unlink(".DS_Store")
        # except Exception as e:
        #     print("不存在.DS_Store")
        # 打开视频
        video = cv.VideoCapture(os.path.join(video_path, file))
        # 帧速率
        rate = video.get(5)
        # 视频文件中的帧数
        frame_num = video.get(7)
        # 视频整体的时间
        duration = frame_num / rate
        
        frame_path = os.path.join(video_path, file.split(".")[0])
        if not os.path.exists(frame_path):
            os.mkdir(frame_path)
        time.sleep(2)
        frame_path = os.path.join(frame_path)
        if not os.path.exists(frame_path):
            os.mkdir(frame_path)
        
        # -r 20 表示没秒钟截取 20 张图片,也就是 50 毫秒一张图
        cmd = "/Users/yufan/Desktop/python/ffm/ffmpeg -i " + os.path.join(video_path, file) + " -r 20 " + os.path.join(frame_path, "%d.jpg")
        ret = os.system(cmd)


# 视频分帧
if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='ffmpeg 视频分帧脚本')
    parser.add_argument('-p', '--path', default='', help='一级目录名')
    parser.add_argument('-p2', '--path2', default='', help='二级目录名')
    args = parser.parse_args()

    # 使用示例:python3 ffmpegVideoFraming.py -p testPath
    separate_frame(args.path, args.path2)

1.首先下载ffmpegVideoFraming.py和ffmpeg到自己的本地文件夹,下方附件自取;

创建一个二级目录/Users/yufan/Desktop/python/ffm放ffmpegVideoFraming.py和ffmpeg两个文件到文件夹中:

2.Pycharm中修改ffmpegVideoFraming.py这个文件到本地路径,找到ffmpeg工具库:

3.-r 20 表示每秒钟截取 20 张图片,也就是 50 毫秒一张图,也可根据自己的测试标准进行修改,1s=1000ms

4.需要分帧的视频,放到一级目录中/Users/yufan/Desktop/python/

5.这里修改你想要分帧的视频文件,理论上ffmpeg功能是很强大的,几乎可以分帧绝大部分格式的视频文件:

6.运行ffmpegVideoFraming.py,查看是否有报错:

常见的一些报错和解决方案:

(1)缺少依赖库cv:

全部依赖库:

在本地通过命令下载安装依赖库pip3 install opencv-python,解决该问题:

(2)运行权限问题,首次运行时Mac端会弹出类似的权限弹框,此时我们不要担心,只需要几步即可获取权限;

首先,打开「启动台>其它>终端」。

然后,在终端中输入以下代码「sudo spctl --master-disable」后在键盘上按【Enter】键(建议复制代码,因为涉及到空格)。

sudo spctl --master-disable

最后,打开 「系统设置>隐私与安全性」 ,查看是否有 「App Store和被认可的开发者」 的选项。

7.拿到权限后,我们再次运行,看到这些打印就算是运行成功了;

运行完成后,我们再去一级目录下查看分帧后的结果:

打卡文件夹,查看视频分帧图片:

到这mac端的视频分帧工具就全部介绍完了,要是能够再分帧完成后把结果自动统计下来就更好了,如果你有更好更简单的办法,欢迎一起沟通交流,为提升测试效率而努力奋斗!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档