エクスプローラーに「.WAV ファイルを右クリックして MP3 に変換」拡張機能を追加します。

エクスプローラーに「.WAV ファイルを右クリックして MP3 に変換」拡張機能を追加します。

Windows レジストリにキーを作成しました:

HKEY_CLASSES_ROOT\*\Shell\Convert to MP3\command

と:

"D:\tools\ffmpeg.exe" -i "%1" -acodec libmp3lame -vn -ar 44100 -ac 2 -ab 256k "%1.mp3"

ファイル名がまさに私が望むものと異なることを除けば、動作します。

入出力test.wavtest.wav.mp3

一方、出力ファイル名は にしたいですtest.mp3

以下も試してみました:

"D:\tools\ffmpeg.exe" ... "%~n1.mp3"

この回答のようにしかし、それは機能しません。出力は%~n1.mp3次のようになります。

このように元の拡張子を削除し、.mp3 に置き換えるにはどうすればよいでしょうか?

PS: .bat ファイルを使わず、レジストリのみを扱うソリューションを探しています。それが不可能な場合は、bat ファイルを使用してもかまいません。

答え1

ffmpeg.exeがパス変数に含まれていると仮定して、

cmd /q /c %%I in ("%1") に対して ffmpeg -i %%I -acodec libmp3lame -vn -ar 44100 -ac 2 -ab 256k "%%~nI.mp3" を実行します
bat ファイルなしのワンライナーとして。

答え2

.BATファイルを使った解決策はここにあります(BATファイルなしでも可能かどうかはわかりません)。重要なのは、%~n1.mp3説明したように、を使用することです。ここ

ファイル____LameMP3me.bat

"D:\Documents\software\____PORTABLE\____useful-tools\ffmpeg.exe" -i %1 -acodec libmp3lame -vn -ar 44100 -ac 2 -ab 256k "%~n1.mp3"

HKEY_CLASSES_ROOT\*\Shell\Lame MP3 me!\command

"D:\Documents\software\____PORTABLE\____useful-tools\____LameMP3me.bat" "%1"

答え3

レジストリをハッキングする代わりに、.batファイル (または.lnkそれを指すファイル) を に配置することもできます%APPDATA%\Microsoft\Windows\SendTo

ファイル拡張子の問題に対するcygwin + bashの解決策は、次のコードにより1行の追加コードを必要とします。https://www.tldp.org/LDP/abs/html/string-manipulation.html

まず最初にc:\cygwin\bin\bash.exe <scriptname> <filename>

#!/bin/bash

FILE_NAME="${1%.*}"

"/cygdrive/d/tools/ffmpeg.exe" -i "\"$1\"" -acodec libmp3lame -vn -ar 44100 -ac 2 -ab 256k "\"${FILE_NAME}.mp3\""

#keep the console window open, uncomment if not necessary
read

関連情報