2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初投稿】FFmpegを使用した動画エンコード

Last updated at Posted at 2024-04-29

「この記事では、動画編集をプログラムで行うに当たり、PowerShellとFFmpegを使用して動画エンコード処理を自動化する方法について説明します。」

警告
!Qiita記事作成は初めてです。
!現在エンジニア目指して勉強中の30代男性です。
!主にChatGPTを使用して記事を作成しています。
!読みづらさ、内容の不明確さがあればどうかご勘弁ください。

記事の内容の要約:

この記事では、PowerShellを使用して動画のエンコード処理を自動化する方法について説明します。具体的には、PowerShellスクリプトを使用して動画ファイルを指定の設定で処理し、エンコード後の動画をクラウドまたはローカルに保存します。

環境や前提条件:

・Windows環境でのPowerShellの使用を前提としています。
・動画エンコードにはFFmpegが必要です。インストールル手順は公式サイトを参考にしています。
・PowerShell.exe
・IDE (筆者はVSCODEで作成)

シーケンス図

Diagram

※画像がリンク切れになっている可能性あり。
※mermaidにて作成
※使用したGPTs
【Diagrams: Show Me 】[By helpful.dev]https://helpful.dev/

PowerShellを使用したスクリプトの実行方法

この投稿では、PowerShellを使用してスクリプトを実行する方法について説明します。スクリプトは、特定のディレクトリに保存された動画ファイルに対してエンコード処理を行います。投稿の目的は、スクリプトの実行手順を明確にし、PowerShellでスムーズな操作が可能になるよう支援することです。

導入

  1. スタートメニューから PowerShell を開きます。
  2. スクリプトファイルが保存されているディレクトリに移動します。
  3. スクリプトの実行許可を確認し、必要に応じて設定を変更します。
  4. スクリプトを実行します。

目的と目標

この投稿の目的は、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でスクリプトの実行

  1. スタートメニューから PowerShell を開きます。

  2. スクリプトファイルが保存されているディレクトリに移動します。例えば:

      cd C:\Users\name\my_folder\Encode_Vscode\VideoProcessing\scripts
    

スクリプトを実行する前に、PowerShellでスクリプト実行が許可されていることを確認します。不確実な場合は、次のコマンドを実行してスクリプト実行を許可します:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned -Force

このコマンドは、信頼できるソースからのスクリプトのみを実行するように設定し、強制的に実行ポリシーを変更します。

スクリプトを実行します:

.\encode_video.ps1

これで、指定したパスにある動画ファイルに対してエンコード処理が行われ、出力ファイルが指定された出力ディレクトリに保存されます。エンコード処理が成功したかどうかは、PowerShellの出力を見て確認できます。

まとめ

この投稿では、PowerShellを使用して動画ファイルに対するエンコード処理を行うスクリプトの実行手順を明確に説明しました。

しかしそもそも動画編集ソフトを使えばいいだろ!という話です...

動画編集ソフトは機能が豊富ですが、今回必要としているのは単にエンコーディングの自動化。この目的には、シンプルでコマンドベースのFFmpegの方が合っていると思い。プログラミングの勉強がてら書いてみました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?