当前位置:   article > 正文

Python基础详解(十三):(视频符号化)将视频转换成ASCII符号形式展示出来_如何把视频变成符号的形式

如何把视频变成符号的形式

一. 前言

今天手把手教大家如何把视频代码化~

二. 项目简介

本项目的目的是将宣传视频转成ASCII符号形式展示出来。

三. 基本要求

  1. 安装ffmpeg.exe
  2. 安装you-get库,下载视频
  3. 创建目录,将视频按帧分割成图片存入目录
  4. 遍历将图片转成ASCII形式的图片
  5. 合成视频
  6. 获取音频文件
  7. 合并视频和音频文件

四. 代码实现

4.1 安装ffmpeg.exe

将下载的文件解压缩,然后找到bin目录,添加到环境变量。
最后记得点击确认。

4.2 安装you-get

4.2.1 下载

pip install you-get
  • 1

4.2.2 检查视频信息

you-get -i url
  • 1

4.2.3 下载 mp3 格式视频

记得提前下载ffmpeg,否则可能出现音频、视频分开的情况。
-o 后面加 保存路径 视频URL

you-get --format=dash-flv -o D:\PyCharm\Projects\bingdundun url
  • 1

4.3 执行代码

保存的视频就在项目文件夹里面

加载包:

from PIL import Image, ImageDraw, ImageFont
import numpy as np
import os
import shutil
  • 1
  • 2
  • 3
  • 4

创建存储图片的路径:

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)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

将视频分割为图片:

def video2pic(self):
        # 使用ffmpeg切割图片,命令行如下
        cmd = 'ffmpeg -i {0} -r 24 {1}/%06d.jpeg'.format(self.filename, self.pic_path)
        os.system(cmd)
  • 1
  • 2
  • 3
  • 4

将图片缩放、转成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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

合成视频:

 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)
  • 1
  • 2
  • 3
  • 4
  • 5

获取原始视频的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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

将视频和音频合并:

def mp4andmp3(self):
        cmd = 'ffmpeg -i {0} -i {1} -strict -2 -f mp4 {2}'.format(self.mp4filename, self.mp3ilename, self.mergefilename) 
        os.system(cmd)

  • 1
  • 2
  • 3
  • 4

完整代码:main.py 提取码:ft3r

在这里插入图片描述

五. 总结

  • 欢迎大家尝试更换多种视频。
  • 对本项目感兴趣或者有什么问题的话,欢迎关注非鱼子焉私信探讨。
  • 欢迎大家 喜欢、收藏 、评论。

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/837825
推荐阅读
相关标签
  

闽ICP备14008679号