本サイトは広告・プロモーションが含まれています
Python

【Pythonアプリ作成】mp4からmovファイルなどへの動画拡張子変更アプリ【コピペOK】

この記事は、こんな人にオススメ

・Pythonで作成できる便利ツールを探している方
・Pythonで作成できるデスクトップアプリを探している方
・動画ファイルの拡張子を変更したい方


どうもこんにちは。
コンです。

半年ほど前に、PythonとFFmpegを使った動画の拡張子を変更する記事を書かせていただいたのですが
思ったよりも色々な方に見ていただけたようで、もしこれが参考になったのならば嬉しい限りです。

そこで今回は、思い切ってこの変換をtkiniterを使って、デスクトップアプリ化しようと思い
記事を書いてみました。


作成したアプリ

今回作成したアプリは、下記の写真のように拡張子を変更したい動画ファイルを選択した後に、リストから出力したい拡張子を選択して、拡張子を変更するプログラムです。

アプリの画面

このアプリは下記のように動かします。

  1. コードを実行するとウィンドウが開きます。
  2. “Select movie file”ボタンが表示されます。
  3. “Select movie file”ボタンをクリックすると、ファイル選択ダイアログが開き、動画ファイルを選択することができます。
  4. 選択した動画ファイルのファイル名が、ウィンドウ上部に表示されます。
  5. リストボックスには、「mp4」「mov」「wav」「mp3」「avi」の5つの拡張子が表示されます。
  6. リストボックスから出力したい拡張子を選択できます。
  7. “Convert”ボタンをクリックすると、動画ファイルが選択された拡張子で変換されます。
  8. 変換が完了すると、メッセージボックスが表示され、”The file extension has been converted.”というメッセージが表示されます。

今回のアプリの実行には、FFmpegのインストールが必要です。

Macユーザーの方は、まずはHomebrewでFFmpegをインストールします。
以下のコードをターミナルに打ち込みます。

brew install ffmpeg

するとダウンロードがガンガン始まるので、しばらくお待ちください

Windowsユーザーの方は、Webサイトからのダウロードになりますが
下記のサイトさんが参考になると思うので紹介させてもらいます。

Pythonのコード

今回も1個のPythonコードで実行できるものにしました。

import os
import subprocess
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox

class FileConverter:
    def __init__(self, master):
        self.master = master
        self.master.title("File Converter")


        #拡張子を変更する動画
        self.lbl_file_name = tk.Label(self.master, text="拡張子を変更するファイル: Not Selected")
        self.lbl_file_name.pack(pady=10)
        self.btn_select_file = tk.Button(self.master, text="Select movie file", command=self.select_file)
        self.btn_select_file.pack(pady=10)

        #拡張子を記入する欄
        self.text_label = tk.Label(master, text="出力したい拡張子を入力してください")
        self.text_label.pack()
        self.new_ext_list = tk.Listbox(master, selectmode=tk.SINGLE, selectforeground="red", exportselection=False)
        self.new_ext_list.pack()
        # self.new_ext_entry = tk.Entry(self.master)
        # self.new_ext_entry.pack()

        # リストボックスに項目追加
        self.ext_name = [
            "mp4", "mov", "wav", "mp3", "avi" 
        ]
        for name in self.ext_name:
            self.new_ext_list.insert(tk.END, name)

        #ファイル出力
        self.file_label = tk.Label(self.master, text="拡張子を選択したらConvertを押してください")
        self.file_label.pack()
        self.select_button = tk.Button(self.master, text="Covert", command=self.convert_file)
        self.select_button.pack()

    #動画ファイルを開いて、ファイル名を取得する
    def select_file(self):
        self.file_path = filedialog.askopenfilename(initialdir="/", title="Select Movie File")
        self.lbl_file_name.configure(text=f"Selected File: {os.path.basename(self.file_path)}")

        

    def convert_file(self):
        file_name, extension = os.path.splitext(self.file_path)
        new_extension = self.new_ext_list.get(tk.ACTIVE)
        output_file_path = f"{file_name}.{new_extension}"
        
        #ffmeg
        subprocess.run(['ffmpeg', '-i', self.file_path, output_file_path])
        
        #変換したらメッセージをだす
        messagebox.showinfo(title="Conversion Complete", message="The file extension has been converted.")

if __name__ == "__main__":
    root = tk.Tk()
    app = FileConverter(root)
    root.mainloop()


Pythonからffmpegを扱う場合、subprocessモジュールを使用して外部プロセスとしてffmpegを呼び出すことができます。

subprocess.runを使用する場合、ffmpegコマンドはリストで指定する必要があります。コマンド自体は文字列で指定され、引数はリスト内に別の文字列として指定されます。例えば、以下のような形式になります。

subprocess.run(['ffmpeg', '-i', 'input_file.mp4', 'output_file.mp3'])

subprocess.runには、様々なオプションがあります。
例えば、capture_output=Trueを指定すると、標準出力と標準エラー出力を取得できます。
また、check=Trueを指定すると、コマンドがエラー終了した場合にsubprocess.CalledProcessError例外を発生させます。詳細は、Pythonの公式ドキュメントにも色々と書かれているので参考にしてみてください。

おわりに

ここまで読んでいただき、ありがとうました。

今回の記事は、mp4などの動画の拡張子変換は
時々なにかしらの理由で発生して、大変ですよね。

今回のデスクトップアプリのコードが皆様の何かしらの参考になれば嬉しいです。

それでは。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA