| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 725 人关注过本帖
标题:moviepy为视频添加字幕
只看楼主 加入收藏
xdzzzxc
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2023-4-6
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
moviepy为视频添加字幕
import os,pathlib,random
from os.path import splitext,isfile
from moviepy.editor import (VideoFileClip,TextClip,CompositeVideoClip)
src_path=os.path.join(os.getcwd(),u"audios")
print(src_path)
src_path=pathlib.Path(src_path)
print(src_path)
mp4_list=[]
txt_list=[]
for item in src_path.iterdir():
    if ".mp4" in str(item):
        mp4_list.append(str(item))
    elif ".txt" in str(item):
        txt_list.append(str(item))
print(mp4_list)
print(txt_list)
if len(mp4_list)>0:
    src_mp4=random.choice(mp4_list) #随机选取一个音频文件并得到相应的txt文件
    src_txt=src_mp4.replace("mp4","txt")
else:
    print("No mp4_file exist!")
    exit()
src_txt=random.choice(txt_list)
video=VideoFileClip(src_mp4)
w,h=video.w,video.h
txts=[]

tran_to_srt_list=[]
each_of_time_start=0
each_of_time_duration=0

with open(src_txt,'r',encoding='utf-8') as f:
    # print(f.readlines())
    for line in f.readlines():
        each_of_time_duration=(len(line)-1)/(180/60)
        
        txt=(TextClip(line,fontsize=40,font="STLITI.TTF",size=(w-20,h),
            align="center",color="black")
            .set_position((10,h-150))
            .set_duration(each_of_time_duration).set_start(each_of_time_start))
        txts.append(txt)
        each_of_time_start=each_of_time_start+each_of_time_duration+0.5
print(len(txts))
print(*txts)

video=CompositeVideoClip([video,*txts])
运行后,到最后这一步出错:TypeError: cannot unpack non-iterable NoneType object
搜索更多相关主题的帖子: item print path txt str 
2023-04-07 00:01
东海ECS
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:Python
等 级:版主
威 望:32
帖 子:412
专家分:1646
注 册:2023-1-24
收藏
得分:20 
这个错误可能是因为在读取txt文件时,没有找到相应的文件导致的。建议在读取txt文件之前,先添加一个判断文件是否存在的语句。例如:
程序代码:
if not os.path.exists(src_txt):
    print("No txt_file exist!")
    exit()

同时,也建议在读取txt文件时,使用strip()方法去除每行末尾的空格和换行符,例如:
程序代码:
for line in f.readlines():
    line = line.strip()
    each_of_time_duration=(len(line)-1)/(180/60)
    ... # 省略内容

会当凌绝顶,一览众山小.
2023-04-07 19:17
xdzzzxc
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2023-4-6
收藏
得分:0 
回复 2楼 东海ECS
谢谢!
2023-06-29 09:34
快速回复:moviepy为视频添加字幕
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029207 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved