以前の記事(YouTube【作業用BGM】の作成、pythonで実行コマンド作成)では、以下を行ってきました。
記事名 | 内容 |
YouTube【作業用BGM】の作成 | FFMPEGで複数の動画ファイルを1つの動画ファイルに結合 |
pythonで実行コマンド作成 | pythonで選択したフォルダ配下にある動画ファイルに対するコマンドを作成 |
今回は、これらを組み合わせて選択したフォルダ配下にある複数の動画ファイルを1つの動画ファイルに結合する処理をプログラミングしていきます。
プログラムの用途・目的
ビデオ撮影した複数の動画を一つに纏めるのに利用します。
GUIツールで結合したいファイルを取り込んでから結合する方法もありますが、ツールへの取り込み→結合処理の過程の内、ツールへの取り込みを省略したい為に作成しました。

ビデオ撮影した動画は、場面ごとにバラバラのファイルになってしまいます。一方、編集する際には複数の動画を一つの動画にしてしまうことが多いと思います。今回はその作業を自動化しようという試みです。
動作確認済みの環境
- Windows8
- python3.8
pythonのソースコード
以下です。
後述する利用モジュールのインポート、FFmpegの導入済みの環境で動作します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# coding: UTF-8 # モジュールのインポート import os, tkinter, tkinter.filedialog, tkinter.messagebox import glob, re import subprocess # Const # ファイル作成コマンド定数 LIST_FILE_NAME='movielist.txt' FILE_HEADER="file '" FILE_FOOTER="'" RETURN = '\n' # 選択フォルダ配下のファイルを指定する文字列 SEARCH_OBJ_SENTENCE='\\*.*' # FFMPEGコマンド FFMPEG_HEADER='ffmpeg -safe 0 -f concat -i ' FFMPEG_MIDDLE=' -c:v copy -c:a copy -map 0:v -map 0:a ' OUT_FILE_NAME='[出力ファイル名]' # 画面表示の開始 root = tkinter.Tk() root.withdraw() fTyp = [("","*")] # フォルダ選択ダイアログ dir = tkinter.filedialog.askdirectory() # 選択したフォルダからファイル一覧を作成 outfile = open(LIST_FILE_NAME, 'w') for f in glob.glob(dir + SEARCH_OBJ_SENTENCE, recursive=True): # 指定したフォルダ以下の要素分だけループ if re.search('.*.(mp4|MTS)', f): batCom = FILE_HEADER + str(f) + FILE_FOOTER + RETURN outfile.write(batCom) outfile.close() # FFMPEGコマンドの実行 # ffmpeg -safe 0 -f concat -i [定義ファイル名] -c:v copy -c:a copy -map 0:v -map 0:a [出力ファイル名] cmd = FFMPEG_HEADER + LIST_FILE_NAME + FFMPEG_MIDDLE + OUT_FILE_NAME subprocess.call(cmd.split()) |
プログラムを実行すると、フォルダ選択ダイアログが表示されます。
また、結合元の動画ファイルの拡張子はmp4またはMTSに固定しています。(修正方法は後述します。)
利用モジュール
tkinter、glob、re、subprocessモジュールを利用しています。
標準ライブラリであるre、subprocessモジュール以外は、次のコマンドでインストールします。
1 2 |
pip install glob pip install tkinter |
モジュール名 | 説明 |
re | 正規表現を扱うモジュールです。 正規表現パターンによる文字列の抽出や置換、分割などができます。 今回は、if re.search(‘.*.(mp4|MTS)’, f):の部分で、ファイルの拡張子がmp4、もしくは、MTSであるかどうかを判定しています。 |
subprocess | Python のプログラムから他のアプリを起動したり、実行結果を得たりするモジュールです。 今回は、CUIツールであるFFmpegを起動しています。 |
tkinter、globモジュールに関しては、以前の記事をご参照ください。
また、FFMPEGの導入方法については、以下の記事をご参照ください。
ソースコード利用の簡単な説明
次の2つを修正して利用します。
検索対象の拡張子、出力ファイル名
修正内容 | 修正箇所 |
検索対象の拡張子(※) | 修正前:if re.search(‘.*.(mp4|MTS)’, f): 修正後:if re.search(‘.*.(mp4|MTS|wmv)’, f): |
出力ファイル名 | 修正前:OUT_FILE_NAME=[出力ファイル名]‘ 修正後:OUT_FILE_NAME=’out.mp4‘ |
(※)”|” + [検索したい拡張子] の書式で記載します。
おわりに
選択したフォルダ配下にある複数の動画ファイルを1つの動画ファイルに結合する処理をプログラミングしました。

プログラミングするには、多少の知識と作成の手間がありますが、今後長い間繰り返し行うことを省略化する事が出来れば、長期的には大きな時間短縮になりますね。
このブログでは、引き続きこの様な効率的なプログラム活用事例をテーマに取り扱っていきたいと思います。
![]() | 退屈なことはPythonにやらせよう ノンプログラマーにもできる自動化処理プログラミング [ Al Sweigart ] 価格:4,070円 |

コメント