Страница 1 из 4
Кнопка для пакетной конвертации в MP3
Добавлено: Вт июн 10, 2008 19:11
kadvlad
Друзья,
Решил сделать кнопку, чтоб список выделенных файлов (директорий?) передавался в lame.exe для конвертации в mp3.
TOTALCMD#BAR#DATA
%ProgramFiles%\foobar2000\codecs\lame.exe -b 128
%S
%ProgramFiles%\Totalcmd\totalcmd.exe,2
Lame
%ProgramFiles%\foobar2000\codecs\
-1
-1
Мелькает черный экран - и всё.
Подскажите, пожалуйста, где ошибка?
Знает ли кто-нибудь, каким образом в ком.строке кодера указать имена выходящих файлов?
usage: lame.exe [options] <infile> [outfile]
Спасибо.
Добавлено: Ср июн 11, 2008 03:14
Rodny
kadvlad
Путь запуска не нужен:
Код: Выделить всё
TOTALCMD#BAR#DATA
%ProgramFiles%\foobar2000\codecs\lame.exe -b 128
%S
%ProgramFiles%\Totalcmd\totalcmd.exe,2
Lame
-1
-1
Только это работает с одним файлом. Несколько файлов в командной строке lame, кажется, не позволяет. Подробно я не вникал.
kadvlad писал(а):каким образом в ком.строке кодера указать имена выходящих файлов?
А что ты хочешь указать? Если ничего не писать, как сейчас, то на выходе будет "исходный_файл.mp3".
Добавлено: Ср июн 11, 2008 21:20
kadvlad
Спасибо за содействие.
Искал ответ в "lame.exe -?" но не нашел. Неужели нельзя списком?
Ведь программы-конвертеры делают это..
Указать хочу либо новое имя (с индексом?) либо другой путь сохранения. Бывает, что нужно пережать из 320.mp3 в 128.mp3

