python视频处理代码_python如何实现视频转代码视频

本文实例为大家分享了python如何实现视频转代码视频的具体代码,供大家参考,具体内容如下

# -*- coding:utf-8 -*-

#coding:utf-8

import argparse

import os

import cv2

import subprocess

from cv2 import VideoWriter, VideoWriter_fourcc, imread, resize

from PIL import Image, 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文件,默认不保存

# 获取参数

# args = parser.parse_args()

# INPUT = args.file

# OUTPUT = args.output

# SAVE = args.save

# FPS = args.fps

# 像素对应ascii码

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

# ascii_char = list("MNHQ$OC67+>!:-. ")

# ascii_char = list("MNHQ$OC67)oa+>!:+. ")

# 将像素转换为ascii码

def get_char(r, g, b, alpha=256):

if alpha == 0:

return ''

length = len(ascii_char)

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

unit = (256.0 + 1) / length

return ascii_char[int(gray / unit)]

# 将txt转换为图片

def txt2image(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 in range(height):

for j in range(width):

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

colors.append((pixel[0], pixel[1], pixel[2]))

if (len(pixel) == 4):

txt += get_char(pixel[0], pixel[1], pixel[2], pixel[3])

else:

txt += get_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 in range(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)

# 将视频拆分成图片

def video2txt_jpg(file_name):

vc = cv2.VideoCapture(file_name)

c = 1

if vc.isOpened():

r, frame = vc.read()

if not os.path.exists('Cache'):

os.mkdir('Cache')

os.chdir('Cache')

else:

r = False

while r:

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

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

r, frame = vc.read()

c += 1

os.chdir('..')

return vc

# 将图片合成视频

def jpg2video(outfile_name, fps):

fourcc = VideoWriter_fourcc(*"MJPG")

images = os.listdir('Cache')

im = Image.open('Cache/' + images[0])

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

os.chdir('Cache')

for image in range(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()

# 递归删除目录

def remove_dir(path):

if os.path.exists(path):

if os.path.isdir(path):

dirs = os.listdir(path)

for d in dirs:

if os.path.isdir(path + '/' + d):

remove_dir(path + '/' + d)

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

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

os.rmdir(path)

return

elif os.path.isfile(path):

os.remove(path)

return

# 调用ffmpeg获取mp3音频文件

def video2mp3(file_name):

outfile_name = file_name.split('.')[0] + '.mp3'

subprocess.call('ffmpeg -i ' + file_name + ' -f mp3 ' + outfile_name, shell=True)

# 合成音频和视频文件

def video_add_mp3(file_name, mp3_file):

outfile_name = file_name.split('.')[0] + '-txt.mp4'

subprocess.call('ffmpeg -i ' + file_name + ' -i ' + mp3_file + ' -strict -2 -f mp4 ' + outfile_name, shell=True)

if __name__ == '__main__':

INPUT = r"G:\py\学习python\视频到代码\video39.mp4"

OUTPUT = r"G:\py\学习python\视频到代码\video39_2.mp4"

SAVE = r"G:\py\学习python\视频到代码\\video39_3"

FPS = "24"

vc = video2txt_jpg(INPUT)

FPS = vc.get(cv2.CAP_PROP_FPS) # 获取帧率

print(FPS)

vc.release()

jpg2video(INPUT.split('.')[0], FPS)

print(INPUT, INPUT.split('.')[0] + '.mp3')

video2mp3(INPUT)

video_add_mp3(INPUT.split('.')[0] + '.avi', INPUT.split('.')[0] + '.mp3')

if (not SAVE):

remove_dir("Cache")

os.remove(INPUT.split('.')[0] + '.mp3')

os.remove(INPUT.split('.')[0] + '.avi')

流程图:

这次python编程的流程图如下:

2019617153044722.jpg?2019517153058

注意事项:

在编程的过程中有需要注意的几点:

这次编程使用到了opencv库,需要安装

帧率的获取可以通过这个函数——FPS = vc.get(cv2.CAP_PROP_FPS)

合成后的视频是没有声音的,我们使用ffmpeg进行合成

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

遵义大数据中心项目工程概况_中策大数据:8月建筑工程项目有哪些?建筑工程项目信息汇总...

2020年8月建筑工程项目有哪些&#xff1f;中策大数据中国工程网为你搜集整理出了建筑工程项目信息&#xff0c;包括项目环评、施工单位招标、施工建设、项目设计、立项审批等各个工程项目阶段的拟在建项目。2020年8月建筑工程项目信息汇总&#xff1a;山东省济南温泉城通用航空…

python中str是什么_python的str()字符串类型的方法详解

字符串一旦创建&#xff0c;不可修改&#xff0c;一旦修改或者拼接&#xff0c;都会造成重新生成字符串&#xff0c;因为内存存数据是一个挨着一个存的&#xff0c;如果增加一个字符串的话&#xff0c;之前的老位置只有一个地方&#xff0c;不够&#xff0c;这是原理性的东西&a…

php什么程度算学会,十天学会PHP - 序1,学会的标准是什么?(20180820-1)

学会的标准是什么十天学会&#xff0c;这种名称难免给人“浮躁”之感&#xff0c;所以要和大家稍作解释。很多同学认为&#xff0c;学会 达到目的&#xff0c;这个看法过于主观&#xff0c;比如想就业、创业、做毕业设计&#xff0c;他们所需要的专业知识差异很大&#xff0c;…

空间皮肤代码_不废话,看我20行代码搞定色块提取与定位…….

点击上方蓝字关注我们微信公众号&#xff1a;OpenCV学堂关注获取更多计算机视觉与深度学习知识问题来由这个问题是谁问我的我已经不记得了&#xff0c;刚开始的时候他发了这张图像给我&#xff0c;让我给他看一下&#xff0c;我当时告诉他转换一下色彩空间提取就好啦&#xff0…

python字符串怎么表示_python中字符串的几种表达方式(用什么方式表示字符串)...

原博文 2018-11-21 18:45 − 说明: 今天在学习python的基础的内容,学习在python中如何操作字符串,在此记录下. 主要是python中字符串的几种表达&#xff0c;表示方式。 python的几种表达方式 1 使用单引号扩起来字符串 >>> my python lession #以单引号将字符串扩...0…

dw如何写php代码提示,DW CS5 jquery代码提示插件

喜欢使用Dreamweaver(业内简称dw)做php开发的朋友应该都知道dw是从6.0开始才支持jquery代码提示的。那么对于电脑上安装的是dw cs5而又需要jquery代码提示的该怎么办呢&#xff1f;将cs5卸了然后安装6吗&#xff1f;这个方法不是很妥&#xff0c;毕竟现在dw cs软件已经是几百兆…

python3.6 django部署_Apache2+Django+Python3.6部署-

本文指导安装Apache2, mod_wsgi 4.6.5, Django2.1,以及安装过程中可能出现的问题及解决方法。1,安装Apache2.4我本机是Ubuntu16.04的系统,如果时CenterOS&#xff0c;使用yum安装就好了.sudo apt install apache2 这个安装一般没有什么问题2,源码编译安装Python3.6源码地址&…

python中文文本分析_python使用snownlp进行中文文本处理以及分词和情感分析 - pytorch中文网...

SnowNLP: 一个简单的中文文本处理库 SnowNLP是一个python写的类库&#xff0c;可以方便的处理中文文本内容&#xff0c;是受到了TextBlob的启发而写的&#xff0c;由于现在大部分的自然语言处理库基本都是针对英文的&#xff0c;于是写了一个方便处理中文的类库&#xff0c;并且…

php异步方案,php 伪异步执行实现方法

需求描述&#xff1a;客户端访问php文件&#xff0c;php需要做某个耗时的操作。例如&#xff1a;访问远程接口数据 而客户端不需耗时操作的结果只期望快速得到输出.php本身是不支持异步操作的&#xff0c;可以用子进程的方式模拟异步操作执行&#xff0c;但实现起来比较复杂而且…

python原理与架构_Python:爬虫原理和网页构造

入门网络数据爬取&#xff0c;也就是Python爬虫现实中我们使用浏览器访问网页时&#xff0c;网络是怎么运转的&#xff0c;做了什么呢&#xff1f;首先&#xff0c;必须了解网络连接基本过程原理&#xff0c;然后&#xff0c;再进入爬虫原理了解就好理解的多了。1、网络连接原理…

flutter打包的app有多大_前端大势所趋---Flutter 这篇文章会让你行动起来

Flutter和原生APP的性能对比前言自从今年google IO大会推出flutter跨平台开发框架以来&#xff0c;flutter在各个技术论坛里被吵得如日中天。flutter团队直言flutter可以帮助开发者轻松实现恒定60fps的性能体验。我们知道flutter跨平台的原理是采用dart语言预编译的方式直接编译…

用java创建窗口程序,创建窗口的应用程序

创建窗口的应用程序通过前面的基础知识的学习&#xff0c;已经对ctypes库的基本功能学会了使用&#xff0c;为了加强这种知识训练&#xff0c;以及运用刚学习的知识的快乐&#xff0c;我们来创建一个稍稍复杂一点的应用程序。这个应用程序是所有后面应用程序的基础&#xff0c;…

python前端代码_python前端HTML

超文本标记语言(Hypertext Markup Language, HTML)是一种用于创建网页的标记语言,不是一种编程语言,没有逻辑的HTML基础文档结构#声明为HTML5文档#是文档的开始标记和结束的标记,lang设置浏览器语言#定义了网页标题,在浏览器标题栏显示,charset声明编码,否则会出现乱码网页标题…

python爬取b站排行榜_实时爬取B站排行榜并保存为表格——每周一个爬虫小教程系列...

从这周开始&#xff0c;每周来一个爬虫小教程&#xff0c;希望对你们有所帮助&#xff0c;这次的目标是B站排行榜至于爬取什么内容&#xff0c;目前感觉就把序号&#xff0c;名称以及评分爬取下来吧&#xff08;因为我是边写教程边写代码的&#xff09; 这次需要用到的知识&…

java7优化,让Eclipse在10秒内启动的7个优化提速技巧

大约一个月前&#xff0c;我发表了一篇博客&#xff0c;其中介绍了对Eclipse的爱与恨。 有些人问我如何给Eclipse提速&#xff0c;这篇文章就来讨论这个问题。顺带提一下&#xff0c;这篇文章不是比较IDE&#xff0c;所以不要说你讨厌某个IDE而选择另外一个。这篇文章只是关注如…

python四位的千位百位十位_输入一个四位正整数,使用字符串切片方法,计算出这个数的个位 十位 百位 千位?...

展开全部#includeint main(){ char s[5],s1[9]"千百十62616964757a686964616fe59b9ee7ad9431333433653938个";int i;printf("输入一个四位数:");scanf("%s",s);for(i3;i>-1;i--)printf("%c%c位数&#xff1a;%c\n",s1[ii],s1[ii1],…

css 垂直居中_html中div使用CSS实现水平/垂直居中的多种方式

CSS中的居中&#xff0c;在工作中&#xff0c;会经常遇到。它可以分为水平居中和垂直居中&#xff0c;以下是几种实现居中的方式。以下例子中&#xff0c;涉及到的CSS属性值。.parent-frame { width: 200px; height: 200px; border: 1px solid red; } .child-frame { width…

python同时输出两个数组_python中实现将多个print输出合成一个数组

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

matlab如何实现降维,matlab怎么把矩阵降维

1. matlab如何对一个矩阵 求导而且不降维gradient计算数值梯度。函数F(x,y&#xff0c;。)在(x0,y0&#xff0c;。)的梯度就是函数在该点的导数&#xff0c;通常在数学上记作▽F(x0,y0&#xff0c;。)或gradF(x0,y0,。)。梯度是一个向量&#xff0c; 它的方向是函数在一点变化率…

python线程等待_python3 中 Event.wait 多线程等待

原博文 2018-04-26 20:45 − event.wait(time) 等待 time 时间后&#xff0c;执行下一步。或者在调用 event.set() 后立即执行下一步。 event.clear() 清除信号 event.set() 设置信号 event.isSet() 判断是否设置信号 要求: 定义一个按钮&#xff0c;等待 3... 相关推荐 2019-1…