何をしたいか使うもの準備スクリプトの中身ショートカットを作るできないことpowershellで使っていることのメモpowershell自体のオプションのメモffmpegで使っているオプションのメモおわり何をしたいかWindows上で、音質がそれほど重要ではないオーディオファイルを、サイズ圧縮を目的として、mp3に変換したいのです。実際は他の方法でもっとサイズを効率的に落とせるのかもしれないですが、とりあえずmp3にしておけばいいだろうという考えです。macOSだと変換してくれるワークフローのようなものが元々あるのですが、Windowsでは無いようなので自分で用意する必要があります。これをスクリプトで作成します。巷には変換用のソフトウェアが溢れかえっているようなのですが、闇雲にソフトウェアをインストールするのは憚られるので、ffmpegを使えば自前のスクリプトでできるんじゃないかと思い立った次第です。使うもの使用するのは次の2つだけです。スクリプト自体はショートカットを利用して使います。このソフトウェアに変換していただきます。ファイルの指定は引数で渡すのは面倒だし、コンソールの立ち上げも手間なので、ドラッグ&ドロップ(D&D)で変換を開始するようにしました。ドラッグ&ドロップとドラッグアンドドロップとD&Dは同じことです。表記ゆれが少々あります。準備ffmpegの用意をします。ソースコードからビルドするか、ビルド済みのバイナリを用意するかの2通りの方法があります。FFmpegから入手できます。ビルド済みのバイナリへのリンクもあります。自分はビルド済みバイナリを使っています。powershellはWindowsに内蔵なので特に何もしません。D&D対応のためにスクリプトを作った後にそのスクリプトのショートカットを少々いじる必要はあります。次にスクリプトを作成します。シンプルにD&Dでmp3に変換する。スクリプト単体では引数で指定する。元がmp3の時は、_out.mp3にする。失敗なら、$errorCount++、ファイル名を配列に追加。終了時の表示[System.Windows.Forms.MessageBox]::Show("成功:${successCount}件、失敗:${errorCount}件でした。`r`n元のファイルと同じ場所に作成されています。"変換終了")保存するときには文字コードに注意します。UTF-8では正しく動作しません。マイクロソフトはBOMが好き。変換終了後にはウィンドウが表示されます。終わるまでは何も表示もされないので、きちんと動作しているかを見たいならタスクマネージャーを使いましょう(不親切)。スクリプトだけでは、起動時に引数指定が必要でこれを毎回するのは面倒です。そこでD&Dできるようにしていきます。ショートカットを作るショートカットを作成して、そこにファイルを投げ込めるようにします。作成するショートカットはそのままではドラッグアンドドロップできないので、利用できるようにするためにプロパティを変更します。やること:ショートカットを作成して、好きなところに配置する。ショートカットのプロパティを開く。<作成したps1ファイルのパス>完了!もしpowershell.exeの場所が違ったら読み替えてください。ショートカットのプロパティのリンク先というのはこちらです:これでD&Dすれば変換できるようになります。あとは、オプションなどのメモを下に書いておきます。できないことこのスクリプトではフォルダのドロップには対応していません。個人的にそういう操作をする予定がないためです。処理の中止もありません。しても中止したければタスクマネージャーから強制終了させましょう。変換時にエラーが起きるとそのファイル名を記録していますが、その確認手段を用意していません。ウィンドウに表示させればいいのですが、調査と調整が面倒でサボっています。以降はコマンドやオプションのメモを残しておきます。間違いがあるかもしれませんのでご注意を。powershellで使っていることのメモD&Dでは実質スクリプトに引数を指定するものなので、引数を取得する必要がある。引数を取得するには$Argsを使う。配列なので、foreachで一つずつ処理していく。引数がファイルかどうかを確かめる。Leafでチェックできる。ファイルは木構造でいう葉だからLeaf。出力するファイル名を決定するために、引数のファイルパスを、親ディレクトリのパスと、ファイル名に分ける必要がある。<file_path>を使う。取得したファイル名record.wavなどは、recordとwavのように拡張子の前後で分かれていると、出力ファイル名を作りやすいので分割する。これは文字列中のドット.で分ける。$filename.Split('.')[-1]で拡張子が取得できる。これは.で分割した配列の一番後ろを参照できるので拡張子になる。"wav"]に分かれる。取得した拡張子がmp3ならば、元のファイル名に_out.mp3を付加して、mp3でなければ、元のファイル名に.mp3を付加する。以前の拡張子は残しておいている。$strB)を使用する。<filename>を使用する。セパレータを考えないで済む。直前のコマンドの成否は$?で確認できる。メッセージウィンドウでは、`r`nで改行できる。powershellのエスケープシーケンスは、バッククォート`(バックティックとも呼ばれる)であり、バックスラッシュではないことに注意する。powershell自体のオプションのメモps1スクリプト実行時のpowershell.exeに渡すオプション(パラメータ)のメモです。ショートカットの実行時のリンク先として使用します。hiddenの指定は、コンソール画面の表示を抑制する。Normal、Minimized、Maximized、Hiddenから1つ指定できる。RemoteSignedの指定は、セキュリティ確保のための実行ポリシーを指定する。RemoteSignedより厳しい設定だと、スクリプトの実行が行えなかったと思う。Docsなお、-ExecutionPolicyはpoweshell全体でも定義できますが、個別に指定しています。script.ps1の指定は、実行するスクリプトを指定する。これより後ろの引数などはスクリプトに渡されることに注意。-Fileを一番最後に指定するべき。Documentation)にありますが、使っているものを抜粋しておきます。-iで入力ファイルの指定。input-vnで映像を無しに。none-acで音声のチャンネル数の指定。channels-arで音声のサンプリング周波数の指定。rate-b:aまたは-abで音声のビットレートの指定。-abはドキュメントでは見当たりませんでしたがまだ使えるようです。-acodecで音声のコーデックの指定。-codec:aのエイリアス。-fでフォーマットの指定だが、自動で決定してくれるのでなくても問題なかった。format最後に出力先のパスを指定。使ったことがないので、オプションの指定方法はよく分かってなかったりします。入力に対する設定と出力に対する設定とか複数の入力がどうとかあるようですが、その辺りは使ってないので未修です。おわり実現したいことはできたので満足です。書いてみると細かいところは分かってないなと実感します。powershellは面倒ですね。VSCodeで書いていても補完は正しく効いてない気がするし、ネット上では古い?記法も溢れているし。自分の記述も古いのが混じっているかもしれません。最後のウィンドウの表示が不安です。GUIも部品の配置が面倒です。ビルダー的なものがあるといいんですけどね。D&D以外の良い渡し方があるといいんですが。Dockerなどで扱えれば環境を気にせず出来るんだけどなとか思いました。知識が足りてないのもありそうです。Windowsの細かいところも分かっていきたいな。したいことはできたのでよし。Tweakerを導入したので、設定メモを残す。タスクバーをいろいろ調整できるソフトウェアです。不便だなーと思うところをいい感じに設定できる素晴...windowsAutoHotKeyのスクリプト例AutoHotKeyで使った構文やスクリプトの例を書いておく。基本的なことは、公式ドキュメントのチュートリアルを読む。その他の注意事項も記し...windowswindows10でJIS/USキーボード設定を切り替える日本語JISキーボードと英語USキーボードを切り替える。設定で切り替えてもいいが、手間がかかる。ule4jisという単体のプログラムを利用することにした。タブレットをサブディスプレイにできるアプリspacedeskが有効期限が切れてるよといったメッセージが表示されて、使えなくなっていたので直しました。具体的には...ADBnexus7(2013)でsuperdisplayが使えない状態をなんとかしたnexus7(2013)でsuperdisplayが使えなくなっていたので使えるようにした。pagesでレポジトリのページの指定に関してメモコメントコメントを書き込むコメントをどうぞメールアドレスが公開されることはありません。名前メールサイトホームwindowsikapper主にITなどのアウトプットをしています。ご連絡等はTwitterの@ikapperへ。ikapblog.メニューホーム文字in画像QRIPアドレス確認ホーム検索トップサイドバータイトルとURLをコピーしました。