カラー化内訳
興味ないかも知れませんが一応説明します。
プログラムは結果の通りチャンと動きますが
チョット雑なところはお許しください。
説明専用のコードではないので・・・m(__)m
①白黒動画を用意する
②用意した白黒動画を1000ミリ秒単位のフレーム数を元に画像変換する
例)movie_to_png.py(Pythonの拡張子は.pyです)
import cv2
# 動画名
movie_name = ‘r0’
# 動画ファイル名
movie = movie_name + ‘.mp4’
# OpenCVでの読み込み
cap = cv2.VideoCapture(movie)
# 幅
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
print(‘width : {:.0f} px’.format(width))
# 高さ
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
print(‘height : {:.0f} px’.format(height))
# 総フレーム数
num_frame = cap.get(cv2.CAP_PROP_FRAME_COUNT)
print(‘number of frames : {:.0f}’.format(num_frame))
# fps
fps = cap.get(cv2.CAP_PROP_FPS)
print(‘fps : {:f}’.format(fps))
cnt = 0
while True:
ret, frame = cap.read()
if ret == True:
cnt += 1
# 画像を生成(今回は0を五桁以上並べる必要あり=桁数最大値より多くすべし)
cv2.imwrite(‘splitted_mono’ + ‘/’ + ‘{:s}_{:05d}.png’.format(movie_name, count), frame)
else:
break
さあ、ここからがキモのカラー化を行っていきます
③白黒画像をカラー画像に変換します
例)mono_to_color.py
# coding: utf-8
from pathlib import Path
from PIL import Image, ImageSequence
import cv2
import glob
import requests
movie_name = ‘r0’
movie = movie_name + ‘.mp4’
cap = cv2.VideoCapture(movie)
# モノクロmp4へのパス(重複してますお許しを)
IMAGE_MONO_PATH = ‘r0.mp4’
# 生成されるカラーmp4へのパス
IMAGE_COLOR_PATH = ‘roman_holiday.mp4’
# 分割したモノクロ画像生成フォルダ
DESTINATION_MONO = ‘splitted_mono’
# 分割したカラー画像生成フォルダ
DESTINATION_COLOR = ‘splitted_color’
cap = cv2.VideoCapture(IMAGE_MONO_PATH)
fps = cap.get(cv2.CAP_PROP_FPS)
DURATION = round(1000/fps)
def main():
frames = get_frames(IMAGE_MONO_PATH)
write_frames(frames, IMAGE_MONO_PATH, DESTINATION_MONO)
get_color(DESTINATION_MONO, DESTINATION_COLOR)
join_images(DESTINATION_COLOR, IMAGE_COLOR_PATH, DURATION)
def get_color(mono_destination, color_destination):
dir_dest = Path(color_destination)
if not dir_dest.is_dir():
dir_dest.mkdir(0o700)
print(‘Destionation directory is created: “{}”.‘.format(color_destination))
files = sorted(glob.glob(mono_destination + ‘/*.png’))
for i, file in enumerate(files):
r = requests.post(
“https://api.deepai.org/api/colorizer”,
files={
‘image’: open(file, ‘rb’),
},
headers={‘api-key’: ‘5226b592-9551-4b29-a0ad-9a675531df0a’}
)
url = r.json()[‘output_url’]
file_name = color_destination + ‘/roma’ + str(‘{0:05d}’.format(i)) + “.png“
response = requests.get(url)
image = response.content
with open(file_name, “wb”) as f:
f.write(image)
def main():
get_color(DESTINATION_MONO, DESTINATION_COLOR)
# join_images(DESTINATION_COLOR, IMAGE_COLOR_PATH, DURATION)
if __name__ == ‘__main__’:
main()
詰めの段階に入ってまいりました。
これを動画にしてみましょう!
④例)png_to_movie.py
import cv2
import glob
# モノクロmp4へのパス
IMAGE_MONO_PATH = ‘r0.mp4’
# 生成されるカラーmp4へのパス
IMAGE_COLOR_PATH = ‘roman_holiday.mp4’
# 分割したモノクロ画像生成フォルダ
DESTINATION_MONO = ‘splitted_mono’
# 分割したカラー画像生成フォルダ
DESTINATION_COLOR = ‘splitted_color’
cap = cv2.VideoCapture(IMAGE_MONO_PATH)
fps = cap.get(cv2.CAP_PROP_FPS)
duration = round(1000/fps)
size = (636,480)
files = sorted(glob.glob( ‘splitted_color/*.png’))
fourcc = cv2.VideoWriter_fourcc(‘m’,’p’,’4′,’v’)
movi = cv2.VideoWriter(‘roman_holiday.mp4’,fourcc,fps,size)
for file in files:
img = cv2.imread(file)
img = cv2.resize(img,(636,480))
movi.write(img)
movi.release()
⑤動画から音を抜き出す
例)mp4_to_wav.py
import ffmpeg
# 入力内訳
stream = ffmpeg.input(“r0.mp4”)
# 出力内訳
stream = ffmpeg.output(stream, “r0.wav”)
# それを実行
ffmpeg.run(stream)
この後は、オーディオとカラー画像を合体させるだけですが
pythonでやるよりMovieメーカーなどでやった方が間違いはないと思っています。
この記事へのコメントはありません。