
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.wav
:test.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