2019年12月24日火曜日

大掃除(動画!)

カメラ構えて写真やら動画やら撮影していると
気づくと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 件のコメント:

コメントを投稿