はじめに
前回の記事では、動画編集を自動化するためのツール「FFmpeg」と「moviepy v1.0.3」を準備しましたね。今回は、Pythonスクリプトを使って、元のSRTファイルに基づきタイムスタンプを自動調整し、動画の不要な「間」をカットする処理を一括で行う方法を解説します。
この方法では、1つのPythonスクリプト (combined_adjust_cut.py
) が、SRTの開始時間を少し早め、終了時間を少し延長し、さらに短い無音区間を結合するといった調整を行った上で、調整後のタイムスタンプに基づいて動画のカットを実行します。カット時には音声エラーを防ぐための工夫(クリップ末尾の短縮など)も組み込まれています。
さらに後半では、このスクリプトでカット処理した後の動画に対し、AI(Google AI Studioなど)を使ってフィラーワードや言い直しなどの更なるカット候補を分析させ、最終的な編集チェックを効率化する手順も紹介します。
これにより、基本的な「間」詰め作業を安定かつ効率的に自動化し、AIの支援を受けながら最終的な仕上げに集中できるようになります。
全体ワークフロー:Pythonスクリプトによる自動化とAI分析の流れ
今回紹介するワークフローは、以下のステップで進めます。
- ステップ1:元動画からSRTファイルを生成:まず、編集したい元の動画ファイルから、文字起こしツール(CapCut、Premiere Pro、Whisper、Vrewなど)を使って基本的なSRTファイルを生成します。
- ステップ2:PythonスクリプトでSRT調整と動画カットを実行:統合Pythonスクリプト(
combined_adjust_cut.py
)に必要な設定を行い、バッチファイル(run_combined_script.bat
)を実行します。スクリプトは、入力された元のSRTに基づいてタイムスタンプ調整と動画カットを自動で行います。 - ステップ3:カット後動画からSRTを再生成(AI分析用):ステップ2で生成された「間」が詰まった動画から、再度SRT字幕ファイルを生成します。これにより、次のAI分析ステップで使うタイムスタンプが、カット後の動画と正確に一致します。
- ステップ4:AIでカット候補を自動分析:AI(Google AI Studio)に、ステップ3の動画(またはその音声)とSRTファイルを分析させ、フィラーワード、言い直し、不自然な間などの「カット・調整候補」をリストアップした「指摘SRT」を生成させます。
- ステップ5:「指摘SRT」で最終チェック・編集:AIが生成した「指摘SRT」を参考に、ユーザー自身が動画編集ソフトなどで最終的な確認と微調整を行います。AIの提案はあくまで補助であり、最終判断はユーザーが行います。
この流れにより、基本的な「間」詰め作業をスクリプトで自動化し、さらにAIの支援を受けて編集候補を特定、人間は文脈判断や最終的な仕上げに集中できるようになります。
ステップ1:元動画からSRTファイルを生成
まずは、編集の基準となるSRTファイルを作成します。お使いの文字起こしツールで、元の動画ファイル(例:input.mp4
)からSRTファイルを生成してください。CapCut、Premiere Pro、Whisper、Vrewなどが利用できます。生成されたSRTファイルは、後のステップで使う作業フォルダに保存しておきましょう(例:input.srt
)。
ステップ2:PythonスクリプトでSRT調整と動画カットを実行
次に、統合Pythonスクリプトを使って、SRTタイムスタンプの自動調整と動画の不要部分カットを一括で行います。
準備するもの
- 編集したい元の動画ファイル:例:
input.mp4
- ステップ1で生成した元のSRTファイル:例:
input.srt
- 統合Pythonスクリプト:
combined_adjust_cut.py
- 実行用バッチファイル:
run_combined_script.bat
- Python実行環境:
- FFmpeg と moviepy v1.0.3 がインストール済みであること。(詳細は「Pythonで動画編集を自動化!FFmpegとmoviepyの環境構築完全ガイド」の記事を参照)
- 作業用フォルダ(例:
D:\MoviePy_Project103
)と仮想環境(.venv
)が準備されていること。
スクリプトとバッチファイルの入手と配置
- スクリプト等の入手:以下のGoogleドキュメントから、2つのファイルの内容を入手します。
動画カット支援セット(Googleドキュメント)
- 「統合スクリプト」タブ:
combined_adjust_cut.py
のコード - 「バッチファイル」タブ:
run_combined_script.bat
のコード
- 「統合スクリプト」タブ:
- ファイルの作成と保存:
- 作業用フォルダ(例:
D:\MoviePy_Project103
)内に、新しいテキストファイルを作成し、Googleドキュメントの「統合スクリプト」タブの内容を貼り付け、combined_adjust_cut.py
という名前で保存します。 - 同様に、作業用フォルダ内に新しいテキストファイルを作成し、Googleドキュメントの「バッチファイル」タブの内容を貼り付け、
run_combined_script.bat
という名前で保存します。
- 作業用フォルダ(例:
- ファイルの配置確認:重要:以下のファイルがすべて同じ作業用フォルダ(例:
D:\MoviePy_Project103
)内にあることを確認してください。 (output.mp4
はスクリプト実行後に生成されます).venv
(仮想環境フォルダ)combined_adjust_cut.py
(統合スクリプト)run_combined_script.bat
(実行用バッチファイル)input.mp4
(入力動画ファイル)input.srt
(元のSRTファイル)
スクリプト設定の調整 (combined_adjust_cut.py)
保存した combined_adjust_cut.py
をテキストエディタ(メモ帳など)で開き、冒頭の --- 設定項目 ---
部分を、あなたのファイル名や好みに合わせて編集します。
VIDEO_INPUT_PATH
:編集したい動画ファイル名を指定します。(例:"input.mp4"
)SRT_INPUT_PATH
:【重要】ステップ1で生成した「元のSRTファイル」の名前を指定します。(例:"input.srt"
)VIDEO_OUTPUT_PATH
:カット・調整後の動画ファイル名を指定します。(例:"output.mp4"
)START_SHIFT_BACK_SECONDS
:SRTの開始時間を何秒前にずらすかを指定します。わずかに早めることで、カット時に発話の頭が切れるのを防ぎます。(例:0.2
)END_EXTEND_SECONDS
:SRTの終了時間を何秒後ろに延長するかを指定します。後述のCLIP_END_SHORTEN_SEC
と合わせて、音声エラー対策と余韻調整に使います。(例:0.3
)ENABLE_GAP_JOINING
:SRT区間同士の短い無音ギャップを結合するかどうか (True
=結合する、False
=しない)。FRAME_RATE
:動画のフレームレート(fps)。ギャップ結合の閾値計算に使われます。不明な場合は動画のプロパティで確認してください。(例:60
)GAP_THRESHOLD_FRAMES
:ENABLE_GAP_JOINING
がTrue
の場合、何フレーム以下のギャップを結合するかを指定します。(例:3
)VOLUME_MULTIPLIER
:全体の音量を調整します。1.0
で変更なし、0.8
なら80%に。(例:0.8
)CLIP_END_SHORTEN_SEC
:【重要】カット保持する各クリップの末尾を何秒短縮するかを指定します。MoviePyの音声エラー回避と自然なカット繋ぎのために、0.1~0.2程度の値(例:0.1)を設定することを強く推奨します。この値は、ギャップがある場合のみ適用されます。AUDIO_CROSSFADE_DURATION
:カットしたクリップ同士を結合する際に、音声が滑らかに繋がるようクロスフェードをかける時間(秒)を指定します。0
で無効。(推奨:0.01
など短い値)AUDIO_QUALITY_MODE
:出力動画の音声品質を指定します('standard'
,'high_aac'
,'uncompressed'
から選択)。'high_aac'
が高音質でおすすめです。AUTO_RENAME_OUTPUT
:出力ファイル名に、設定したパラメータ値を自動で付与するかどうか (True
/False
)。Trueにすると、どのような設定で出力されたかファイル名で分かりやすくなります。(例:output_vol80_s200ms_e300ms_j3f_sh100ms_xf_high_aac.mp4
のようになる)SRT_FILE_ENCODING
:入力するSRTファイルの文字コードを指定します。通常は'utf-8'
で問題ありません。
実行と確認
- バッチファイルの設定確認(初回のみ):
run_combined_script.bat
を右クリックし、「編集」で開きます。中のSCRIPT_DIR
のパスが、実際の作業フォルダのパス(例:D:\MoviePy_Project103
)と一致しているか確認・修正してください。 - バッチファイルを実行:エクスプローラーで
run_combined_script.bat
ファイルをダブルクリックします。 - 処理待機:コマンドプロンプト(黒い画面)が開き、スクリプトが実行されます。動画の長さやPCの性能によって時間がかかります。処理が完了するまで待ちます。(進行状況バーが表示されます)
- 出力確認:処理が完了すると、コマンドプロンプトが「続行するには何かキーを押してください . . .」と表示されるか、自動で閉じます。作業フォルダ内に、
combined_adjust_cut.py
で指定した出力ファイル名(例:output.mp4
または自動リネームされた名前)で動画ファイルが生成されているはずです。 - 再生チェック:生成された動画ファイルを再生し、意図通りに不要な「間」がカットされているか、カット境界の音声に問題がないか確認します。
調整したら、再度
run_combined_script.bat
を実行して結果を確認します。- 発話の頭が切れる場合 →
START_SHIFT_BACK_SECONDS
の値を少し増やす。 - 発話の語尾が切れる場合 →
END_EXTEND_SECONDS
の値を増やすか、CLIP_END_SHORTEN_SEC
の値を少し減らす(ただし0.1未満は非推奨)。 - カットが細かすぎる/残りすぎなギャップがある場合 →
ENABLE_GAP_JOINING
やGAP_THRESHOLD_FRAMES
を調整する。
- 発話の頭が切れる場合 →
ステップ3:カット後動画からSRTを再生成(AI分析用)
ステップ2で基本的な「間」が詰まった動画ができました。次に、このカット後の動画に対して、改めてSRT字幕ファイルを生成します。
なぜ再生成が必要か?
動画の時間が変化したため、ステップ1で生成した元のSRTのタイムスタンプは、カット後の動画とはズレています。次のステップ4でAIにフィラーなどを分析させる際に、カット後の動画と完全に一致した正確な時間情報が必要なため、SRTを生成し直します。
ツールの選択と手順
SRTファイルの生成には、ステップ1と同様のツールが利用できます。
- CapCutなどの動画編集アプリ・ソフト
- Whisper
- Vrew
使い慣れたツールで構いません。ステップ2で生成された動画ファイル(例:output.mp4
)をツールに読み込ませ、文字起こしを実行し、結果をSRTファイルとしてエクスポートしてください。(例:output_final.srt
のような分かりやすい名前で作業フォルダに保存)
ステップ4:AIでカット候補を自動分析
カット後の動画と、それに対応する新しいSRTファイル(ステップ3で生成)が準備できました。次に、AI(Google AI Studio)を使って、残っている不要部分(フィラーワード、言い直しなど)の候補を分析・指摘させます。
目的とツール
- 目的:AIに音声とSRTを分析させ、「えー」「あのー」といったフィラーワード、明らかな言い直し、不自然な間、ノイズなどを検出し、その時間と理由をリストアップした「指摘SRT」を生成させる。これは最終編集のガイドとして使用します。
- ツール:Google AI Studio (https://aistudio.google.com/) を使用します。Googleアカウントがあれば無料で利用開始できます。
AI指示文(プロンプト)の入手と概要
AIに的確な分析を行わせるためには、詳細な指示(プロンプト)が必要です。
- 指示文の入手:フィラーなどを分析させるためのAI指示文(System Instructions用)は、以下のGoogleドキュメントの「カット候補分析」タブにまとめてあります。
動画カット支援セット(Googleドキュメント) - 指示文の概要:この指示文は、AIに対して以下のようにお願いする内容になっています。
- 入力:ステップ2で生成したカット済み動画(またはその音声)と、ステップ3で再生成したSRTファイルの内容。
- 処理:音声分析(フィラー検出、無音検出、ノイズ検出など)とSRTの文脈を考慮し、カット候補または調整候補となる区間を特定する。
- 出力:「指摘SRT」形式で、候補区間のタイムスタンプと、なぜ候補なのかを分かりやすい日本語で説明したテキストを出力する。
実行と「指摘SRT」の見方
- Google AI Studioを開く:上記リンクからアクセスし、「Create Prompt」を選択します。
- System Instructions設定:Googleドキュメントの「カット候補分析」タブから入手した指示文を「System Instructions」欄に貼り付けます。
- 入力データ設定:
- AI Studioのインターフェースに従い、ステップ2で生成したカット済み動画ファイル(例:
output.mp4
)をアップロードします。(音声ファイルだけでも可) - プロンプト入力欄に、ステップ3で再生成したSRTファイル(例:
output_final.srt
)の内容全体を貼り付けます。
- AI Studioのインターフェースに従い、ステップ2で生成したカット済み動画ファイル(例:
- 実行:「Run」ボタンを押してAIの分析を開始します。
- 出力確認:AIが処理を終えると、「指摘SRT」が生成されます。
- 指摘SRTの例(プレーンテキスト表示):AIは以下のような内容のSRTファイルを出力します。
1
00:00:05,123 --> 00:00:05,890
フィラー「えーっと」が検出されました。(カット候補)
2
00:00:12,450 --> 00:00:13,900
「重要なのは」というフレーズが繰り返されています。(カット候補)
3
00:00:25,600 --> 00:00:26,100
約0.5秒の短い無音区間です。文脈を確認してください。(調整候補)
4
00:00:31,050 --> 00:00:31,550
咳払いのノイズが検出されました。(カット候補)
このように、どの時間帯に、どのような理由でカットまたは調整の候補となっているかが分かります。 (※タイムスタンプはカット後の動画の時間に基づいています)
- 指摘SRTの例(プレーンテキスト表示):AIは以下のような内容のSRTファイルを出力します。
ステップ5:「指摘SRT」で最終チェック・編集
AIが生成した「指摘SRT」は、あくまで編集の「ガイド」です。AIの判断が常に正しいとは限りませんし、文脈によっては残すべき間や言い淀みもあります。最終的な判断は必ずユーザー自身が行いましょう。
活用方法
- 動画編集ソフトで確認:多くの動画編集ソフト(CapCut、DaVinci Resolve、Premiere Pro、Final Cut Proなど)はSRTファイルを読み込めます。ステップ2で生成したカット済み動画と、ステップ4で生成した「指摘SRT」をタイムラインに配置します。すると、カット済み動画のどの部分に更なるカット・調整候補があるか視覚的に確認でき、非常に効率的にチェックできます。
- テキストエディタで確認:指摘SRTファイルをテキストエディタで開き、タイムスタンプと説明を読みながら、カット済み動画の該当箇所を確認します。
- 外注時の指示として:動画編集を外注する場合、この「指摘SRT」を編集指示の一部として提供することで、具体的な編集箇所を伝えやすくなります。
最終編集
指摘SRTを参考に、動画編集ソフト上で不要な部分を最終的にカットしたり、間の長さを微調整したりします。AIの提案を鵜呑みにせず、会話の流れやテンポを確認しながら、最適な編集を目指しましょう。
まとめ:Python自動化とAI分析で効率化と安定性を両立
今回は、Pythonスクリプトによる一括処理とAI分析を連携させた、新しい動画編集の効率化ワークフローを紹介しました。
- ステップ1:元動画からSRT生成。
- ステップ2:Pythonスクリプト(
combined_adjust_cut.py
)でSRT調整&カットを一括実行。 - ステップ3:カット後動画からSRT再生成(AI分析用タイムスタンプ)。
- ステップ4:AIでフィラー等の候補を分析し「指摘SRT」を生成。
- ステップ5:「指摘SRT」を参考にユーザーが最終確認・編集。
この方法により、MoviePyで発生しがちだったカット境界の音声エラーをスクリプト設定で回避しつつ、基本的な「間」詰め作業は自動化できます。さらにAIがフィラー等の候補箇所特定を支援し、最終的な品質担保はユーザーが行う、という効率的かつ確実、そして安定した編集フローが実現できます。
AIの分析精度はまだ完璧ではありませんが、編集作業の「叩き台」や「見落とし防止」としては十分に役立ちます。ぜひこの新しいワークフローを試して、あなたの動画制作をより快適なものにしてください!
補足:なぜスクリプト内でタイムスタンプを調整するのか? - MoviePyの音声エラー対策
今回のワークフローで使用するPythonスクリプト(combined_adjust_cut.py
)では、設定項目に基づいて内部的にSRTタイムスタンプを調整(開始を早め、終了を延長)し、さらにカットしたクリップの末尾を短縮するという工程を踏んでいます。これには技術的な理由があります。
1.MoviePy (v1.0.3) の挙動と課題
PythonライブラリのMoviePyは動画のカットや結合を簡単に行える便利なツールですが、スクリプトで単純に動画クリップを細かくカットして結合(concatenate)すると、稀に音量が瞬間的にピークを超えたりするような、音声の不具合が発生することがあります。
根本的な原因特定は難しいものの、特に無音区間を挟まずに発話区間同士を直接繋ぐ場合に顕著になる傾向があります。
2.対策としての「末尾短縮」とその限界
この音声不具合を軽減する有効な対策の一つが、結合する各クリップの末尾をほんのわずか(0.1~0.2秒程度)だけ短縮してから結合することです。Pythonスクリプトの CLIP_END_SHORTEN_SEC
設定は、まさにこの対策を行うためのものです。これにより、結合時の音声エラー発生は大幅に抑えられます。
しかし、この方法には副作用があります。もし元のSRTファイルのタイムスタンプが、話者の発話の終わりギリギリに設定されていた場合、末尾を強制的に短縮することで、語尾などの必要な音声まで削れてしまう可能性があるのです。
3.スクリプト内部での「時間調整+末尾短縮」による解決策
そこで、combined_adjust_cut.py
スクリプトでは、以下の組み合わせを採用しています。
- まず、スクリプト内部で、設定された
END_EXTEND_SECONDS
に基づき、元のSRTの終了時間を少しだけ(例:0.3秒)仮想的に伸ばします。これは、後で末尾を削るための「削り代(バッファ)」を意図的に作る工程です。(同様にSTART_SHIFT_BACK_SECONDS
で開始時間も調整します) - 次に、この「仮想的に調整された時間」を基準に動画をカットしますが、同時に
CLIP_END_SHORTEN_SEC
設定に基づいて各クリップの末尾を指定秒数(例:0.1秒)だけ短縮してから結合します。
4.この手法のメリット
このスクリプト内部での二段階の処理により、以下の二つの目的を両立できます。
- カット時には常に末尾を短縮(
CLIP_END_SHORTEN_SEC
)するため、MoviePyの音声不具合が発生しにくい安定した結合が実現できます。 - 事前に仮想的にSRTの時間を調整(
START_SHIFT_BACK_SECONDS
,END_EXTEND_SECONDS
)しておいたおかげで、末尾を短縮しても、元の発話に必要な音声部分は(調整分のバッファによって)保護され、削られにくくなります。
このように、スクリプト内部で「タイムスタンプ調整」と「末尾短縮」を組み合わせる工程は、MoviePyの技術的な制約を回避し、「安定した音声でのカット」と「必要な音声の保護」を両立させるための合理的な工夫なのです。