当前位置:网站首页>这年头还不来尝试线稿图视频??
这年头还不来尝试线稿图视频??
2022-08-09 18:25:00 【knighthood2001】
🥰 博客首页:knighthood2001 欢迎点赞评论️ ️ 热爱python,期待与大家一同进步成长!!️ 跟我一起来巩固基础和刷题吧 |
先看后赞,已成习惯(只截取了一部分,怕截取太多,你们打开卡)


目录
前言
大致思路和上篇文章的类似,这里采用了opencv+PIL+moviepy,最终制作了线稿图的带声音的MP4。
这里我讲了一些关于PIL的知识:利用PIL库进行简单的图像操作,隔壁打王者的小孩子都在向我要素描图,快上车!!
目录如下:需要准备一个视频

代码主要分成以下几个部分:
1原始视频逐帧提取
2原始视频音频提取
3-1PIL批量转换细节帧线稿图 3-2PIL批量转换边缘增强线稿图
4PIL帧-视频合成
5音视频合成最终有声完整视频
注:需要更改的,笔者已经在代码中注释todo了。
1原始视频逐帧提取.py
import os
import cv2
# todo
cap = cv2.VideoCapture('ikun.mp4')
fps = cap.get(cv2.CAP_PROP_FPS)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
frames = cap.get(cv2.CAP_PROP_FRAME_COUNT)
print('fps:', fps, '\n', 'width:', width, '\n', 'height:', height, '\n', 'frames:', frames)
# todo
path = 'ikun'
if not os.path.exists(path):
os.mkdir(path)
i = 0
while True:
flag, frame = cap.read()
filename = path + '/{}.jpg'.format(str(i))
print(filename)
cv2.imwrite(filename, frame)
i = i + 1
if i > int(frames):
break在上篇文章中,笔者是直接将原始视频提取的帧继续边缘检测处理后保存为图片,而在这里,笔者就直接提取原视频的帧并不做修改保存。便于后续操作。
2原始视频音频提取.py
import moviepy.editor as mp
def extract_audio(videos_file_path):
my_clip = mp.VideoFileClip(videos_file_path)
my_clip.audio.write_audiofile(f'{videos_file_path.split(".")[0]}.mp3')
# todo
extract_audio('ikun.mp4')
3-1PIL批量转换细节帧线稿图.py
import os
from PIL import Image
from PIL import ImageFilter
# todo 这里的path为之前逐帧提取的图片,new_path为新生成的线稿图保存的目录
path = 'ikun'
new_path = 'new_ikun1'
if not os.path.exists(new_path):
os.mkdir(new_path)
# 输出原始目录图片数量
a = os.listdir(path)
b = len(a)
print("原始目录图片数:", b)
for i in range(b):
'''细节'''
square = Image.open(path + "/{}.jpg".format(i))
square1 = square.filter(ImageFilter.DETAIL)
'''轮廓'''
square2 = square1.filter(ImageFilter.CONTOUR)
square2.save(new_path + "/{}.jpg".format(i))
print(new_path + "/{}.jpg".format(i))
这里笔者采用了PIL中细节+轮廓的方式,提取线稿图(PIL提取线稿图,需要有轮廓这一步骤)
图片变化展示


3-2PIL批量转换边缘增强线稿图.py
import os
from PIL import Image
from PIL import ImageFilter
# todo 这里的path为之前逐帧提取的图片,new_path为新生成的线稿图保存的目录
path = 'ikun'
new_path = 'new_ikun2'
if not os.path.exists(new_path):
os.mkdir(new_path)
# 输出原始目录图片数量
a = os.listdir(path)
b = len(a)
print("原始目录图片数:", b)
for i in range(b):
'''边缘增强'''
square = Image.open(path + "/{}.jpg".format(i))
square1 = square.filter(ImageFilter.EDGE_ENHANCE)
'''轮廓'''
square2 = square1.filter(ImageFilter.CONTOUR)
square2.save(new_path + "/{}.jpg".format(i))
print(new_path + "/{}.jpg".format(i))
同样的,笔者在这里只换了PIL的一个函数,采用边缘增强+轮廓的方式,大家可以去我之前博客看看,大家也可以自行去尝试,试出多种风格。
利用PIL库进行简单的图像操作,隔壁打王者的小孩子都在向我要素描图,快上车!!
图片变化展示:

