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;山东省济南温泉城通用航空…

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软件已经是几百兆…

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

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

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

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

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

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

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

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

php表白情话,朋友圈唯美表白短句情话 适合发朋友圈的情话

1、一个人经历了所有的苦难&#xff0c;也不要指望能和谁在一起&#xff1b;我曾经真诚的尝试过&#xff0c;但是结果我不想说。2、只要你愿意&#xff0c;只要我有&#xff0c;整个世界都是你的&#xff0c;而你只能是我的。3、只要你愿意&#xff0c;当你失落失意的时候&…

高德地图看各省分界线_深度解读|高德宣布高精地图“百元时代”背后的商业逻辑是什么...

车展前夕&#xff0c;高德的一次媒体沟通会&#xff0c;或许将为国内自动驾驶的发展带来深远影响。4月11日&#xff0c;高德地图在北京举行“高精宣言”媒体沟通会&#xff0c;表示将对高精地图服务进行升级&#xff0c;并以成本价格提供标准化高精地图&#xff0c;与合作伙伴分…

js获取ip地址_(原创)Node.JS实战31:大名鼎鼎的Express!

Express &#xff08;http://expressjs.com&#xff09;是Node.JS中一个简洁、灵活、强大的Web应用框架&#xff0c; 它提供了一系列强大特性&#xff0c;可以帮助我们快速创建各种Web 应用&#xff0c;也可用来编写各种的Web工具。Express博大精深&#xff0c;本文在此只做简单…

mysql跳过安全_Navicat连接MySQL数据库

前言:在使用Gin架构搭建博客的时候,需要设计数据库,以及连接数据库.命令端口操控效率实在是太低且不好管理,这个时候使用Navicat就能轻松高效的使用数据库了.步骤:下载安装Navicat,Mysql配置Mysql及其账号密码 Navicat连接Mysql1.下载安装Navicat,MysqlNavicat官网下载地址:…

java 切面_实用|AOP切面编程手段大汇总

点击上方"欧学长的架构成长之路" 关注我前言首先说一下什么是AOP&#xff1f;AOP就是面向切面编程&#xff0c;它是一个思想&#xff0c;通过切面&#xff0c;我们可以将那些反复出现的代码抽取出来&#xff0c;放在一个地方统一处理&#xff0c;提高代码的复用性。A…

php可以控制硬件吗,控制面板的作用是设置硬件接口吗?

错误&#xff0c;控制面板的作用是对系统进行有关的设置。控制面板是一个系统文件夹&#xff0c;用来提供各种对计算机系统进行设置和管理的工具&#xff1b;使用控制面板可以对系统进行设置与管理&#xff0c;例如设置系统环境参数的默认值和属性&#xff0c;添加新的应用程序…

不知道工作组名称怎样加入_剩米饭不知道怎样做?试试泡菜炒饭,再也不用担心米饭做多了...

剩米饭不知道怎样做&#xff1f;试试泡菜炒饭&#xff0c;再也不用担心米饭做多了东北的朋友这几天连续经历了春天&#xff0c;初夏和冬天&#xff0c;甚至在一天中看到了雪、雨和冰雹。这变化莫测的天气让大家一时间慌了神&#xff0c;不知到底要穿些什么。由于楼上都已经停了…

php元素浮动会产生哪些影响,css浮动带来什么问题

css浮动带来的影响&#xff1a;1、由于浮动元素脱离了文档流&#xff0c;所以父元素的高度无法被撑开&#xff0c;影响了与父元素同级的元素&#xff1b;若没有给父元素设置高度&#xff0c;那么父元素就不会在显示屏上显示。2、浮动元素不再占用原文档流的位置&#xff0c;它会…

linux将字符串转小写_小猿圈总结Linux常见命令(一)

科技发展的今天&#xff0c;互联网不断的发达&#xff0c;很多人学习Linux云计算的时候回因为记不住一些命令从而去找度娘&#xff0c;有时候因为因为找不到linux的命令而烦恼&#xff0c;下面是小猿圈linux讲师给大家总结的linux常见命令&#xff0c;希望对你有所帮助。1、cd命…

cnpm安装webpack_Webpack(一)介绍

一、Webpack是什么、为什么要使用它简单来说&#xff0c;Webpack是一个打包工具。站在2018年的角度&#xff0c;成为一个优秀的前端工程师&#xff0c;除了要会写页面样式和动态效果之外&#xff0c;还需要会用主流的单页面框架、Node.js、简单的前端的性能优化等等。加上现在一…

bytes数组转string指定编码_一篇文章弄懂Python中所有数组数据类型

前言数组类型是各种编程语言中基本的数组结构了&#xff0c;本文来盘点下Python中各种“数组”类型的实现。listtuplearray.arraystrbytesbytearray其实把以上类型都说成是数组是不准确的。这里把数组当作一个广义的概念&#xff0c;即把列表、序列、数组都当作array-like数据类…