Python Program Introduction Site

カラー化内訳

興味ないかも知れませんが一応説明します。

プログラムは結果の通りチャンと動きますが

チョット雑なところはお許しください。

説明専用のコードではないので・・・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メーカーなどでやった方が間違いはないと思っています。

 

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

python3X