для предпрослушек, или на маленькую флэшку перебросить для экономии
Похожее решение раньше было:
http://wincmd.ru/plugring/wcx_plugin_Bi ... ter_0.html
Но в 7.03 почему-то не хочет ставиться.
Может, связаться с автором плагина?.. Сам я не разбираюсь в вопросе.
Добавлено: Ср июн 11, 2008 22:36
Rodny
Программы-конвертеры запускают lame.exe несколько раз поочерёдно.
Для TC
mozers написал скрипт List2Multi, который делает то же самое. Вот вроде последняя версия:
Код: Выделить всё
' File: List2Multi.vbs
' Description: Скрипт для загрузки выделенных в Total Commander файлов в заданную программу
' Version: 1.2
' Author: mozers™
' Comments: Предназначен для программ НЕ поддерживающих загрузку нескольких файлов с ком.строки.
' Поэтому скрипт вызывает программу многократно:
' programm.exe [/param1 /param2] file1.ext
' programm.exe [/param1 /param2] file2.ext
' programm.exe [/param1 /param2] file3.ext
' Sample: Создаем кнопку на панели инструментов (или команду в меню "Запуск"):
' Команда: %COMMANDER_PATH%\Utils\WSH\List2Multi.vbs "%ProgramFiles%\WinRAR\WinRAR.exe" X
' Параметры: %L
' _________________________________________________________
Option Explicit
Dim WshShell, FSO, sProg, objArgs, FileList, sFile, count, param, i
Set objArgs = WScript.Arguments
Set WshShell = WScript.CreateObject("WScript.Shell")
sProg = WshShell.ExpandEnvironmentStrings(objArgs(0))
count = objArgs.Count
If count < 2 Then
WshShell.Run """" & sProg & """", 1, False
Else
param = ""
For i = 1 To count-2
param = param + " " + objArgs(i)
Next
Set FSO = CreateObject("Scripting.FileSystemObject")
Set FileList = FSO.OpenTextFile(objArgs(count-1), 1, False)
Do While Not FileList.AtEndOfStream
sFile = FileList.ReadLine
If Right(sFile,1) = "\" Then
WshShell.Run """" & sProg & """", 1, False
Exit Do
End If
WshShell.Run """" & sProg & """ " & param & " """ & sFile & """", 1, False
Loop
End If
WScript.Quit
Кнопка будет такой
Код: Выделить всё
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\WSH\List2Multi.vbs "%ProgramFiles%\foobar2000\codecs\lame.exe" -b 128
%L
%ProgramFiles%\Totalcmd\totalcmd.exe,2
Lame
-1
-1
Возможное неудобство в том, что команда выполняется для всех выделенных файлов сразу, что неслабо может нагрузить систему. Тут уж смотри сам, какие у тебя ситуации.
А вот как быть в этом случае с переименованием/перемещением - даже мыслей нет.
У меня для этого специализированный софт стоит.
Добавлено: Ср июн 11, 2008 22:44
kadvlad
Ага, спасибо большое! Поковыряю.
Раньше видел этот скрипт, но даже не додумался искать решение так.
UPD. А может, как-то приспособить команду "wait" для поочередного запуска?
Добавлено: Ср июн 11, 2008 22:48
aLexx
У меня БитРейтКонвертер пашет в полный рост! На ТС 7.03.
Я теперь даже знаю, что на Мотор нельзя больше 300 песен закачать...
А вот на плеер (4 гб памяти) музона качнулось на 200 часов!
И это только любимое...
Добавлено: Чт июн 12, 2008 22:48
Tol!k
у мну multiarc пашет как волк
; ---------------------------------------------------------
[L.A.M.E.]
Description=LAME
http://www.mp3dev.org/
Extension=mp3,LAME
Archiver=lame.exe
Add=%P --abr 320 -k -f %FQA %AQA
Move=%P -b 192 -q2 %FQA %AQA
; ---------------------------------------------------------
Добавлено: Пт июн 13, 2008 00:46
Volniy
kadvlad писал(а):А может, как-то приспособить команду "wait" для поочередного запуска?
Замени в скрипте строку
на вот эту
Это мое 400-ое сообщение и, надо же, такая неглубокая мысля...
Добавлено: Пт июн 13, 2008 01:30
kadvlad
Друзья, спасибо, почти получилось.
В скрипте поменял три строчки с false на true:
---------------------------------------------------------
Option Explicit
Dim WshShell, FSO, sProg, objArgs, FileList, sFile, count, param, i
Set objArgs = WScript.Arguments
Set WshShell = WScript.CreateObject("WScript.Shell")
sProg = WshShell.ExpandEnvironmentStrings(objArgs(0))
count = objArgs.Count
If count < 2 Then
WshShell.Run """" & sProg & """", 1, True
Else
param = ""
For i = 1 To count-2
param = param + " " + objArgs(i)
Next
Set FSO = CreateObject("Scripting.FileSystemObject")
Set FileList = FSO.OpenTextFile(objArgs(count-1), 1, False)
Do While Not FileList.AtEndOfStream
sFile = FileList.ReadLine
If Right(sFile,1) = "\" Then
WshShell.Run """" & sProg & """", 1, True
Exit Do
End If
WshShell.Run """" & sProg & """ " & param & " """ & sFile & """", 1, True
Loop
End If
WScript.Quit
-------------------------------------------------------
кнопка:
--------------------------------------------------------
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Plugins\List2Multi.vbs "%ProgramFiles%\foobar2000\codecs\lame.exe" --quiet -b 128
%L
%ProgramFiles%\Totalcmd\totalcmd.exe,2
Lame
1
-1
--------------------------------------------------------
Однако остались ещё вопросы:
1. Не удается заставить работать свернутым/скрытым DOS-окно.
Кодековский аргумент --quiet (или --silent) не помогает.
2. Сконвертированные файлы помещаются в ту же диреторию, а к текущему расширению дописывается еще одно новое: "track.mp3.mp3"
Согласен, это наглядно, а можно ли прописать НЕ новое расширение, а префикс: _track.mp3 ?
Что-нибудь типа такого же батника:
@for %%I in (*.mp3) do lame.exe --quiet "%%~nxI"
Спасибо.
Добавлено: Ср июн 18, 2008 00:50
kadvlad
Вот,
выложил архивчик (6 Кб) с батниками для пакетной (?) обработки файлов (DOS, GUI).
Автор пишет так:
- put this Batch-Command on your Desktop, so you can drag and drop wave files on it and LAME will encode them to mp3 format.
- put this Batch-Command in a place mentioned in your PATH environment, start the DOS-BOX and change to a directory where your wave files are located. the following line will encode all your wave files to mp3 "lame.bat *.wav"
Посмотрите, пожалуйста, кто понимает.
У меня не получилось сконфигурировать настройки и перетянуть на кнопку файлы.
Добавлено: Ср июн 18, 2008 03:48
Rodny
Сразу говорю: я мало что понимаю

