0.问题

经常要剪视频,有时候自己讲的希望能加个字幕,但是网上基本都是收费的,而且对于我这种做视频没什么收入的UP主来说有点贵了。所以一直在寻找一个便捷一点的或者说省钱一点的方法。

但是手机上发现有个软件效果还不错,每天免费30分钟:

显示是会员有30分钟,会员就是注册一下。

快剪辑快字幕功能操作流程如下

新建项目

选择要生成字幕的视频

选择原始比例(可以随便)

选择一段要自动生成字幕的片段点生成

编辑调整字幕

其实到这里的话已经可以生成字幕达到目的了,但是快剪辑的字幕生成慢,而且不好剪辑,想导出到srt字幕文件到电脑上一起完成剪辑。

1.解决

在应用存储文件夹下找到了这个文件

里面的内容,疑似json保存的项目工程文件

用JSON格式化工具看发现,字幕是在stickerlist属性下的text属性,开始和结束时间分别是startTime属性和endTime属性,时间是视频开始到当前的毫秒数。

于是我利用这个文件,用Python写了一个提取字幕的脚本

#!/usr/bin/python

# coding=UTF-8

import json

import time

import srt

from datetime import timedelta

def FlowlogToSrt(log):

#解析Json为字典

fldict = json.loads(log)

#获取字幕列表

stickerlist = fldict['stickerlist']

#取出字幕

index = 0

subs = []

for sticker in stickerlist:

#序列号

index = index + 1

#开始时间

startTime = timedelta(milliseconds = sticker["startTime"])

#结束时间

endTime = timedelta(milliseconds = sticker["endTime"])

#内容

text = sticker["text"]

#转成srt对象,并存入列表

subs.append(srt.Subtitle(index=index, start=startTime, end=endTime, content=text))

#转成srt

srtText = ""

for sub in subs:

srtText = srtText + sub.to_srt()

print(srtText)

#写入文件

filename = "KuaiJianJiSticker"+time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime())+".srt"

with open(filename, 'w', encoding="utf-8") as file_object:

file_object.write(srtText)

if __name__ == "__main__":

txt = input("请输入手机快剪辑flowlog数据:(数据位于/Android/data/com.qihoo.qeditor/files/keyfiles/flowlog下)\n")

FlowlogToSrt(txt)

把那个文件上传到电脑,输入到代码里

但是好像文件太大了,因为我的是35分钟的会议,基本都有人在说话。

那只好提取出有用的部分咯

于是在JSON在线格式化这里格式化了一下代码,把结果放到另外一个文件里。

用Java写了以下代码,用于提取出大致的JSON结构和所需要的部分属性:

package clearJSON;

import java.io.BufferedReader;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStreamReader;

public class Main {

//文件路径

static String Path = "D:/eclipse-workspace/clearJSON/clearJSON/json.txt";

//结果缓存

static StringBuilder res = new StringBuilder();

public static void main(String[] args) throws IOException, InterruptedException {

//行数统计

int lineNumber = 0;

//读取文件

FileInputStream fis=new FileInputStream(Path);

InputStreamReader isr=new InputStreamReader(fis, "UTF-8");

BufferedReader br = new BufferedReader(isr);

String line = "";

while ((line=br.readLine())!=null) {

lineNumber++;

//结构保留

if(line.indexOf('{')!=-1 || line.indexOf('}')!=-1) {

add(line);

//保证添加的不是空对象

if((line=br.readLine())!=null) {

//结构里至少有一个属性,添加以“{”开头的下一行

add(line);

}

continue;

}

//属性保留,需要的属性可以以此类推添加到这里

if(line.indexOf("\"startTime\"")!=-1 || line.indexOf("\"text\"")!=-1 || line.indexOf("\"endTime\"")!=-1) {

add(line);

}

}

br.close();

fis.close();

//输出结果

System.out.println("一共处理文件行数:"+lineNumber);

//输出精简后的JSON代码

Thread.sleep(2000);

System.out.println(res.toString());

}

/**

* 添加文本到缓存里

* 完成对结构的判断,依靠‘}’在第一个字符判断是一组属性的结尾,

* 然后删除上一行行末的‘,’

* @param str 要添加的文字

*/

public static void add(String str) {

//判断是不是一组属性的结尾

if(str.trim().indexOf('}') == 0) {

//删除上一行行末的逗号

res.deleteCharAt(res.length()-1);

}

//添加到缓存

res.append(str);

}

}

把JSON代码精简到了原来大小的8.6%:

之后再输入到Python里。

成功生成SRT文件!

导入到ARCTIME中:

成功导入到ARCTIME中!

2.总结

基本完成了需求,但是步骤有些麻烦。

今后可以尝试合并Java和Python的部分。

写这篇文章的原因主要还是没钱。

