Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Mac端也可以做视频分帧啦!——性能测试视频分帧工具

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

原创
作者头像
keenfan
发布于 2024-03-28 12:36:38
发布于 2024-03-28 12:36:38
41300
代码可运行
举报
运行总次数:0
代码可运行

一、当前现状背景

      近期由于做了几个关于端外跳转到打车和检索页的性能优化项目,考虑到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
代码运行次数:0
运行
AI代码解释
复制
# -*- 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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
视频逐帧读取并保存至指定文件夹(opencv之python描述)
frame = video.read()
用户4908836
2020/04/14
1.9K0
tf27: Deep Dream—应用到视频
本文介绍了如何将Deep Dream技术应用于视频上,通过使用TensorFlow和Python实现Deep Dream算法,从而对视频进行逐帧处理,产生具有梦幻效果的视频。同时,也介绍了一些相关的工具和库,如ffmpeg、numpy、scipy、scikit-learn等,这些工具可以帮助我们更好地实现Deep Dream算法。此外,还介绍了一些Deep Dream算法的应用,如图像风格转换、图像修复、图像超分辨率等。最后,也介绍了一些实现Deep Dream算法的技巧和最佳实践,如调整网络结构、选择合适的预训练模型、使用预训练权重等。通过本文的学习,我们可以更好地理解Deep Dream算法,并能够将其应用于实际的视频处理任务中。"
MachineLP
2018/01/09
6750
打破次元壁,让游戏角色在指尖跳舞,简易的 AR 教程
作为一个天涯明月刀游戏的端游老玩家,天刀的画质是没的说的。玩天刀的七年,我唯一最大的收获就是拐了女朋友回家。至此,双十一来临之际,我紧急把之前想写的教程赶了出来。为了让单身的少侠可以在现实世界有自己游戏角色的陪伴,不再那么孤单,我可真是操碎了心,半夜把网页赶了出来。其实单身和非单身的双十一区别不是很大,只是吃土的方式不一样罢了。话不多说,我们先来看下效果:
桑榆肖物
2022/11/18
9980
打破次元壁,让游戏角色在指尖跳舞,简易的 AR 教程
视频2图片video_to_images
发布者:全栈程序员栈长,转转请注明出处:https://javaforall.cn/2158.html原文链接:
全栈程序员站长
2021/04/07
4340
python将视频抽帧的的多种方式
最近有一个需求是将视频抽取为一个个的帧图片,使用python很方便实现,而且有多种方式;
JQ实验室
2022/09/29
3.3K0
Python实现5毛钱特效
Python牛已经不是一天两天的事了,但是我开始也没想到,Python能这么牛。前段时间接触了一个批量抠图的模型库,而后在一些视频中找到灵感,觉得应该可以通过抠图的方式,给视频换一个不同的场景,于是就有了今天的文章。
ZackSock
2020/04/16
1.1K0
Python实现高级电影特效
前几天写了个实现特效的博客,感觉有点差强人意,只是简简单单的换背景应用场景不是非常多,今天就来实现一个更加复杂的特效“影分身”。下面有请我们本场的主演,坤制作人为我们表演他拿手的鸡你太美。
ZackSock
2020/05/18
1.5K0
Python实现高级电影特效
使用 Dify 和 AI 大模型理解视频内容:Qwen 2 VL 72B
本篇作为第一篇内容,以昨天出圈的“黑神话悟空制作人采访视频”为例,先来聊聊经常被国外厂商拿来对比的国产模型:千问系列,以及它的内测版。
soulteary
2024/08/27
1.6K0
使用 Dify 和 AI 大模型理解视频内容:Qwen 2 VL 72B
图片与视频互转(python)
usage example: python video2jpg.py --video 1574393815.avi --out_dir 1574393815
用户4363240
2019/12/08
2K0
使用Python-去除视频背景
no怕不了木
2023/08/08
8040
使用Python-去除视频背景
利用 FFmpeg 批量添加视频水印2025
在当今的数字时代,视频已成为信息传播和品牌推广的重要载体。然而,随着视频内容的广泛传播,如何保护版权、提升品牌辨识度成为许多创作者和企业面临的难题。手动为视频添加水印费时费力,而批量处理则能大幅提升效率。本文将带你了解如何利用 FFmpeg 这一强大工具,结合 Python 编程,实现视频的批量水印添加,让你的视频处理更加高效、智能!
叶子Tenney
2025/03/09
3230
利用 FFmpeg 批量添加视频水印2025
我用 Python 做了个小仙女代码蹦迪视频
https://blog.csdn.net/hhladminhhl/article/details/118463344 (AirPython整理)
昱良
2021/07/27
7910
python带你剪辑视频
嗯,好久没写文章了。因为最近没有熬夜了,天天背电脑也很辛苦。 工作嘛,手工为主,没有啥技术成长,也没啥好写的。 疫情期间,总听到有人叹气,总听到抖音里面“我太难了”。
赵云龙龙
2020/08/13
3.1K0
飞桨PaddleHub带你环游世界,快来试试Python一键视频抠图吧
在视频创作过程中,有时会遇到人像抠图的需求,最一般的做法是使用PR、AE等工具将视频中的每一帧图像手动抠图。这么繁琐的步骤在理工男面前简直是不可存在的,那么有什么简单的方法能快速抠图吗?当然有啦,接下来给大家介绍如何使用PaddleHub一键视频人像抠图。
用户1386409
2020/04/22
1.8K0
使用Python进行网站数据爬取和视频处理
在互联网时代,我们经常需要从网站上获取数据并进行分析或处理。有时候,我们还需要对视频数据进行一些操作,比如剪辑、转码、合成等。Python是一门非常适合做数据分析和视频处理的编程语言,它有很多强大的库和工具可以帮助我们完成这些任务。本文将介绍如何使用Python的requests模块爬取网站数据并进行视频处理的方法和步骤。
jackcode
2023/08/10
6340
使用Python进行网站数据爬取和视频处理
[1214]基于Python实现视频去重
一款基于Python语言的视频去重复程序,它可以根据视频的特征参数,将重复的视频剔除,以减少视频的存储空间。它的基本原理是:首先利用Python语言对视频文件进行解析,提取视频的特征参数,如帧率、码率等;然后根据特征参数,生成视频的哈希值;最后,将每个视频的哈希值进行对比,如果哈希值相同,则表示视频内容相同,可以将其中一个视频剔除,以节省存储空间。
周小董
2023/10/10
6890
python 用opencv接口把视频逐帧转化为图片
好了,接下来我要做一个实际的深度学习图像分割的小项目,项目内容是从一堆拍摄海面的图片中将白浪花分割出来,这个项目的分割只对白浪花感兴趣,所以最后应该是01分割,非黑即白。目前收到800G左右的数据,视频格式,每段大约50分钟。首先要做的就是从这些视频中把每一帧的图片导出来,变成图片。
狼啸风云
2020/07/27
3.3K2
模型实操 | 从零开始,用英伟达T4、A10训练小型文生视频模型
OpenAI 的 Sora、Stability AI 的 Stable Video Diffusion 以及许多其他已经发布或未来将出现的文本生成视频模型,是继大语言模型 (LLM) 之后 2024 年最流行的 AI 趋势之一。
ShuYini
2024/07/04
2760
模型实操 | 从零开始,用英伟达T4、A10训练小型文生视频模型
FFmpeg 在爬虫中的应用案例:流数据解码详解
在大数据时代,网络爬虫技术成为了数据采集的重要手段。FFmpeg 是一个强大的多媒体处理工具,广泛应用于音视频处理领域。在本篇文章中,我们将详细讲解如何将 FFmpeg 应用于网络爬虫技术中,以解码和采集小红书短视频为案例。同时,文章将提供具体的代码示例,包括如何使用代理IP、设置User-Agent和Cookie等技术,提升爬虫的采集成功率。
jackcode
2024/07/23
2240
FFmpeg 在爬虫中的应用案例:流数据解码详解
(强烈推荐)移动端音视频从零到上手(下)
封装就是把编码器生成的音频,视频同步以生成我们肉眼可见,耳朵可听并且看到的与听到的是同步的视频文件.即封装后生成一个容器,来存放音频和视频流以及一些其他信息(比如字幕, metadata等).
音视频开发进阶
2019/07/31
1.2K0
(强烈推荐)移动端音视频从零到上手(下)
相关推荐
视频逐帧读取并保存至指定文件夹(opencv之python描述)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档