3

I created a key in the Windows registry:

HKEY_CLASSES_ROOT\*\Shell\Convert to MP3\command

with:

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

It works, except that the filename is not exactly what I want:

Input: test.wav, Output: test.wav.mp3

whereas I'd like the output filename to be test.mp3.

I also tried with:

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

like in this answer, but it doesn't work: the output is %~n1.mp3 then!

How to remove the original extension like this, and replace by .mp3?

PS: I'm looking for a solution without involving a .bat file, but only the registry. If not possible, it's ok to use a bat file.

Basj
  • 1,809
  • 12
  • 58
  • 100

3 Answers3

3

Assumed that ffmpeg.exe is included by path variable, use

cmd /q /c for %%I in ("%1") do ffmpeg -i %%I -acodec libmp3lame -vn -ar 44100 -ac 2 -ab 256k "%%~nI.mp3"
as one-liner without bat file.
guest
  • 3,409
  • Posted on your request. As a >2k user I should focus on more advanced commands & give chance for newcomers to answer, hence I initially posted in comment. If you'd award this bounty to me, I'll refund it to you by sponsoring your next question of interest. – guest May 13 '18 at 22:45
1

Here is a solution with a .BAT file (don't know if it's possible without a BAT file). The key is to use %~n1.mp3, as explained here.

File ____LameMP3me.bat:

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

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

"D:\Documents\software\____PORTABLE\____useful-tools\____LameMP3me.bat" "%1"
Basj
  • 1,809
  • 12
  • 58
  • 100
1

Instead of registry hacking you could just put the .bat file (or a .lnk file pointing to it) into %APPDATA%\Microsoft\Windows\SendTo.

Here's a cygwin + bash solution for the file extension problem, requires exactly one additional line of code thanks to https://www.tldp.org/LDP/abs/html/string-manipulation.html

You would start it by 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
T Nierath
  • 527
  • Thank you for your answer, but using SendTo vs. contextual menu command doesn't change anything to the original problem (i.e. having the files named test.wav.mp3 instead of test.mp3). Also using SendTo is longer to do when doing it a lot (right click, click on SendTo, find the right item) than a direct Context menu item. – Basj May 11 '18 at 20:29
  • I know, but keep in mind that people may come to this place via searching google. I certainly wish I had known about this little trick much sooner. – T Nierath May 11 '18 at 21:08
  • Regarding your filename problem. I never learned power shell, so what I do is install cygwin and run more involved stuff as a bash script. But that's hardly a solution for you I guess. – T Nierath May 11 '18 at 21:16
  • @Basj added the bash solution just in case – T Nierath May 13 '18 at 21:34