
Criei uma chave no registro do Windows:
HKEY_CLASSES_ROOT\*\Shell\Convert to MP3\command
com:
"D:\tools\ffmpeg.exe" -i "%1" -acodec libmp3lame -vn -ar 44100 -ac 2 -ab 256k "%1.mp3"
Funciona, exceto que o nome do arquivo não é exatamente o que eu quero:
Entrada: test.wav
, Saída:test.wav.mp3
enquanto eu gostaria que o nome do arquivo de saída fosse test.mp3
.
Eu também tentei com:
"D:\tools\ffmpeg.exe" ... "%~n1.mp3"
como nesta resposta, mas não funciona: a saída é %~n1.mp3
then!
Como remover a extensão original assim e substituir por .mp3?
PS: Estou procurando uma solução sem envolver um arquivo .bat, mas apenas o registro. Se não for possível, não há problema em usar um arquivo bat.
Responder1
Supondo que ffmpeg.exe esteja incluído pela variável de caminho, use
cmd /q /c para %%I in ("%1") faça ffmpeg -i %%I -acodec libmp3lame -vn -ar 44100 -ac 2 -ab 256k "%%~nI.mp3"como one-liner sem arquivo bat.
Responder2
Aqui está uma solução com um arquivo .BAT (não sei se é possível sem um arquivo BAT). A chave é usar %~n1.mp3
, conforme explicadoaqui.
Arquivo ____LameMP3me.bat
:
"D:\Documents\software\____PORTABLE\____useful-tools\ffmpeg.exe" -i %1 -acodec libmp3lame -vn -ar 44100 -ac 2 -ab 256k "%~n1.mp3"
Em HKEY_CLASSES_ROOT\*\Shell\Lame MP3 me!\command
:
"D:\Documents\software\____PORTABLE\____useful-tools\____LameMP3me.bat" "%1"
Responder3
Em vez de hackear o registro, você pode simplesmente colocar o .bat
arquivo (ou um .lnk
arquivo apontando para ele) em %APPDATA%\Microsoft\Windows\SendTo
.
Aqui está uma solução cygwin + bash para o problema de extensão de arquivo, requer exatamente uma linha adicional de código graças ahttps://www.tldp.org/LDP/abs/html/string-manipulation.html
Você começaria porc:\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