python抖音涨粉代码_抖音代码舞Python3实现

2023-05-16

importargparseimportosimportcv2importsubprocessfrom cv2 importVideoWriter_fourccfrom PIL importImage, ImageFont, ImageDraw#命令行输入参数处理#aparser = argparse.ArgumentParser()#aparser.add_argument('file')#aparser.add_argument('-o','--output')#aparser.add_argument('-f','--fps',type = float, default = 24)#帧#aparser.add_argument('-s','--save',type = bool, nargs='?', default = False, const = True)#是否保留Cache文件,默认不保存

classVideo2CodeVideo:def __init__(self):

self.config_dict={#原视频文件

"input_file": "video/test.mp4",#中间文件存放目录

"cache_dir": "cache",#是否保留过程文件。True--保留,False--不保留

"save_cache_flag": False,#使用使用的字符集

"ascii_char_list": list("01B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:oa+>!:+."),

}#第一步从函数,将像素转换为字符

#调用栈:video_2_txt_jpg -> txt_2_image -> rgb_2_char

def rgb_2_char(self, r, g, b, alpha=256):if alpha ==0:return ''length= len(self.config_dict["ascii_char_list"])

gray= int(0.2126 * r + 0.7152 * g + 0.0722 *b)

unit= (256.0 + 1) /lengthreturn self.config_dict["ascii_char_list"][int(gray /unit)]#第一步从函数,将txt转换为图片

#调用栈:video_2_txt_jpg -> txt_2_image -> rgb_2_char

deftxt_2_image(self, file_name):

im= Image.open(file_name).convert('RGB')#gif拆分后的图像,需要转换,否则报错,由于gif分割后保存的是索引颜色

raw_width =im.width

raw_height=im.height

width= int(raw_width / 6)

height= int(raw_height / 15)

im=im.resize((width, height), Image.NEAREST)

txt= ""colors=[]for i inrange(height):for j inrange(width):

pixel=im.getpixel((j, i))

colors.append((pixel[0], pixel[1], pixel[2]))if (len(pixel) == 4):

txt+= self.rgb_2_char(pixel[0], pixel[1], pixel[2], pixel[3])else:

txt+= self.rgb_2_char(pixel[0], pixel[1], pixel[2])

txt+= '\n'colors.append((255, 255, 255))

im_txt= Image.new("RGB", (raw_width, raw_height), (255, 255, 255))

dr=ImageDraw.Draw(im_txt)#font = ImageFont.truetype(os.path.join("fonts","汉仪楷体简.ttf"),18)

font =ImageFont.load_default().font

x= y =0#获取字体的宽高

font_w, font_h = font.getsize(txt[1])

font_h*= 1.37 #调整后更佳

#ImageDraw为每个ascii码进行上色

for i inrange(len(txt)):if (txt[i] == '\n'):

x+=font_h

y= -font_w#self, xy, text, fill = None, font = None, anchor = None,

#*args, ** kwargs

dr.text((y, x), txt[i], fill=colors[i])#dr.text((y, x), txt[i], font=font, fill=colors[i])

y +=font_w

name=file_name#print(name + ' changed')

im_txt.save(name)#第一步,将原视频转成字符图片

#调用栈:video_2_txt_jpg -> txt_2_image -> rgb_2_char

defvideo_2_txt_jpg(self, file_name):

vc=cv2.VideoCapture(file_name)

c= 1

ifvc.isOpened():

r, frame=vc.read()if not os.path.exists(self.config_dict["cache_dir"]):

os.mkdir(self.config_dict["cache_dir"])

os.chdir(self.config_dict["cache_dir"])else:

r=Falsewhiler:

cv2.imwrite(str(c)+ '.jpg', frame)

self.txt_2_image(str(c)+ '.jpg') #同时转换为ascii图

r, frame =vc.read()

c+= 1os.chdir('..')returnvc#第二步,将字符图片合成新视频

deftxt_jpg_2_video(self, outfile_name, fps):

fourcc= VideoWriter_fourcc(*"MJPG")

images= os.listdir(self.config_dict["cache_dir"])

im= Image.open(self.config_dict["cache_dir"] + '/' +images[0])

vw= cv2.VideoWriter(outfile_name + '.avi', fourcc, fps, im.size)

os.chdir(self.config_dict["cache_dir"])for image inrange(len(images)):#Image.open(str(image)+'.jpg').convert("RGB").save(str(image)+'.jpg')

frame = cv2.imread(str(image + 1) + '.jpg')

vw.write(frame)#print(str(image + 1) + '.jpg' + ' finished')

os.chdir('..')

