4

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
  • 2,143

3 Answers3

4

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,419
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
  • 2,143
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
  • 557