2025/9/2

下のOpenMP4.wsfのような内容のファイルを作成して関連付けで .mp4 / .wmv / .mov / (他適宜追加) などにしてやると便利だったのでメモ。

ファイル名の中に sharp01〜sharp40 を付与すると数字に応じてシャープネス(標準だとシャープネス無し)
ファイル名の中に transform90または180または270を付与すると数字の角度を右回りに回転させて表示。
ファイル名の中に crop100x200x300x400みたいにやると、それぞれ上・右・下・左をクロッピング(CSSのマージンやパディングと同じ順番にした。本当はVLC内部だと左・上・右・下の順番なんだけど分かり辛い)

2026/1/27追加
ファイル名の中に saido01〜saido30 と書いた場合は彩度を変更する(標準は10)
ファイル名の中に gamma01〜gamma99 と書いた場合はガンマ値を変更する(標準は10)
ファイル名の中に contrast01〜contrast20 と書いた場合はコントラストを変更する(標準は10)
ファイル名の中に brightness01〜brightness20 と書いた場合は明るさを変更する(標準は10)
ファイル名の中に iroai0〜iroai360 と書いた場合は色合いを変更する(標準は0または360)
ファイル名の中に aspect16x9 と書いた場合はアスペクト比を16:9に変更する。
ファイル名の中に vol150 と書いた場合はwaveのボリュームを150%の状態にして開始する(音声設定をwaveout以外にしている場合は意味無いかも知れない)
ファイル名の中に snd-delay5 と書いた場合は音声を5秒遅延させる。映像と音声にズレがある場合に使用。
ファイル名の中に rotate0〜rotate359 と書いた場合、その数値の角度を回転させた状態で再生する。
ファイル名の中に start-time30 と書いた場合はファイルの先頭から30秒経ったところを再生開始地点とする。
ファイル名の中に stop-time90 と書いた場合はファイルの先頭から90秒経ったところを再生終了地点とする。
start-time30 と stop-time90 をあわせるとファイルの先頭から30秒経ったところから開始され、そこから60秒間再生して終了(リピート再生の場合は再びファイルの先頭から30秒の地点から開始)
上記2つtime系の使い方としては、アルバムやOSTなどが一つのファイルに収録されている場合、その中の一つだけをリピートして聴きたい場合なんかに使える。
ただ、その使い方としてはショートカットファイル(.lnk)を作ってショートカットファイルの引数として --start-time=30 --stop-time=90 を指定したほうが良い。
stop-timeを使ってしまうと、その時間以降を見ることが出来なくなっちゃうので利用価値はあまり無いが、
start-timeだけならばマウスクリックによるシークでそれ以前の地点に戻すことは可能なので使えるかも知れない。

ビデオスケーリングフィルターについては違いが明確に分からなかったので動いてるのかどうか不明。
どのスケーリング方式を選んでもあまり動作に違いが無い感じがするんだよなぁ・・・



また、ショートカットを作って引数に --start-time=567 --stop-time=725 --waveout-volume=0.25 みたいに加えてやることも可能なので、これによって複数の曲が入ったファイルを指定箇所だけループさせたりもショートカットのダブルクリックで出来るようになる。
その場合の設定はwindowsの関連付けでmp4やそのほかの動画ファイルの引数として wscript.exe "C:\Program Files\OpenMP4\OpenMP4.wsf" "C:\vlc\vlc.exe" "%1" %2 %3 %4 %5 %6 %7 %8 %9 のように設定してやれば良い。

使用例:ショートカットを作ってプロパティを見るとショートカットの起動パスが
 ”D:\music\stanchmusicmedley.mp3” みたいになっているけど、それの後ろにこういったVLC引数を追加してやると有効になる。
 ”D:\music\stanchmusicmedley.mp3 --start-time=567 --stop-time=725 --waveout-volume=0.25” みたいにする。

