教程每天30分钟免费的视频自动生成字幕的方法(代码片段)

minuy minuy     2022-11-29     481

关键词:

0.问题

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

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

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

  • 快剪辑快字幕功能操作流程如下
  1. 新建项目
    技术图片

  2. 选择要生成字幕的视频
    技术图片

  3. 选择原始比例(可以随便)
    技术图片

  4. 选择一段要自动生成字幕的片段点生成
    技术图片

  5. 编辑调整字幕
    技术图片

其实到这里的话已经可以生成字幕达到目的了,但是快剪辑的字幕生成慢,而且不好剪辑,想导出到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下)
")
    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的部分。
  • 写这篇文章的原因主要还是没钱。




















pr生成字幕的方法以及好看的字幕背景

作为一个视频编辑者,最好的模板样式应该是(窗口——》工作区——》编辑)如果缺少工作区,要么找窗口,要么找三条杠。。。1.文字工具点击之后,即可在视频编辑,在效果控件改变样式2.文件——》新建&md... 查看详情

学习openstack的方法论-每天5分钟玩转openstack(150)

作为OpenStack的核心教程,我们已经到了最后总结的部分。OpenStack目前已经有好几十个模块,本教程讨论的是最最重要的核心模块:Keystone,Nova,Glance,Cinder和Neutron。请大家看下图:此图截自 https://www.openstack.org/software/project-n... 查看详情

宝藏系列推荐几款免费的视频转文字字幕的软件

...的车神🥇⚡About—>车神:从寝室到实验室最快3分钟,最慢3分半(半分钟献给红绿灯)📝个人主页:车手只需要车和手,压力来自论文_府学路18号车神_CSDN博客🥇官方认证:人工智能领域... 查看详情

html5video视频字幕的使用和制作(代码片段)

...下是三种最常用的格式1、ogg格式:带有Theora视频编码(免费)+Vorbis音频编码的Ogg文件(免费)支持的浏览器:firefox、chrome、opera2、MPEG4格式:带有H.264视频编码(收费)+AAC音频编码的MPEG4文件(收费)支持的浏览器:safari、chrom... 查看详情

让discord机器人每天自动做一些事情。(代码片段)

我是java脚本和discord编程的新手,我想在我的discord服务器上安装一个机器人,在早上5点进行频道清理,但是,我想在专用服务器上运行它,不知道如何正确设置时间触发机制。if(date.getHours()==5)//dostuff工作?答案你可以使用client.... 查看详情

每天每分钟开始时的 API 请求 [重复]

】每天每分钟开始时的API请求[重复]【英文标题】:APIrequestatthebeginningofeachminuteoftheday[duplicate]【发布时间】:2021-07-1723:23:23【问题描述】:我正在使用json.load来发出API请求。我想自动化它,以便它在每分钟的第一秒发出请求,从... 查看详情

用剪映将无字幕的英文视频翻译成中文字幕(附教程+软件)

...击生成,下载字幕文件rst格式或txt格式到本地。使用教程:1.导入英文视频2.识别成一段英文视频,如下图3.此时字幕是“英文字幕”,如上图。退出软件(切记一点要退出剪映软件),现在需要用字幕... 查看详情

果子学院springboot源码解析视频教程

目录:第1节SpringBoot介绍,源码阅读环境搭建,插件安装[免费观看]00:13:12分钟 第2节Spring源码阅读环境搭建[免费观看]00:19:58分钟 第3节SpringApplication初始化[免费观看]00:20:47分钟%h8p;L%a2b&u‘S第4节SpringApplicationrun方法解析(1)--... 查看详情

为啥 DirectShow 加载视频字幕文件?

】为啥DirectShow加载视频字幕文件?【英文标题】:WhyDirectShowloadvideosubtitlefile?为什么DirectShow加载视频字幕文件?【发布时间】:2017-06-3001:31:20【问题描述】:我使用这个类(来自CodeProject的found,删除了一些方法和属性以减少代... 查看详情

如何去除视频内的字幕和台词?最新4种方法汇总

对于很多自媒体和视频剪辑从业者来说,视频去文字和水印是家常便饭了,经常需要去除各种视频中的文字。那么如何去除视频中的文字(字幕)呢?随着科技的发展,AI人工智能技术在音视频的应用也越... 查看详情

youtube-dl 不下载自动生成的字幕

】youtube-dl不下载自动生成的字幕【英文标题】:youtube-dldoesnotdownloadauto-generatedsubtitles【发布时间】:2020-12-1720:46:44【问题描述】:我正在尝试下载视频的播放列表,所有视频都带有自动生成的字幕,但是当我插入标记--write-sub/--... 查看详情

获取只有字幕 Youtube API 的视频列表

】获取只有字幕YoutubeAPI的视频列表【英文标题】:GetListofVideosthatOnlyHaveSubtitlesYoutubeAPI【发布时间】:2020-11-0415:28:30【问题描述】:我有一个可以使用YoutubeAPI搜索视频的Python代码。我的输出目标是检索只有字幕/CC的视频,就像You... 查看详情

4个高质量自学网站每天只要5分钟,受益一生!

...网站:1.51学习网是一个专业的自学网站,提供我要自学网教程:自学CAD、自学pro/e、自学C语言等计算机辅助设计、图形图像、计算机编程、计算机基础等的自学知识点,应有尽有。2.办公资源一个专业的office教程网站。现在走到哪... 查看详情

git+jenkins持续集成三-定时构建语法

...H/15****每30分钟构建一次:H/30****每2小时构建一次:HH/2***每天早上8点构建一次:08***每天中午下班前定时构建一次:012***每天下午下班前定时构建一次:018***每天的8点,12点,22点,一天构建3次:08,12,22***一个小时的前30分钟,每... 查看详情

python基础教程(入门教程),30分钟玩转python编程!(代码片段)

这是一篇针对初学者的 [Python]基础教程,只要你认真阅读,花费30分钟即可快速了解Python。这篇Python入门教程讲解的知识点包括:Python编程环境的搭建、Python基本操作入门、Python数据类型、Python语句和函数。Python环境... 查看详情

解决方案视频字幕生成+自动翻译字幕(中英,中法视频,双语字幕制作)

problem有一个没有字幕的外语视频,要生成一个中外双字幕的视频。1、字幕生成:语音识别使用Netch为pyTranscriber提供本机代理,并用pyTranscriber一键上传通过开源API生成视频相应语言的字幕。Netch下载:https://github.co... 查看详情

请问quartz的每天2:30至22:30之间每隔十分钟触发的cron表达式为“030/10

-22**?”正确吗?参考技术A030/10-22**?这样貌似是10-22点每个半小时触发一次追问提交有误,是030/102-22**?意思是2点至22点的30分开始的每隔十分钟 查看详情

30分钟掌握dart语言(代码片段)

在Dart中,一切都是对象,一切对象都是class的实例,哪怕是数字类型、方法甚至null都是对象,所有的对象都是继承自Object虽然Dart是强类型语言,但变量类型是可选的因为Dart可以自动推断变量类型Dart支持范型,List<int>表示... 查看详情