我在 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 对于 ("%1") 中的 %%I,执行 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 解决方案,只需要一行额外的代码,这要归功于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