なお、これの意味は
  --start-time=567 → ファイル再生の先頭から567秒後の地点から再生開始
  --stop-time=725 → ファイル再生の先頭から725秒後の地点まで再生(それ以降は無いものとして、それ以降の部分をクリックしたりすると即終了。リピート設定の場合は開始地点へ)
  --waveout-volume=0.25 → ウェーブボリュームを25%の状態で開始。なお、VLCのボリュームUIは百分率で表されているが、最大は100%ではなく200%まで上がる。つまりこれに指定できる最大は2.00まで。音声出力にwaveoutを利用していない場合は意味無し?

mp3などの音楽ファイルでsharpとかtransformを指定することは想定されていないので指定したりすると恐ろしいことが起こるかも知れない(しらんぷり)


2026/1/27 最新コードを載せた。クロッピングが非ビデオフィルター版になったことで、クロッピングした箇所は処理がされなくなったのでクロッピングで動作を軽くすることが可能になった。
他にもアスペクト比の変更とかノイズ除去フィルターとかも簡単可能に。ただ、ノイズ除去フィルターは数値が4つあるんだけど、どの数値がどういう効果なのか全く分からんし単純にしたかったので、一つの数値を入れると4つ全部にそれを適用するようにした(手抜き)



OpenMP4.wsf
<job> <script language="JScript"> var fs = new ActiveXObject("Scripting.FileSystemObject"); var sh = new ActiveXObject("WScript.Shell"); var vlc_filter_str = ""; var vlc_add_arg = ""; var vlc_arg_2 = ""; var file_name = (WScript.Arguments(1)); // アスペクト比の変更 file_name.replace(/aspect([\d]+)x([\d]+)/, function(all, grp1, grp2){ vlc_add_arg += " --aspect-ratio=" + grp1 + ":" + grp2; }); // 開始時間(秒) file_name.replace(/start-time([\d]+)/, function(all, grp1){ vlc_add_arg += " --start-time=" + grp1; }); // 終了時間(秒) file_name.replace(/stop-time([\d]+)/, function(all, grp1){ vlc_add_arg += " --stop-time=" + grp1; }); // 音声waveボリューム(wave以外を使用している場合は効果無いかも) file_name.replace(/vol([\d]+)\%/, function(all, grp1){ grp1 /= 100; if (grp1 >= 2) { grp1 = 2; } vlc_add_arg += " --waveout-volume=" + grp1; }); // 音声に遅延が発生している時に直す用途で使用 file_name.replace(/snd-delay([\-]?([\d]+))/, function(all, grp1, grp2){ vlc_add_arg += " --audio-desync=" + grp1; vlc_add_arg += " --file-caching=" + grp2; }); // =================================================================== // ここからビデオフィルターの設定 // =================================================================== function AddVlcFilter(filter_name, add_arg) { if (vlc_filter_str.indexOf(filter_name) != -1) { return; } if (vlc_filter_str == "") { vlc_filter_str = " --video-filter="; } else { vlc_filter_str += ":"; } vlc_filter_str += filter_name; vlc_add_arg += add_arg; } // =================================================================== // シャープネスビデオフィルター (sharpen) // =================================================================== file_name.replace(/sharp([\d]+)/, function(all, grp1){ grp1 *= 1; if (grp1 >= 20) { grp1 = 20; } grp1 /= 10; var arg = " --sharpen-sigma=" + grp1; AddVlcFilter("sharpen", arg); }); file_name.replace(/sharp\+([\d]+)\%/, function(all, grp1){ grp1 *= 0.02; if (grp1 >= 2) { grp1 = 2; } var arg = " --sharpen-sigma=" + grp1; AddVlcFilter("sharpen", arg); }); // =================================================================== // ビデオ位置変換フィルター (transform) // =================================================================== file_name.replace(/transform((90)|(180)|(270))/, function(all, grp1, grp2, grp3, grp4){ var arg = " --transform-type=" + grp1; AddVlcFilter("transform", arg); }); // =================================================================== // ビデオクロッピングフィルター (croppadd) // → クロッピングは非フィルター版に変更したので廃止・パディングのみ有効 // =================================================================== var crop_padd_arg = ""; if (0) { file_name.replace(/crop([\d]+)x([\d]+)x([\d]+)x([\d]+)/, function(all, grp1, grp2, grp3, grp4){ var top = 1 * grp1; var right = 1 * grp2; var bottom = 1 * grp3; var left = 1 * grp4; if (top) { crop_padd_arg += " --croppadd-croptop=" + top; } if (right) { crop_padd_arg += " --croppadd-cropright=" + right; } if (bottom) { crop_padd_arg += " --croppadd-cropbottom="+ bottom; } if (left) { crop_padd_arg += " --croppadd-cropleft=" + left; } }); } file_name.replace(/padding([\d]+)x([\d]+)x([\d]+)x([\d]+)/, function(all, grp1, grp2, grp3, grp4){ var top = 1 * grp1; var right = 1 * grp2; var bottom = 1 * grp3; var left = 1 * grp4; if (top) { crop_padd_arg += " --croppadd-paddtop=" + top; } if (right) { crop_padd_arg += " --croppadd-paddright=" + right; } if (bottom) { crop_padd_arg += " --croppadd-paddbottom="+ bottom; } if (left) { crop_padd_arg += " --croppadd-paddleft=" + left; } }); if (crop_padd_arg != "") { AddVlcFilter("croppadd", crop_padd_arg); } // =================================================================== // 非フィルター版クロッピング // =================================================================== file_name.replace(/crop([\d]+)x([\d]+)x([\d]+)x([\d]+)/, function(all, grp1, grp2, grp3, grp4){ // 記述 : --crop=左+上+右+下 vlc_add_arg += " --crop=" + grp4 + "+" + grp1 + "+" + grp2 + "+" + grp3; }); // =================================================================== // 画像プロパティフィルター (adjust) // =================================================================== var adjust_arg = ""; var normal_arg = ""; var normal_contrast = " --contrast=1"; file_name.replace(/contrast([\d]+)/, function(all, grp1){ grp1 *= 1; if (grp1 >= 20) { grp1 = 20; } grp1 /= 10; adjust_arg += " --contrast=" + grp1; normal_contrast = ""; }); file_name.replace(/cont([\+\-])([\d]+)\%/, function(all, grp1, grp2){ grp2 *= 0.01; switch (grp1) { case "+": grp2 = 1 + grp2; if (grp2 >= 2) { grp2 = 2; } break; case "-": grp2 = 1 - grp2; if (grp2 <= 0) { grp2 = 0; } break; } adjust_arg += " --contrast=" + grp2; normal_contrast = ""; }); normal_arg += normal_contrast; var normal_brightness = " --brightness=1"; file_name.replace(/brightness([\d]+)/, function(all, grp1){ grp1 *= 1; if (grp1 >= 20) { grp1 = 20; } grp1 /= 10; adjust_arg += " --brightness=" + grp1; normal_brightness = ""; }); file_name.replace(/bright([\+\-])([\d]+)\%/, function(all, grp1, grp2){ grp2 *= 0.01; switch (grp1) { case "+": grp2 = 1 + grp2; if (grp2 >= 2) { grp2 = 2; } break; case "-": grp2 = 1 - grp2; if (grp2 <= 0) { grp2 = 0; } break; } adjust_arg += " --brightness=" + grp2; normal_brightness = ""; }); normal_arg += normal_brightness; var normal_hue = " --hue=0"; file_name.replace(/iroai([\d]+)/, function(all, grp1){ grp1 *= 1; if (grp1 >= 360) { grp1 = 360; } adjust_arg += " --hue=" + grp1; normal_hue = ""; }); file_name.replace(/iroai[\+]([\d]+)\%/, function(all, grp1){ grp1 *= 3.6; if (grp1 >= 360) { grp1 = 360; } adjust_arg += " --hue=" + grp1; normal_hue = ""; }); normal_arg += normal_hue; var normal_saturation = " --saturation=1"; file_name.replace(/saido([\d]+)/, function(all, grp1){ grp1 *= 1; if (grp1 >= 30) { grp1 = 30; } grp1 /= 10; adjust_arg += " --saturation=" + grp1; normal_saturation = ""; }); file_name.replace(/saido([\+\-])([\d]+)\%/, function(all, grp1, grp2){ switch (grp1) { case "+": grp2 *= 0.02; grp2 = 1 + grp2; if (grp2 >= 3) { grp2 = 3; } break; case "-": grp2 *= 0.01; grp2 = 1 - grp2; if (grp2 <= 0) { grp2 = 0; } break; } adjust_arg += " --saturation=" + grp2; normal_saturation = ""; }); normal_arg += normal_saturation; var normal_gamma = " --gamma=1"; file_name.replace(/gamma([\d]+)/, function(all, grp1){ grp1 *= 1; if (grp1 >= 99) { grp1 = 99; } grp1 /= 10; adjust_arg += " --gamma=" + grp1; normal_gamma = ""; }); file_name.replace(/gamma([\+\-])([\d]+)\%/, function(all, grp1, grp2){ switch (grp1) { case "+": grp2 *= 0.09; grp2 = 1 + grp2; if (grp2 >= 10) { grp2 = 10; } break; case "-": grp2 *= 0.01; grp2 = 1 - grp2; if (grp2 <= 0) { grp2 = 0; } break; } adjust_arg += " --gamma=" + grp2; normal_gamma = ""; }); normal_arg += normal_gamma; if (adjust_arg != "") { adjust_arg += normal_arg; AddVlcFilter("adjust", adjust_arg); } // =================================================================== // ビデオ回転フィルター (rotate) // =================================================================== file_name.replace(/rotate([\d]+)/, function(all, grp1){ grp1 *= 1; if (grp1 >= 359) { grp1 = 359; } var arg = " --rotate-angle=" + grp1; AddVlcFilter("rotate", arg); }); // =================================================================== // ビデオスケーリングフィルター (swscale) // =================================================================== var scale_on_flag = 0; if (scale_on_flag == 0) { file_name.replace(/scale\-spd\-high/, function(all){ var arg = " --swscale-mode=0"; AddVlcFilter("swscale", arg); scale_on_flag = 1; }); } if (scale_on_flag == 0) { file_name.replace(/scalemode([\d]+)/, function(all, grp1){ grp1 *= 1; if (grp1 >= 10) { grp1 = 10; } // --swscale-mode={0 (高速Bilinear), 1 (Bilinear), 2 (Bicubic(高品質)), 3 (実験的), 4 (近傍法(低品質)), 5 (エリア), 6 (輝度Bicubic / クロマBilinear), 7 (Gauss), 8 (SincR), 9 (Lanczos), 10 (Bicubicスプライン)} var arg = " --swscale-mode=" + grp1; AddVlcFilter("swscale", arg); scale_on_flag = 1; }); } // =================================================================== // 高品質な3Dノイズ除去フィルター (hqdn3d) // =================================================================== file_name.replace(/noisecut[\+]?([\d]+)\%/, function(all, grp1){ // 最大値は254らしいのでコレが正しいはずなのだがUIの最大値での数値を見ると最大は8ぐらいに見える。 // (内部的にはUIの最大ゲージを超えても正常に処理してるっぽい?) // なので適当に最大30ぐらいでやってみる。30でも十分すぎるほど強力なフィルター効果になる。 // grp1 *= 2.54; // if (grp1 >= 254) { grp1 = 254; } // 最大30まで grp1 *= 0.3; if (grp1 >= 30) { grp1 = 30; } var arg = " --hqdn3d-luma-spat=" + grp1 + " --hqdn3d-chroma-spat=" + grp1 + " --hqdn3d-luma-temp=" + grp1 + " --hqdn3d-chroma-temp=" + grp1; AddVlcFilter("hqdn3d", arg); }); // =================================================================== // // =================================================================== for (i = 2; i <= 9; i++) { try { vlc_arg_2 += " " + WScript.Arguments(i); } catch (x) { break; } } var run_code = ('"' + WScript.Arguments(0)) + '"' + " " + '"' + file_name + '"' + vlc_filter_str + vlc_add_arg + vlc_arg_2; if (1) { // VLCオープン sh.Run(run_code); } else { // デバッグ用 WScript.Echo(run_code); } sh = null; fs = null; </script> </job>
 

コメント一覧

下に行くほど新しいコメントです

この記事にコメントを投稿した人はまだいません

コメントをどうぞ

名前: