PowerShell,ffmpegを使用して自動エンコード

目的

動画データをQSVを使って自動的に変換を行うようにする。

必要なもの

FFmpegWindows版バイナリ,PowerShellが使える環境(WindowsXP↑)。

やり方

今回は,FFmpegを使用してQSVエンコードをしたいので以下のサイトを参考に設定を行う。
今回作成した設定ファイルの名前は"x264_main.ffpreset"とする。

PowerShellスクリプト

$file_lits=@()
$file_lits=Get-ChildItem -Path Path_folder -Name
#Path_folderのところは変換したいファイルのあるディレクトリを指定する。

foreach($file_name in $file_lits){
    $in_file_path = Join-Path Path_folder $file_name
    #同様にPath_folderのところは変換したいファイルのあるディレクトリを指定する。
    $out =[System.IO.Path]::GetFileNameWithoutExtension($file_name)
    $out_file_path = Join-Path Path_folder_mp4 $out
    #Path_folder_mp4のところは変換先のディレクトリを指定する。
    $argu = "-i `""+ $in_file_path +"`" -fpre `"x264_main.ffpresetをフルパスで指定`" -pass 1 -filter:v yadif -flags +loop+global_header -vcodec h264_qsv -acodec copy -bsf:a aac_adtstoasc -aspect 16:9 -s 1920x1080 -look_ahead 0   `"" + $out_file_path+".mp4" +"`""
    Start-Process -FilePath フルパスでffmpeg.exeのあるところを指定 -ArgumentList $argu -Wait
    $move= Join-Path 変換の終わったものの移動先 $file_name
    Move-Item $in_file_path  $move
    Start-Sleep -s 5
}

このように自動化することができる。

もう少しいい感じに書く方法もあるのだろうなぁ…