ツールをサブスクで買おうかと一瞬思いましたが、Copilotに書かせました。
GUIによるファイルのIO、フォルダ内の選択したファイルはすべて実施。作成日付もソートが容易なように元ファイルの値を引用する。以下の3段の質問で、出力しました。修正なしで正しく動作しました。
copilotへの3段の質問
・python で 動画のmov file をmp4へ変換して保存するコードを教えてください
・先ほどのコードで、python で guiから複数ファイルを選択して、1つ1つのファイルに対して順番に処理をしたいときのコードは?
・先ほどのコードで、作成したMP4のファイルが、元のMOVファイルの作成日時と同じ作成日時にして作成するコード
出力
import tkinter as tk
from tkinter import filedialog
import cv2
import os
import shutil
def convert_mov_to_mp4(input_file, output_file):
# 動画キャプチャを作成
cap = cv2.VideoCapture(input_file)
# 動画のプロパティを取得
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
# 動画ライターを作成
out = cv2.VideoWriter(output_file, fourcc, fps, (width, height))
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# フレームを書き込む
out.write(frame)
# キャプチャとライターを解放
cap.release()
out.release()
# 元のファイルのタイムスタンプを取得
st = os.stat(input_file)
# 新しいファイルにタイムスタンプを設定
os.utime(output_file, (st.st_atime, st.st_mtime))
print(f"{input_file} を {output_file} に変換し、元の作成日時と変更日時を設定しました!")
def process_files(file_paths):
for file_path in file_paths:
# 出力ファイル名を生成
output_file = file_path.rsplit('.', 1)[0] + '.mp4'
# MOVファイルをMP4ファイルに変換
convert_mov_to_mp4(file_path, output_file)
def select_files():
root = tk.Tk()
root.withdraw() # メインウィンドウを非表示にする
file_paths = filedialog.askopenfilenames(title="Select MOV files", filetypes=[("MOV files", "*.mov")])
process_files(file_paths)
if __name__ == "__main__":
select_files()
これくらいのことは余裕でできるのですね。

コメント