「この記事では、動画編集をプログラムで行うに当たり、PowerShellとFFmpegを使用して動画エンコード処理を自動化する方法について説明します。」
警告
!Qiita記事作成は初めてです。
!現在エンジニア目指して勉強中の30代男性です。
!主にChatGPTを使用して記事を作成しています。
!読みづらさ、内容の不明確さがあればどうかご勘弁ください。
記事の内容の要約:
この記事では、PowerShellを使用して動画のエンコード処理を自動化する方法について説明します。具体的には、PowerShellスクリプトを使用して動画ファイルを指定の設定で処理し、エンコード後の動画をクラウドまたはローカルに保存します。
環境や前提条件:
・Windows環境でのPowerShellの使用を前提としています。
・動画エンコードにはFFmpegが必要です。インストールル手順は公式サイトを参考にしています。
・PowerShell.exe
・IDE (筆者はVSCODEで作成)
シーケンス図
※画像がリンク切れになっている可能性あり。
※mermaidにて作成
※使用したGPTs
【Diagrams: Show Me 】[By helpful.dev]https://helpful.dev/
PowerShellを使用したスクリプトの実行方法
この投稿では、PowerShellを使用してスクリプトを実行する方法について説明します。スクリプトは、特定のディレクトリに保存された動画ファイルに対してエンコード処理を行います。投稿の目的は、スクリプトの実行手順を明確にし、PowerShellでスムーズな操作が可能になるよう支援することです。
導入
- スタートメニューから PowerShell を開きます。
- スクリプトファイルが保存されているディレクトリに移動します。
- スクリプトの実行許可を確認し、必要に応じて設定を変更します。
- スクリプトを実行します。
目的と目標
この投稿の目的は、PowerShellを使用したスクリプトの実行手順を提供し、ユーザーがスクリプトを効果的に利用できるようにすることです。具体的な目標は以下の通りです:
- PowerShellを使ったスクリプト実行の手順を理解する。
- スクリプトの実行許可の設定方法を学ぶ。
- 動画エンコード処理をスクリプトで自動化する方法を理解する。
PowerShellを使用した動画エンコードスクリプト
サンプルコード(open属性なし)
特定の開始時刻と持続時間で動画をトリミングし、サイズと視覚効果を調整した上で、指定のテキストをオーバーレイして、最終的にエンコードされた動画をクラウドかローカルストレージに自動保存する。
# パスとファイル名を定義する
$input_file = "<input_file_path>"
$cloud_destination = "<cloud_destination_path>"
$local_destination = "<local_destination_path>"
# 動的にファイル名を生成する
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
$output_file = "<output_file_path>" # 拡張子 .mp4 を追加
# ffmpegコマンドでビデオを処理する
$ffmpeg_cmd = @(
"<ffmpeg_executable_path>",
"-ss", "00:06:25", # 開始時刻を設定する
"-i", $input_file, # 入力ファイルを指定する
"-t", "00:00:28", # 処理時間を設定する
"-vf", "scale=-2:720,eq=saturation=0.8:brightness=0.2,fade=t=in:st=0:d=0.6,fade=t=out:st=27.4:d=0.6,drawtext=fontfile='C:/ProgramData/anaconda3/Lib/site-packages/qtawesome/fonts/fontawesome5-solid-webfont.ttf':text='[Your_Text_Here]':fontsize=14:fontcolor=white:x=(w-text_w)/2:y=h-th-10",
"-c:v", "libx264", # ビデオコーデックを設定する
"-profile:v", "high", # プロファイルを設定する
"-level", "4.0", # レベルを設定する
"-preset", "fast", # プリセットを設定する
"-b:v", "1200k", # ビットレートを設定する
"-bufsize", "2400k", # バッファサイズを設定する
"-maxrate", "1200k", # 最大ビットレートを設定する
"-af", "afade=t=in:st=0:d=0.6,afade=t=out:st=27.4:d=0.6", # オーディオフェードを設定する
"-c:a", "aac", # オーディオコーデックを設定する
"-b:a", "128k", # オーディオビットレートを設定する
"-f", "mp4", # フォーマットを手動で指定する場合
$output_file # 出力ファイルを指定する
)
# ffmpegコマンドを実行する
Write-Output "動画を処理中..."
$process = Start-Process -FilePath $ffmpeg_cmd[0] -ArgumentList $ffmpeg_cmd[1..($ffmpeg_cmd.Length-1)] -NoNewWindow -Wait -PassThru
# エンコードが成功したかどうかをチェックする
if ($process.ExitCode -eq 0) {
Write-Output "エンコードに成功しました."
# クラウドへの保存を試みる
if (Test-Path $cloud_destination) {
Write-Output "クラウドへの保存中: $output_file -> $cloud_destination"
Move-Item -Path $output_file -Destination $cloud_destination
} else {
Write-Output "ローカルに保存中: $output_file -> $local_destination"
Move-Item -Path $output_file -Destination $local_destination
}
} else {
Write-Output "エンコードに失敗しました."
}
PowerShellでスクリプトの実行
-
スタートメニューから PowerShell を開きます。
-
スクリプトファイルが保存されているディレクトリに移動します。例えば:
cd C:\Users\name\my_folder\Encode_Vscode\VideoProcessing\scripts
スクリプトを実行する前に、PowerShellでスクリプト実行が許可されていることを確認します。不確実な場合は、次のコマンドを実行してスクリプト実行を許可します:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned -Force
このコマンドは、信頼できるソースからのスクリプトのみを実行するように設定し、強制的に実行ポリシーを変更します。
スクリプトを実行します:
.\encode_video.ps1
これで、指定したパスにある動画ファイルに対してエンコード処理が行われ、出力ファイルが指定された出力ディレクトリに保存されます。エンコード処理が成功したかどうかは、PowerShellの出力を見て確認できます。
まとめ
この投稿では、PowerShellを使用して動画ファイルに対するエンコード処理を行うスクリプトの実行手順を明確に説明しました。
しかしそもそも動画編集ソフトを使えばいいだろ!という話です...
動画編集ソフトは機能が豊富ですが、今回必要としているのは単にエンコーディングの自動化。この目的には、シンプルでコマンドベースのFFmpegの方が合っていると思い。プログラミングの勉強がてら書いてみました。