目录
- 一. 前言
- 二. 项目简介
- 三. 基本要求
- 四. 代码实现
- 4.1 安装ffmpeg.exe
- 4.2 安装you-get库
- 4.2.1 下载
- 4.2.2 检查视频信息
- 4.2.3 下载 mp3 格式视频
- 4.3 执行代码
- 五. 总结
一. 前言
今天手把手教大家如何把视频代码化~
二. 项目简介
本项目的目的是将宣传视频转成ASCII符号形式展示出来。
- 基于win11环境,python3.7版本
- 项目中用到了ffmpeg.exe 用于编辑视频
下载地址:ffmpeg-N-102841-g041267b558-win64-lgpl-shared
提取码:xg9n
三. 基本要求
- 安装ffmpeg.exe
- 安装you-get库,下载视频
- 创建目录,将视频按帧分割成图片存入目录
- 遍历将图片转成ASCII形式的图片
- 合成视频
- 获取音频文件
- 合并视频和音频文件
四. 代码实现
4.1 安装ffmpeg.exe
将下载的文件解压缩,然后找到bin目录,添加到环境变量。
最后记得点击确认。
4.2 安装you-get库
4.2.1 下载
pip install you-get
4.2.2 检查视频信息
you-get -i url
4.2.3 下载 mp3 格式视频
记得提前下载ffmpeg,否则可能出现音频、视频分开的情况。
-o 后面加 保存路径 视频URL
you-get --format=dash-flv -o D:\PyCharm\Projects\bingdundun url
4.3 执行代码
保存的视频就在项目文件夹里面
加载包:
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):
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)
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)
new_img = Image.new("L", origin_img.size, 255)
draw_obj = ImageDraw.Draw(new_img)
font = ImageFont.truetype("arial.ttf", 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)
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):
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
五. 总结
- 欢迎大家尝试更换多种视频。
- 对本项目感兴趣或者有什么问题的话,欢迎关注非鱼子焉私信探讨。
- 欢迎大家 喜欢、收藏 、评论。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)