ddxmde / ScreenRecord

a pyQt application for screen recording

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

截图小工具

类库使用

PyQt5

更多详见 requirement.txt

1.2.1 版本预告

新增:

- 视频推流



1.2.0 版本预告

新增:

- 视频剪辑
- 视频拼接
- 视频添加音源
- 视频添加字幕



1.1.2 版本预告

新增:

- 可以选择程序窗口截图录像



1.1.1 版本预告

新增:

- 帧数设定
- 视频可以选择声音

1.1.0版本更新

修复bug:

  • 隐藏ffmpeg的命令行窗口
  • 等待录屏处理结束后开始按钮才可以点击

代码说明:

隐藏窗口:

st = subprocess.STARTUPINFO()
st.dwFlags = subprocess.STARTF_USESHOWWINDOW
st.wShowWindow = subprocess.SW_HIDE

在subprocess.Popen(startupinfo=st)

1.0版本更新

修复bug:

  • 录制视频不流畅,帧数过低
  • 双屏下不能录制不能截图

新增:

  • 窗口模式下录制视频
  • 截图功能

代码说明

移除Pillow和moviepy依赖

截图依赖转为:PyQt

QApplication.primaryScreen().grabWindow(
            hwnd, pos[0], pos[1], size[0]-pos[0], size[1]-pos[1]).toImage()

**视频录制 ** 依赖FFmpeg

录制处理程序:FFmpegRecord.py (原版本修改为OpencvRecord.py)

Gif 录制思路变为:先录制视频,再用FFMpeg转gif.

遇到的坑:

  • FFmpeg 录制屏幕

    • 全屏

      ffmpeg -f gdigrab -framerate {fps} -i desktop -s {width}x{height} -pix_fmt yuv420p -c:v h264 -b:v 2000k {path}

    • 截屏(宽度必须是32的倍数,高度必须是2的倍数)

      -f gdigrab -framerate {fps} -offset_x {x} -offset_y {y} -video_size {width}x{height} -i desktop -pix_fmt yuv420p -c:v libx264 {path}

  • FFmpeg 转gif

    ffmpeg -i {src.mp4} -vf scale=360:-1 {out.gif}

  • 开启subprocess执行ffmpeg命令

    使用process = subprocess.Popen(),后续可以给这个process写入‘q’来终止ffmpeg。

    process.stdin.write('q')
    process.stdin.flush() # 不加不行
    # 一开始使用的是 process.send_signal(signal.CTRL_C_EVENT)
    # 但是ctrl+c把主线程都杀死了

0.8版本更新

功能项

  • 全屏录制
  • 窗口录制
  • 设置
    • 选择存储位置
    • 选择保存格式
  • 退出

项目目录

  • assets -- 资源目录
    • img -- 图片资源
    • icons.py -- icons.qrc生成的py文件
    • icons.qrc -- 资源文件
  • components -- 组件目录
    • LabelButton.py -- 自定义按钮标签组件
    • Menu.py -- 菜单栏
    • Setting.py -- 设置栏
  • ui -- 基础ui目录
    • Main_ui.py -- Main_UI.ui生成的py文件(主窗口)
    • Record_Window.py -- Record_Window.ui生成的(录制窗口)
  • utils -- 处理工具
    • FFmpegRecord.py -- 处理录制程序 (新增)
    • OpencvRecord -- 处理录制程序(舍弃)
    • Animation.py -- 动画处理程序
  • view -- 视图目录
    • Main_View.py -- 主程序视图
    • Main_Window.py -- 基础窗口视图
    • Record_View.py -- 录制窗口视图
  • main.py -- 程序入口

P.S.继承关系

Main_Window.py 继承于 Main_ui.py

Menu.py 和 Setting.py 继承于 Main_Window.py

Main_View.py 继承上面的两个组件

Record_View.py 继承于 Record_Window.py

About

a pyQt application for screen recording


Languages

Language:Python 100.0%