用边缘检测制作的(伪)线稿风格纳西妲PV:花车颠呀颠
用边缘检测制作的(伪)线稿风格纳西妲PV:花车颠呀颠
为了表示方便,首先要在代码所在的目录下新建一个名为videos和一个名为new的文件夹
其原理是用cv2读出视频,然后逐帧调用imwrite进行保存,这里有一个参数frameRate(帧率),表示每秒多少帧,因为我们是要生成和原来相似的视频,所以这里设置他的值为1
import cv2
import os
path = "./videos"
c = 1
for name in os.listdir(path):
cap = cv2.VideoCapture(os.path.join(path, name))
frameRate = 1
while (True):
ret, frame = cap.read()
if ret:
if (c % frameRate == 0):
print("开始截取视频第:" + str(c) + " 帧")
# 这里就可以做一些操作了:显示截取的帧图片、保存截取帧到本地
cv2.imwrite(os.path.join(path, "%05d" % c + '.jpg'), frame) # 这里是将截取的图像保存在本地
c += 1
cv2.waitKey(0)
else:
print("所有帧都已经保存完成")
break
cap.release()
提取之后的结果是在videos文件夹中会保存每一帧的图片
我们打开其中一张来看看
其原理是调用cv2中的Canny进行边缘检测,并将检测后的结果保存
import cv2
import os
from random import randint
import numpy as np
path = "./videos"
line_color = (0, 0, 0)
bg_color = (255, 255, 255)
cnt = 1
for name in os.listdir(path):
img=cv2.imread(os.path.join(path, name))
img1 = np.zeros((img.shape[0], img.shape[1], 3))
i=cv2.Canny(img,80,120)
img1[i!=255] = bg_color
img1[i==255] = line_color
cv2.imwrite(os.path.join("./new", name), img1)
运行结果是new文件夹中出现边缘检测后的图片
我们打开一张来看看
这里要注意一个size参数,这个参数是图片的大小。只需要将鼠标移动到图像上就可以查看图片的大小了,同时在cv2.VideoWriter中第三个参数是帧率,需要通过原视频的帧率设定,或者根据下一步提取出来的音频的长短尝试设定。
import numpy as np
import cv2
import os
path = r"./new"
size = (1920, 1080)#这个是图片的尺寸,一定要和要用的图片size一致
#完成写入对象的创建,第一个参数是合成之后的视频的名称,第二个参数是可以使用的编码器,第三个参数是帧率即每秒钟展示多少张图片,第四个参数是图片大小信息
videowrite = cv2.VideoWriter(r'./videos/test.mp4',-1,60,size)#20是帧数,size是图片尺寸
img_array=[]
for filename in os.listdir(path):#这个循环是为了读取所有要用的图片文件
img = cv2.imread(os.path.join(path, filename))
if img is None:
print(filename + " is error!")
continue
for i in range(1):
videowrite.write(img)
videowrite.release()
print('end!')
下面我们要把这个在videos文件夹下名为test.mp4的视频换一个文件夹,并且删除掉多余的图片,只留下原本的视频文件,然后进行音频的提取
from moviepy.editor import AudioFileClip
import os
path = r"./videos"
for name in os.listdir(path):
my=AudioFileClip(os.path.join(path, name))
my.write_audiofile(os.path.join(path, name.split(".")[-2]+".mp3"))
这里可以通过剪辑软件或者代码合成,但是考虑到我们并不可能完全了解视频原本的帧率,所以还是推荐用剪辑软件合成,这样可以更好的对比视频和音频的长度
用边缘检测的方式打开:鸡你太美
用边缘检测的方式打开:鸡你太美