(不知道为啥,感觉这个更好看)
4PIL帧-视频合成.py
import cv2
import os
size = (854, 480)
# todo path和保存的视频名称需要根据变化
path = 'new_ikun1'
videowrite = cv2.VideoWriter('output_ikun1.mp4', -1, 25, size)
a = os.listdir(path)
n = len(a)
for i in range(n):
img = cv2.imread(path + "/{}.jpg".format(i))
videowrite.write(img)
videowrite.release()
print('end!')
5音视频合成最终有声完整视频.py
import moviepy.editor as mp
# todo 路径都要看情况变化
# todo 传入的线稿图视频
video = mp.VideoFileClip('output_ikun1.mp4')
audio = mp.AudioFileClip('ikun.mp3')
video_merge = video.set_audio(audio)
# todo 最终生成的带音频的视频
video_merge.write_videofile('final_ikun1.mp4')
# video = mp.VideoFileClip('output_ikun2.mp4')
# audio = mp.AudioFileClip('ikun.mp3')
# video_merge = video.set_audio(audio)
# video_merge.write_videofile('final_ikun2.mp4')注:4和5都只是根据3-1的线稿图内容进行制作视频
总结
大致上已经讲完了,大家对这篇文章里面内容不熟悉的,可以看我前一篇文章,里面有详细讲解。
接下来如果有空的话就会将其改为函数,方便大家更改与使用!!
注:以上内容只是用来探讨技术,方便大家对其产生兴趣!!
边栏推荐
猜你喜欢

ebook下载 | 《 企业高管IT战略指南——企业为何要落地DevOps》

Detailed explanation of VIT transformer
![[免费专栏] Android安全之和平精英(FZ)APK逆向分析](/img/22/a5129a310eec5ee1bf6f1cf90d05de.png)
[免费专栏] Android安全之和平精英(FZ)APK逆向分析

说了半天跨平台,今儿咱就来跨跨!(完结篇)——Kubenetes上手实践
![[免费专栏] Android安全之数据存储与数据安全【大集合】](/img/bc/9d71ff1de27156e11cde169022f4a1.png)
[免费专栏] Android安全之数据存储与数据安全【大集合】

Open Source Summer | List Details Display Based on Ruoyi Architecture

leetcode 503.下一个更大元素II 单调栈

日本著名设计师三宅一生去世:产品曾被国人高价抢 乔布斯也是粉丝

Fully automated machine learning modeling!The effect hangs the primary alchemist!

史上最全架构师知识图谱(纯干货)
随机推荐
C的一些琐碎
什么是ROS
An overview of Office 365 Groups and how to create them
awk use
三面(技术 +HR 面试)网易,分享我的面试经验!(已拿 offer)
MYSQL物理存储文件的页和INNOBUF的页是否有大小区别?
史上最全架构师知识图谱(纯干货)
MQTT X Web:在线的 MQTT 5.0 客户端工具
21天学习挑战赛--第四天打卡(横竖屏切换)
单片机编程-状态机
放下手机吧:实验表明花20分钟思考和上网冲浪同样快乐
WPF 实现带蒙版的 MessageBox 消息提示框
web正则表达式中^和$的含义是什么
PHP基础笔记-NO.4
kakka rebalance解决方案
[免费专栏] Android安全之数据存储与数据安全【大集合】
一些自动化测试01
[免费专栏] Android安全之APK动态方式逆向应用【三种Smali注入方法】
VIT transformer详解
C#/VB.NET:从PowerPoint文档中提取文本和图片