赞
踩
今天手把手教大家如何把视频代码化~
本项目的目的是将宣传视频转成ASCII符号形式展示出来。
将下载的文件解压缩,然后找到bin目录,添加到环境变量。
最后记得点击确认。
pip install you-get
you-get -i url
记得提前下载ffmpeg,否则可能出现音频、视频分开的情况。
-o 后面加 保存路径 视频URL
you-get --format=dash-flv -o D:\PyCharm\Projects\bingdundun url
保存的视频就在项目文件夹里面
加载包:
from PIL import Image, ImageDraw, ImageFont
import numpy as np
import os
import shutil
创建存储图片的路径:
def createpath(self): # 源视频文件的图片路径 if not os.path.exists(self.pic_path): os.makedirs(self.pic_path) else: # 清空在创建 shutil.rmtree(self.pic_path) os.makedirs(self.pic_path) # 转换之后的图片路径 if not os.path.exists(self.ascii_path): os.makedirs(self.ascii_path) else: # 清空再创建 shutil.rmtree(self.ascii_path) os.makedirs(self.ascii_path) # 存储输出文件的目录 if not os.path.exists(self.outpath): os.makedirs(self.outpath)
将视频分割为图片:
def video2pic(self):
# 使用ffmpeg切割图片,命令行如下
cmd = 'ffmpeg -i {0} -r 24 {1}/%06d.jpeg'.format(self.filename, self.pic_path)
os.system(cmd)
将图片缩放、转成ascii形式:
def pic2ascii(self): # 读取原始图片目录 pic_list = sorted(os.listdir(self.pic_path)) total_len = len(pic_list) count = 1 # 遍历每张图片 for pic in pic_list: # 图片完整路径 imgpath = os.path.join(self.pic_path, pic) # 1、缩小图片,转成灰度模式,存入数组 origin_img = Image.open(imgpath) # 缩小之后宽高 resize_width = int(origin_img.size[0] / self.resize_times) resize_height = int(origin_img.size[1] / self.resize_times) resize_img = origin_img.resize((resize_width, resize_height), Image.ANTIALIAS).convert("L") img_arr = np.array(resize_img) # 2、新建空白图片(灰度模式、与原始图片等宽高) new_img = Image.new("L", origin_img.size, 255) draw_obj = ImageDraw.Draw(new_img) font = ImageFont.truetype("arial.ttf", 8) # 3、将每个字符绘制在 8*8 的区域内 for i in range(resize_height): for j in range(resize_width): x, y = j * self.resize_times, i * self.resize_times index = int(img_arr[i][j] / 4) draw_obj.text((x, y), self.ascii_char[index], font=font, fill=0) # 4、保存字符图片 new_img.save(os.path.join('temp_ascii', pic), "JPEG") print("已生成ascii图(%d/%d)" % (count, total_len)) count += 1
合成视频:
def ascii2video(self):
# 输出视频保存路径
savepath = os.path.join(self.outpath, self.outname)
cmd = 'ffmpeg -threads 2 -start_number 000001 -r 24 -i {0}/%06d.jpeg -vcodec mpeg4 {1}'.format(self.ascii_path, savepath)
os.system(cmd)
获取原始视频的mp3文件:
def video2mp3(self):
# mp3名字和保存路径
name = self.filename.split('.')[0] + '.mp3'
savepath = os.path.join(self.outpath, name)
cmd = 'ffmpeg -i {0} -f mp3 {1}'.format(self.filename, savepath)
os.system(cmd)
将视频和音频合并:
def mp4andmp3(self):
cmd = 'ffmpeg -i {0} -i {1} -strict -2 -f mp4 {2}'.format(self.mp4filename, self.mp3ilename, self.mergefilename)
os.system(cmd)
完整代码:main.py 提取码:ft3r
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。