TikTokのキャラクタービデオは昨年しばらくの間人気がありました。
とにかく、純粋な至福の地の音楽を忘れることはできません...
今回も自分でウェーブを実装してキャラクタービデオを作ります。
使用される主なライブラリは、cv2およびpillowライブラリです。
元のビデオは次のとおりで、Douyinから直接ダウンロードされ、適切な透かしが付いています。
ただし、この操作には影響しません。
/ 01 /ビデオから画像へ
cv2ライブラリをPycharmに直接インストールすることはできません。理由はわかりません。
練習した後、Pycharmの仮想環境にあるだけでよいことがわかりました。
次のコマンドを実行して、cv2ライブラリを正常にインストールします。
pip3 install opencv-python
ただし、ダウンロード速度がまだ遅すぎるため、タイムアウトが発生します。
それが機能しない場合は、公式Webサイトにアクセスして、次の.whl形式でインストールできます。
ビデオから画像へのコードは次のとおりです。
import cv2
import os
# 現在のディレクトリに新しいフォルダを作成します
folder_path ="img_bear/"
os.makedirs(folder_path)
# ビデオをロードする
vc = cv2.VideoCapture('bear.mp4')
c =0
# ロードされたビデオを開くことができるかどうかを確認します
ret = vc.isOpened()
# ループでビデオフレームを読み取る
while ret:
c = c +1
# 1枚の写真を読む,retの値はTrueまたはFlaseです,フレームは読み取られた画像を表します
ret, frame = vc.read()if ret:
# 画像として保存
cv2.imwrite('img_bear/'+str(c)+'.jpg', frame)
# 出力画像名
print('img_bear/'+str(c)+'.jpg')
# 与えられた時間に(単位ミリ秒)ユーザーがキーを押してトリガーするのを待ちます,1ms
cv2.waitKey(1)else:break
# ビデオリリース
vc.release()
最終的に、369枚の画像が正常に生成されました。
キュートでキュートな××クマ、どんなクマなのかわからない…
/ 02 /絵からキャラクターへ
通常の絵からキャラクターへの絵は主に枕ライブラリを使用します。
画像にグレースケール処理を実行し、画像ピクセルのグレースケール値に従って対応する文字を追加します。
具体的なコードは次のとおりです。
from PIL import Image, ImageDraw, ImageFont
import numpy as np
import os
# キャラクター画像フォルダを作成する
folder_path ="bear/"
os.makedirs(folder_path)for i inrange(1,1000):
filename ='img_bear/'+str(i)+'.jpg'
# キャラクターリスト
ascii_char =list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~ <>i!lI;:,\"^`'. ")
# 写真が存在するかどうかを確認します
if os.path.exists(filename):
# 写真をグレースケール画像に変換する,そしてサイズ変更
img_array = np.array(Image.open(filename).resize((70,70), Image.ANTIALIAS).convert('L'))
# 新しい画像オブジェクトを作成します
img = Image.new('L',(560,560),255)
draw_object = ImageDraw.Draw(img)
# フォントを設定する
font = ImageFont.truetype('consola.ttf',10, encoding='unic')
# グレー値に従って対応する文字を追加します
for j inrange(70):for k inrange(70):
x, y = k *8, j *8
index =int(img_array[j][k]/4)
draw_object.text((x, y), ascii_char[index], font=font, fill=0)
name ='bear/'+str(i)+'.jpg'print(name)
# キャラクターの写真を保存する
img.save(name,'JPEG')
最後に、キャラクター画像が正常に生成されました。
上の元の写真と同じように、369枚の写真もあります。
/ 03 /キャラクターからビデオへ
次に、cv2ライブラリを使用して、キャラクターの写真をビデオに変換します。
具体的なコードは次のとおりです。
import cv2
import os
# ビデオエンコーダーを設定する,ここでMJPGエンコーダーを使用します
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
# 出力ビデオパラメータ設定,ビデオファイル名、エンコーダー、フレームレート、ビデオの幅と高さが含まれます(ここでのパラメータは、文字画像のサイズと同じである必要があります)
videoWriter = cv2.VideoWriter('bear_character.avi', fourcc,20.0,(560,560))for i inrange(1,1000):
filename ='bear/'+str(i)+'.jpg'
# 写真が存在するかどうかを確認します
if os.path.exists(filename):
img = cv2.imread(filename=filename)
# 与えられた時間に(単位ミリ秒)ユーザーがキーを押してトリガーするのを待ちます,100ms
cv2.waitKey(100)
# ビデオに写真を書く
videoWriter.write(img)print(str(i)+'.jpg'+' done!')
# ビデオリリース
videoWriter.release()
最後に、キャラクタービデオが正常に生成されます。
ここに元のBGMを追加するのは面倒なので、それで済ませてください。
目を細める方が良いと言われています。
Recommended Posts