python自动生成字幕_【教程】每天30分钟免费的视频自动生成字幕的方法相关推荐

  1. 【教程】每天30分钟免费的视频自动生成字幕的方法

    0.问题 经常要剪视频,有时候自己讲的希望能加个字幕,但是网上基本都是收费的,而且对于我这种做视频没什么收入的UP主来说有点贵了.所以一直在寻找一个便捷一点的或者说省钱一点的方法. 但是手机上发现有个 ...

  2. vue怎么取消按回车下拉框自动下拉_八月更新第二版,小视频自动竖屏全屏播放,失效校验再次升级!...

    新方圆小棉袄,传说中的贴心小棉袄,宇宙无敌超级厉害. 记住我们的付费群(大佬众多):978260150,免费群:1101359539 1.方圆和海阔的规则导入和支付宝口令类似,将口令全部复制打开最新版 ...

  3. python程序员专用壁纸_神级python程序员分享的让小白30分钟快速上手的一张神图,赶快收藏!...

    原标题:神级python程序员分享的让小白30分钟快速上手的一张神图,赶快收藏! 现在很多人学编程都把Python作为入门语言,其实这是个很不错的选择,那么你知道新手如何学Python吗?小编给大家分 ...

  4. Python入门教程,30分钟玩转Python编程!

    这是本文的目录 前言 Python环境下载和配置 常用IDE--PyCharm 常用IDE--Anaconda Python操作入门 Python基本操作 Python注释 Python的行与缩进 多 ...

  5. 学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程

    Linux Shell脚本教程:30分钟玩转Shell脚本编程 http://c.biancheng.net/cpp/shell/ 转载于:https://www.cnblogs.com/pegasu ...

  6. 【Python】【进阶篇】十二、Python爬虫的Xpath简明教程(十分钟入门)

    目录 十二.Python爬虫的Xpath简明教程(十分钟入门) 12.1 Xpath表达式 12.2 Xpath节点 12.3 节点关系 12.4 Xpath基本语法 12.4.1 基本语法使用 12 ...

  7. C语言教程,30分钟彻底学会C语言指针视频教程

    c语言教程视频讲座简介: 沉睡者IT:C语言教程,30分钟彻底学会C语言指针视频教程 培训课程内容介绍: 此课程是针对C.C++指针的专题课程,通过对指针本质的讲解,帮助学员对指针快速的理解,并讲结合 ...

  8. 《神奇:长达30分钟的3D视频,只需200多K》中隐藏程序到Jpg图片中的小工具

    今天同事发了一个好玩的东西, 共享 给大家: 神奇:长达30分钟的3D视频,只需200多K 表面看起来这是一只小鸭的图片,然而把文件后缀名改成RAR,然后解压缩,很神奇的事情就发生了!  推荐配置:2 ...

  9. python 大智慧股池_跟我从零开始学会大智慧股票池自动交易

    自从上次发表关于自动交易系列教程后,很多朋友对自动交易产生了极大兴趣,然而还有很多朋友因为没接触过股票池和自动交易,相对比较陌生,希望我能从更简单详细的角度来让刚接触的朋友更快的掌握股票自动交易的方法 ...

  10. 机器人坐标系建立_如何在30分钟内建立一个简单的搜索机器人

    机器人坐标系建立 by Quinn Langille 奎因·兰吉尔(Quinn Langille) 如何在30分钟内建立一个简单的搜索机器人 (How to Build A Simple Search ...

最新文章

  1. 35岁前务必成功的12级跳(男女通用) 转
  2. linux系统下的oracle数据库,在Linux系统下安装Oracle数据库
  3. excel正在等待某个应用程序以完成对象链接与嵌入操作_看完这篇操作系统,和面试官扯皮就没问题了
  4. ClickHouse 分布式原理:Distributed引擎
  5. 创业感悟:技术兄弟为什么一直没有起来(1)
  6. ASP.NET Core使用功能开关控制路由访问(续)
  7. Visual Studio进行linux远程开发
  8. PTA14、生日悖论 (10 分)
  9. Android Studio导入model
  10. Pytorch——Variable是什么?
  11. 开发rtmp直播流测试地址
  12. laravel中when的使用
  13. Duilib中caption的问题
  14. 计算机一级考试图片水印怎么加,图片水印怎么添加?一起来看看这几个方法
  15. 【OSX】MAC下能用的炒股软件
  16. 计算机辅助设计在环境工程中的应用,试论计算机辅助设计在环境工程中的应用原稿(范文1)...
  17. 条款11:在operator=中处理“自我赋值”
  18. 个人主页增添新留言板
  19. 【vscode 配置c++环境 win10】
  20. 子域名收集工具——Sublist3r

热门文章

  1. 工业机器人常用编程语言有哪些
  2. 西门子mag6000接线_西门子(SIEMENS)妙声力系列电磁流量计变送器MAGFLO MAG5000 MAG6000中文使用手册.pdf...
  3. 计算机程序无法定位,电脑显示无法定位程序输入点XXX于动态链接库怎么办
  4. 阿里云 socket 服务器配置
  5. 【数模智能算法】BP神经网络基本算法原理
  6. 微服务网关——需求篇
  7. android int 字节数组,android 将int转byte,byte转int的两种方法
  8. abb机器人伺服电机报闸是什么_ABB机器人伺服电机进油的分析及解决措施
  9. abb机器人searchl报错_ABB机器人常用指令介绍——ABB机器人
  10. rf扫描枪_RF枪(RF手持扫描枪)是什么,有什么用途?