不言不语网

这年头还不来尝试线稿图视频??

这年头还不来尝试线稿图视频??

 🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝 

🥰 博客首页:knighthood2001

😗 欢迎点赞👍评论🗨️

❤️ 热爱python,尝试期待与大家一同进步成长!线稿!图视❤️

👀给大家推荐一款很火爆的尝试刷题、面试求职网站👀

跟我一起来巩固基础和刷题吧

先看后赞,线稿已成习惯😁👍👍(只截取了一部分,图视怕截取太多,尝试你们打开卡)

目录

前言

1原始视频逐帧提取.py

2原始视频音频提取.py

3-1PIL批量转换细节帧线稿图.py

3-2PIL批量转换边缘增强线稿图.py

4PIL帧-视频合成.py

5音视频合成最终有声完整视频.py

总结


前言

入门opencv,线稿欢笑快乐每一天

大致思路和上篇文章的图视类似,这里采用了opencv+PIL+moviepy,尝试最终制作了线稿图的线稿带声音的MP4。

这里我讲了一些关于PIL的图视知识:利用PIL库进行简单的图像操作,隔壁打王者的尝试小孩子都在向我要素描图,快上车!线稿!图视

目录如下:需要准备一个视频

代码主要分成以下几个部分:

        1原始视频逐帧提取

        2原始视频音频提取

        3-1PIL批量转换细节帧线稿图  3-2PIL批量转换边缘增强线稿图

        4PIL帧-视频合成

        5音视频合成最终有声完整视频

注:需要更改的,笔者已经在代码中注释todo了。


1原始视频逐帧提取.py

import osimport cv2# todocap = 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)# todopath = 'ikun'if not os.path.exists(path):    os.mkdir(path)i = 0while 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 mpdef extract_audio(videos_file_path):    my_clip = mp.VideoFileClip(videos_file_path)    my_clip.audio.write_audiofile(f'{ videos_file_path.split(".")[0]}.mp3')# todoextract_audio('ikun.mp4')

3-1PIL批量转换细节帧线稿图.py

import osfrom PIL import Imagefrom 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 osfrom PIL import Imagefrom 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 cv2import ossize = (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的线稿图内容进行制作视频


总结

        大致上已经讲完了,大家对这篇文章里面内容不熟悉的,可以看我前一篇文章,里面有详细讲解。

        接下来如果有空的话就会将其改为函数,方便大家更改与使用!!

        注:以上内容只是用来探讨🐔技术,方便大家对其产生兴趣!!

未经允许不得转载:不言不语网 » 这年头还不来尝试线稿图视频??