vw.release()#第三步,从原视频中提取出背景音乐

defvideo_extract_mp3(self, file_name):

outfile_name= file_name.split('.')[0] + '.mp3'subprocess.call('ffmpeg -i' + file_name + '-f mp3 -y' + outfile_name, shell=True)#第四步,将背景音乐添加到新视频中

defvideo_add_mp3(self, file_name, mp3_file):

outfile_name= file_name.split('.')[0] + '-code.mp4'subprocess.call('ffmpeg -i' + file_name + '-i' + mp3_file + '-strict -2 -f mp4 -y' + outfile_name, shell=True)#第五步,如果没配置保留则清除过程文件

defclean_cache_while_need(self):#为了清晰+代码比较短,直接写成内部函数

defremove_cache_dir(path):ifos.path.exists(path):ifos.path.isdir(path):

dirs=os.listdir(path)for d indirs:if os.path.isdir(path + '/' +d):

remove_cache_dir(path+ '/' +d)elif os.path.isfile(path + '/' +d):

os.remove(path+ '/' +d)

os.rmdir(path)return

elifos.path.isfile(path):

os.remove(path)return

#为了清晰+代码比较短,直接写成内部函数

defdelete_middle_media_file():

os.remove(self.config_dict["input_file"].split('.')[0] + '.mp3')

os.remove(self.config_dict["input_file"].split('.')[0] + '.avi')#如果没配置保留则清除过程文件

if not self.config_dict["save_cache_flag"]:

remove_cache_dir(self.config_dict["cache_dir"])

delete_middle_media_file()#程序主要逻辑

defmain_logic(self):#第一步,将原视频转成字符图片

vc = self.video_2_txt_jpg(self.config_dict["input_file"])#获取原视频帧率

fps =vc.get(cv2.CAP_PROP_FPS)#print(fps)

vc.release()#第二步,将字符图片合成新视频

self.txt_jpg_2_video(self.config_dict["input_file"].split('.')[0], fps)print(self.config_dict["input_file"], self.config_dict["input_file"].split('.')[0] + '.mp3')#第三步,从原视频中提取出背景音乐

self.video_extract_mp3(self.config_dict["input_file"])#第四步,将背景音乐添加到新视频中

self.video_add_mp3(self.config_dict["input_file"].split('.')[0] + '.avi', self.config_dict["input_file"].split('.')[0] + '.mp3')#第五步,如果没配置保留则清除过程文件

self.clean_cache_while_need()if __name__ == '__main__':

obj=Video2CodeVideo()

obj.main_logic()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python抖音涨粉代码_抖音代码舞Python3实现 的相关文章

  • (discord.py) 尝试更改成员角色时,“用户”对象没有属性“角色”

    因此 我正在尝试编写一个机器人 让某人在命令中指定的主持人指定的一段时间内暂停角色 我知道该变量称为 小时 即使它目前以秒为单位 我稍后会解决这个问题 基本上 它是由主持人在消息 暂停 personmention numberofhours
  • 使用Python开发Web应用程序

    我一直在用 python 做一些工作 但这都是针对独立应用程序的 我很想知道 python 的任何分支是否支持 Web 开发 有人还会建议一个好的教程或网站吗 我可以从中学习一些使用 python 进行 Web 开发的基础知识 既然大家都说
  • 将字符串转换为带有毫秒和时区的日期时间 - Python

    我有以下 python 片段 from datetime import datetime timestamp 05 Jan 2015 17 47 59 000 0800 datetime object datetime strptime t
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • 如何使用装饰器禁用某些功能的中间件?

    我想模仿的行为csrf exempt see here https docs djangoproject com en 1 11 ref csrf django views decorators csrf csrf exempt and h
  • 在循环中每次迭代开始时将变量重新分配给原始值(在循环之前定义)

    在Python中 你使用 在每次迭代开始时将变量重新分配给原始值 在循环之前定义 时 也就是说 original 1D o o o for i in range 0 3 new original 1D revert back to orig
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • 在Python中重置生成器对象

    我有一个由多个yield 返回的生成器对象 准备调用该生成器是相当耗时的操作 这就是为什么我想多次重复使用生成器 y FunctionWithYield for x in y print x here must be something t
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • 如何使用google colab在jupyter笔记本中显示GIF?

    我正在使用 google colab 想嵌入一个 gif 有谁知道如何做到这一点 我正在使用下面的代码 它并没有在笔记本中为 gif 制作动画 我希望笔记本是交互式的 这样人们就可以看到代码的动画效果 而无需运行它 我发现很多方法在 Goo
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