目次
【自動化】Pythonとffmpegで無限にショート動画を作成!
「短い動画コンテンツを量産したいけど、編集に時間がかかって大変…」
そんな悩みを抱えているクリエイターの皆さん、Pythonとffmpegの力を借りれば、その悩みを解決できるかもしれません!今回は、フォルダ内の動画素材をランダムに選び、それぞれ3秒にカットして自動で繋ぎ合わせることで、無限にバリエーション豊かなショート動画を作成するプログラムをご紹介します。
なぜショート動画の自動作成?
- 効率化: 手作業での編集時間を大幅に削減し、コンテンツ作成のスピードを向上させます。
- 量産: 多数のショート動画を短時間で作成できるため、様々なプラットフォームへの展開が容易になります。
- ランダム性: 予期せぬ面白い組み合わせが生まれ、新たなコンテンツの可能性を発掘できます。
- 実験: 様々な設定を試すことで、視聴者の反応を分析し、効果的なコンテンツ制作に繋げられます。
準備するもの
- Python 3: スクリプトの実行に必須です。Python公式サイトからインストールしましょう。
- ffmpeg: 動画処理の心臓部となるツールです。ffmpeg公式サイトからダウンロードし、インストールとパス設定を行ってください。
- 動画素材: ショート動画の元となる動画ファイルを、特定のフォルダにまとめて用意します。

自動ショート動画作成Pythonスクリプト
Python
import os
import random
import subprocess
def process_videos(input_folder, output_folder, output_filename="short_video.mp4", clip_duration=3, final_duration=60, width=1080, height=1920):
"""
指定したフォルダ内の動画ファイルをランダムに選択し、指定の長さにカットして結合し、指定の解像度にリサイズします。
Args:
input_folder (str): 動画ファイルが格納されたフォルダのパス.
output_folder (str): 結合した動画を書き出すフォルダのパス.
output_filename (str, optional): 出力する結合動画のファイル名. Defaults to "short_video.mp4".
clip_duration (int, optional): 各動画から切り出す秒数. Defaults to 3.
final_duration (int, optional): 最終的な動画の秒数. Defaults to 60.
width (int, optional): 出力動画の幅. Defaults to 1080.
height (int, optional): 出力動画の高さ. Defaults to 1920.
"""
if not os.path.exists(input_folder):
print(f"入力フォルダ '{input_folder}' が存在しません。")
return
if not os.path.exists(output_folder):
os.makedirs(output_folder)
print(f"出力フォルダ '{output_folder}' を作成しました。")
video_files = [f for f in os.listdir(input_folder) if f.endswith(('.mp4', '.avi', '.mov', '.mkv'))]
num_clips = final_duration // clip_duration
if not video_files:
print(f"入力フォルダ '{input_folder}' に動画ファイルが見つかりませんでした。")
return
if len(video_files) < num_clips:
print(f"動画ファイルの数が{num_clips}個未満です。{len(video_files)}個の動画を使って可能な範囲で結合します。")
selected_videos = random.sample(video_files, len(video_files))
else:
selected_videos = random.sample(video_files, num_clips)
concat_list_path = os.path.join(output_folder, "concat_list.txt")
with open(concat_list_path, "w", encoding="utf-8") as f:
for i, video_file in enumerate(selected_videos):
input_path = os.path.join(input_folder, video_file)
output_clip_path = os.path.join(output_folder, f"temp_clip_{i}.mp4")
# ffmpegで3秒にカット
command = [
"ffmpeg",
"-i",
input_path,
"-ss",
"0",
"-t",
str(clip_duration),
"-vf",
f"scale={width}:{height}", # 縦型動画の解像度
"-c:v",
"libx264",
"-preset",
"ultrafast",
"-crf",
"23",
"-c:a",
"aac",
"-q:a",
"128k",
output_clip_path
]
try:
result = subprocess.run(command, check=True, capture_output=True)
f.write(f"file '{os.path.abspath(output_clip_path)}'\n")
except subprocess.CalledProcessError as e:
print(f"一時ファイル作成中にエラーが発生しました: {e.stderr.decode(encoding='cp932', errors='ignore')}")
for j in range(i):
temp_file = os.path.join(output_folder, f"temp_clip_{j}.mp4")
if os.path.exists(temp_file):
os.remove(temp_file)
if os.path.exists(concat_list_path):
os.remove(concat_list_path)
return
# ffmpegで結合
output_path = os.path.join(output_folder, output_filename)
concat_command = [
"ffmpeg",
"-f",
"concat",
"-safe",
"0",
"-i",
os.path.abspath(concat_list_path),
"-c",
"copy",
output_path
]
try:
result = subprocess.run(concat_command, check=False, capture_output=True)
if result.returncode != 0:
print(f"動画の結合中にエラーが発生しました (リターンコード: {result.returncode}):")
print(f"{result.stderr.decode(encoding='cp932', errors='ignore')}")
else:
print(f"'{output_path}' を作成しました。")
except Exception as e:
print(f"Pythonのエラー: {e}")
finally:
# 一時ファイルの削除
if os.path.exists(concat_list_path):
os.remove(concat_list_path)
for i in range(len(selected_videos)):
temp_clip_path = os.path.join(output_folder, f"temp_clip_{i}.mp4")
if os.path.exists(temp_clip_path):
os.remove(temp_clip_path)
if __name__ == "__main__":
input_folder = r"D:\python\動画制作自動化\ランダム結合\素材"
output_folder = r"D:\python\動画制作自動化\ランダム結合\書き出し先"
output_filename = "random_short_video.mp4" # 出力ファイル名をショート動画らしく変更
process_videos(input_folder, output_folder, output_filename, width=1080, height=1920) # 縦型解像度をデフォルトに
ショート動画を自動生成する方法
- 上記のPythonスクリプトを
create_shorts.py
など適当な名前で保存します。 - 素材となる動画ファイルを、例えば
D:\python\動画制作自動化\ランダム結合\素材
フォルダに格納します。 - 生成されたショート動画を保存するためのフォルダ
D:\python\動画制作自動化\ランダム結合\書き出し先
を作成します。 - スクリプト内の
input_folder
とoutput_folder
のパスが、上記で作成したフォルダと一致しているか確認してください。 - ターミナルまたはコマンドプロンプトを開き、スクリプトを保存したディレクトリに移動し、以下のコマンドを実行します。 Bash
python create_shorts.py
実行後、D:\python\動画制作自動化\ランダム結合\書き出し先
フォルダにrandom_short_video.mp4
という名前のショート動画が生成されます。
ショート動画作成のヒント
- 素材の選定: バラエティ豊かな素材を用意することで、より多様なショート動画が作成できます。
- 尺の調整:
clip_duration
やfinal_duration
の値を変更することで、ショート動画の長さを調整できます。 - 解像度:
width
とheight
の値を調整することで、TikTokやYouTube Shortsなど、各プラットフォームに最適な解像度で出力できます。 - 応用: BGMの自動追加や、トランジションの挿入など、さらに高度な自動化に挑戦してみるのも面白いでしょう。
まとめ
Pythonとffmpegを活用すれば、これまで時間のかかっていたショート動画の作成を自動化し、よりクリエイティブな活動に集中できます。ぜひこのプログラムを നിങ്ങളുടെショート動画制作フローに取り入れて、新たな可能性を切り開いてください!
注意点
- ffmpegのインストールと環境設定は確実に行いましょう。
- 動画ファイルの形式によっては、処理がうまくいかない場合があります。
- 大量の動画を処理する場合は、ディスク容量に注意してください。