Заставить работать bat-ы на кнопке у меня не получилось. А вот с Lame.vbs кое-какие результаты есть.
А именно по второму вопросу из предыдущего поста:
"можно ли прописать НЕ новое расширение, а префикс: _track.mp3 ?"
В скрипте есть функция
Код: Выделить всё
Function getBasename(filespec)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile(filespec)
getBasename = f.ParentFolder & "\" & fso.GetBaseName(filespec)
End Function
Я по аналогии добавил другую:
Код: Выделить всё
Function getBasename1(filespec)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile(filespec)
getBasename = f.ParentFolder & "\_" & fso.GetBaseName(filespec)
End Function
Т.е. непосредственно перед именем исходного файла теперь добавляется подчёркивание. Туда, естественно, можно вписать что-то другое.
Дальше заменил в 109-й строке вызов
getBasename(infile) на
getBasename1(infile). И, само собой, пути к lame.exe и опции прописал.
Кнопка такого вида:
Код: Выделить всё
TOTALCMD#BAR#DATA
D:\Programs\Lame\Lame.vbs
%S
C:\WINDOWS\System32\WScript.exe
Lame
-1
Файлы на неё не перетаскивать! Выделять, а потом просто нажимать кнопку. С папками скрипт не работает в принципе.
Теперь что касается
1. Не удается заставить работать свернутым/скрытым DOS-окно.
Кодековский аргумент --quiet (или --silent) не помогает.
Они же не это делают. В справке про оба написано: "don't print anything on screen". И они действительно ничего не выводят. А непосредственно окном они не управляют.
Добавлено: Чт июн 19, 2008 00:41
Dimych
Вот батничек
Код: Выделить всё
@echo off
setlocal
REM Имя командного файла на выполнения кодирования
set RUNCMDFILE=StartLame.cmd
REM Путь для командного файла на выполнения кодирования
set RUNCMDPATH=%TEMP%
REM Полный путь к кодировщику
set BINFULLPATH=%ProgramFiles%\foobar2000\codecs\lame.exe
REM Суффикс для добавления к выходному файлу
set OUTSFX=_lame
REM Путь для сохранение выходных файлов (!!! C ПОСЛЕДНИМ CЛЭШЭМ !!!)
REM Если не задать - будет использоваться путь исходных файлов.
set OUTPATH=
REM Oпции кодирования Lame
set CODEOPT=-b 128
if "%OUTPATH%"=="" set OUTPATH=.\
if "%OUTPATH%"=="." set OUTPATH=.\
REM Создание командного файла на кодирование
echo. > "%RUNCMDPATH%\%RUNCMDFILE%"
echo REM Coding through LAME Encoder>> "%RUNCMDPATH%\%RUNCMDFILE%"
echo @echo off >> "%RUNCMDPATH%\%RUNCMDFILE%"
echo. >> "%RUNCMDPATH%\%RUNCMDFILE%"
echo chcp 1251 ^> nul>> "%RUNCMDPATH%\%RUNCMDFILE%"
for /F "delims=" %%i in (%1) do (
>>"%RUNCMDPATH%\%RUNCMDFILE%" echo cls
>>"%RUNCMDPATH%\%RUNCMDFILE%" echo echo.
>>"%RUNCMDPATH%\%RUNCMDFILE%" echo echo Coding now: "%%~ni%OUTSFX%.mp3"
>>"%RUNCMDPATH%\%RUNCMDFILE%" echo echo.
>>"%RUNCMDPATH%\%RUNCMDFILE%" echo "%BINFULLPATH%" %CODEOPT% "%%i" "%OUTPATH%%%~ni%OUTSFX%.mp3"
)
echo exit >> "%RUNCMDPATH%\%RUNCMDFILE%"
REM Запуск командного файла на кодирование
start "Coding through LAME Encoder, please wait..." /min /D"%RUNCMDPATH%" "%RUNCMDFILE%"
endlocal
exit
Стартует свернувшись, в параметрах кнопки - %L
Прицип работы: создает командный файл (здесь StartLame.cmd в %TEMP%) и запускает на выполнение.
Добавлено: Чт июн 19, 2008 01:00
Dimych
Небольшая правка:
1. Параметры кнопки %L %P
2.
Код: Выделить всё
if "%OUTPATH%"=="" set OUTPATH=%2
if "%OUTPATH%"=="." set OUTPATH=%2
Добавлено: Чт июн 19, 2008 02:39
Volniy
kadvlad писал(а):Однако остались ещё вопросы:
1. Не удается заставить работать свернутым/скрытым DOS-окно.
Кодековский аргумент --quiet (или --silent) не помогает.
Попробуй в скрипте, там где
написать, соответственно
или
PS сам не проверял...
Добавлено: Чт июн 19, 2008 12:52
kadvlad
Друзья,
спасибо большое всем!
На выходных обязательно попробую все предложенные варианты, о результатах отпишусь.
