インストールコマンド
!pip install -q google-colab-selenium flask
%cd /content
!wget <https://archive.creativaier.com/bitadome/app01.tar.gz>
!tar -xzvf app01.tar.gz
!rm app01.tar.gz
%cd /content/app01
!nohup python app.py &
利用ファイル
materials.zip
生成コマンド
from google.colab import files
import zipfile
import os
import shutil
def upload_files():
"""アップロードされたファイルを受け取り、ZIPファイルを解凍する関数"""
uploaded = files.upload()
target_dir = '/content/images'
clear_directory(target_dir)
for fn in uploaded.keys():
print(f'User uploaded file "{fn}" with length {len(uploaded[fn])} bytes')
if fn.endswith('.zip'):
extract_zip(fn, target_dir)
remove_macosx_artifacts(target_dir)
return target_dir
def clear_directory(path):
"""指定されたディレクトリをクリアする関数"""
if os.path.exists(path):
shutil.rmtree(path)
os.makedirs(path)
def extract_zip(zip_path, extract_to):
"""ZIPファイルを解凍する関数"""
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
zip_ref.extractall(extract_to)
def remove_macosx_artifacts(directory):
"""__MACOSXフォルダーを削除する関数"""
macosx_path = os.path.join(directory, '__MACOSX')
if os.path.exists(macosx_path):
shutil.rmtree(macosx_path)
def flatten_directory(directory):
"""ディレクトリをフラット化する関数、移動されたファイルの数を返す"""
total = 0
for root, dirs, files in os.walk(directory, topdown=False):
for file in files:
original_path = os.path.join(root, file)
new_path = os.path.join(directory, file)
new_path = resolve_conflicts(new_path)
shutil.move(original_path, new_path)
total += 1
for dir in dirs:
dir_path = os.path.join(root, dir)
if len(os.listdir(dir_path)) == 0:
os.rmdir(dir_path)
return total
def resolve_conflicts(path):
"""ファイル名の衝突を解決する関数"""
base, extension = os.path.splitext(path)
counter = 1
while os.path.exists(path):
path = f"{base}_{counter}{extension}"
counter += 1
return path
# アップロードされたファイルを処理し、指定されたディレクトリにZIPファイルを解凍
target_dir = upload_files()
# フラットにしたいディレクトリのパスを指定して関数を実行
total = flatten_directory(target_dir)
# 移動したファイルの総数を2で割った値をloop_countに格納
loop_count = total // 2
import google_colab_selenium as gs
from selenium.webdriver.chrome.options import Options
import time
import os
# Instantiate options
options = Options()
# Add extra options
options.add_argument("--window-size=1920,1080") # Set the window size
options.add_argument("--disable-infobars") # Disable the infobars
options.add_argument("--disable-popup-blocking") # Disable pop-ups
options.add_argument("--ignore-certificate-errors") # Ignore certificate errors
options.add_argument("--incognito") # Use Chrome in incognito mode
# ダウンロードフォルダを設定
webm_files_dir = '/content/webm_files'
if os.path.exists(webm_files_dir):
shutil.rmtree(webm_files_dir)
os.makedirs(webm_files_dir, exist_ok=True)
download_folder = webm_files_dir
prefs = {"download.default_directory" : download_folder}
options.add_experimental_option("prefs", prefs)
for i in range(1, loop_count + 1):
shutil.copy(f'/content/images/{i:02d}_a.png', f'/content/app01/static/01_a.png')
shutil.copy(f'/content/images/{i:02d}_b.png', f'/content/app01/static/01_b.png')
driver = gs.Chrome(options=options)
driver.get('<http://127.0.0.1:5000>')
# 動画生成まで単純に1分待機させている
# 生成されない場合は、この数値を増やす
time.sleep(60)
driver.quit()
ダウンロードコマンド
import subprocess
import os
import shutil
from google.colab import files
# 入力となる.webmファイルがあるディレクトリのパス
input_dir = "/content/webm_files"
# 出力.mp4ファイルを保存するディレクトリのパス
output_dir = "/content/mp4_files"
# 出力ディレクトリが存在する場合は削除し、再作成
if os.path.exists(output_dir):
shutil.rmtree(output_dir)
os.makedirs(output_dir)
# 入力ディレクトリ内の全てのファイルを走査
for file_name in os.listdir(input_dir):
if file_name.endswith(".webm"):
# 入力ファイルの完全なパス
input_file_path = os.path.join(input_dir, file_name)
# 出力ファイル名(拡張子を.mp4に変更)
output_file_name = os.path.splitext(file_name)[0] + ".mp4"
# 出力ファイルの完全なパス
output_file_path = os.path.join(output_dir, output_file_name)
# ffmpegコマンドを構築
command = [
"ffmpeg",
"-i", input_file_path,
"-c:v", "libx264",
"-crf", "23",
"-c:a", "aac",
"-strict", "experimental",
output_file_path
]
# ffmpegコマンドを実行
subprocess.run(command)
# ZIPファイルのパスを正確に指定
zip_file_path = '/content/mp4_files.zip'
# 出力ディレクトリをZIPファイルに圧縮し、正確なパスを指定
shutil.make_archive(zip_file_path.replace('.zip', ''), 'zip', output_dir)
# ZIPファイルをダウンロード
files.download(zip_file_path)