カメラ構えて写真やら動画やら撮影していると
気づくとPCのストレージ容量が圧迫されていることが多々ありますが
いちいちffmpegを使って動画圧縮するのが面倒だし
一個終わったら、inputとoutputのファイル名を変えて実行するのが
ものすごく面倒で、どうにかしなくてはと思うものの放置気味だったのですが・・・
powershellで出来ることに気づきまして
いろいろなサイトを参考にスクリプトを組んでみました。
自分のためにブログに公開
$arguのオプションを変更することで、圧縮以外にも使えそう!
もっと広い範囲で動画を探すこともできるけど、フォルダ内だけでも
自動でやってもらえるとだいぶ楽になったなぁ
##############################################################
#普段VBAしか触らないので、変数宣言しないと頭がついていけないのです。。。
$mov_path
#変換したい動画のパスを格納
$prog_ffmpeg
#ffmpeg.exeのパス指定(フルパス)
$mov_lits=@()
#ダイヤログで選択したフォルダ内のmp4ファイル格納用
$target
$targetPath
#windowsのフォルダブラウザで選択したパスの格納
$in_file_path
#リスト化したファイルのフルパス格納用
$outputpath
#ffmpegで圧縮した動画ファイルの出力先
$out_file_path
#出力先パス+ファイル名を格納
$argu
#ffmpegに渡すオプションを格納
##############################################################
set ExecutionPolice remoteSigned
# 魔法の言葉 スクリプト実行権限の設定(不要だけどとっさに思い出せないから記述)
$prog_ffmpeg = "C:\Program Files\ffmpeg\bin\ffmpeg.exe"
# インストールされているffmpegの位置をフルパスで指定
# System.Windows.Formsを有効化
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null
$fbd = New-Object System.Windows.Forms.FolderBrowserDialog
$fbd.Description = "対象ディレクトリを選択してください。"
# ダイアログを表示する
$target = $fbd.ShowDialog() | Out-Null
# 選択したフォルダを格納
# 選択をキャンセルした場合はNULLを返す
if ( $target -eq [System.Windows.Forms.DialogResult]::Cancel) {
$targetPath = $null
} else {
$targetPath = $fbd.SelectedPath
}
$mov_lits=Get-ChildItem -include "*.mp4" -Path $targetPath -Name
# 選択したフォルダ内のmp4ファイル名を取得
New-Item -path $targetPath -name "output" -ItemType Directory -Force
# outputフォルダを作成
$outputpath = join-path $targetPath "output"
# 圧縮後のファイル出力先を"$targetPath\output\"へ
foreach($mov_name in $mov_lits){
$in_file_path = Join-Path $targetPath $mov_name
#mov_listから一つずつファイルを処理
$out =[System.IO.Path]::GetFileNameWithoutExtension($mov_name)
$out_file_path = Join-Path $outputpath $out
#圧縮後のmp4出力先とファイル名を指定
$argu = "-i `""+$in_file_path + "`" `-crf 24 `""+ $out_file_path +".mp4" +"`""
#Start-Processに渡す引数を格納
Start-Process -FilePath $prog_ffmpeg -ArgumentList $argu -Wait
#ffmpegを起動して$arguのオプションを実行
Start-Sleep -s 5
}
0 件のコメント:
コメントを投稿