本記事では、動画をアニメチックに変換する雛形コードを載せました。動画の返還前後の動画は下記です。
www.youtube.com
■本プログラム
import os
import cv2
from PIL import Image, ImageFont, ImageDraw
import moviepy.editor as mp
import numpy as np
def movie2anime(input_file, out_file):
video = cv2.VideoCapture(input_file)
width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))
size = (width, height)
num_of_frame = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
fps = int(video.get(cv2.CAP_PROP_FPS))
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
writer = cv2.VideoWriter(out_file, fourcc, fps, (width, height))
for i in range(num_of_frame):
ret, frame = video.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGRA2GRAY)
edge = cv2.blur(gray, (3, 3))
edge = cv2.Canny(edge, 50, 150, apertureSize = 3)
edge = cv2.cvtColor(edge, cv2.COLOR_GRAY2BGR)
img2 = frame.copy()
img3 = np.array(img2 / scale, dtype = np.uint8)
img4 = np.array(img3 * scale, dtype = np.uint8)
anime = cv2.subtract(img4, edge)
writer.write(anime)
if i % 50 == 0:
print(str(i) + "/" + str(num_of_frame))
writer.release()
video.release()
print("num_of_frame -> " + str(num_of_frame))
print("fps -> " + str(fps))
def extract_and_set_audio(input_video1, input_video2, out_file, out_audio):
clip_in = mp.VideoFileClip(input_video1).subclip()
clip_in.audio.write_audiofile(out_audio)
clip_out = mp.VideoFileClip(input_video2).subclip()
clip_out.write_videofile(out_file, audio = out_audio)
if __name__ == '__main__':
input_video = '190719_213142.mp4'
scale = 60
file_base_name = os.path.splitext(os.path.basename(input_video))[0]
out_video1 = file_base_name + '_anime_' + str(scale) + '.mp4'
out_audio = file_base_name + '_music.mp3'
out_video2 = file_base_name + '_anime_' + str(scale) + '_finished.mp4'
movie2anime(input_video, out_video1)
input_video2 = out_video1
extract_and_set_audio(input_video, input_video2, out_video2, out_audio)
以上
<広告>
リンク