Кнопка для пакетной конвертации в MP3

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Моторокер, Avada, CaptainFlint, Nik, d-view

kadvlad
Сообщения: 81
Зарегистрирован: Вс авг 26, 2007 14:45

Кнопка для пакетной конвертации в MP3

Сообщение 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]

Спасибо.
Аватара пользователя
Rodny
Сообщения: 949
Зарегистрирован: Ср янв 24, 2007 00:59
Откуда: Могилёв, Беларусь

Сообщение Rodny »

kadvlad
Путь запуска не нужен:

Код: Выделить всё

TOTALCMD#BAR#DATA
%ProgramFiles%\foobar2000\codecs\lame.exe -b 128
%S
%ProgramFiles%\Totalcmd\totalcmd.exe,2
Lame

-1
-1
Только это работает с одним файлом. Несколько файлов в командной строке lame, кажется, не позволяет. Подробно я не вникал.
kadvlad писал(а):каким образом в ком.строке кодера указать имена выходящих файлов?
А что ты хочешь указать? Если ничего не писать, как сейчас, то на выходе будет "исходный_файл.mp3".
kadvlad
Сообщения: 81
Зарегистрирован: Вс авг 26, 2007 14:45

Сообщение kadvlad »

Спасибо за содействие.

Искал ответ в "lame.exe -?" но не нашел. Неужели нельзя списком?
Ведь программы-конвертеры делают это..

Указать хочу либо новое имя (с индексом?) либо другой путь сохранения. Бывает, что нужно пережать из 320.mp3 в 128.mp3 :shock: для предпрослушек, или на маленькую флэшку перебросить для экономии :)

Похожее решение раньше было: http://wincmd.ru/plugring/wcx_plugin_Bi ... ter_0.html
Но в 7.03 почему-то не хочет ставиться.
Может, связаться с автором плагина?.. Сам я не разбираюсь в вопросе.
Аватара пользователя
Rodny
Сообщения: 949
Зарегистрирован: Ср янв 24, 2007 00:59
Откуда: Могилёв, Беларусь

Сообщение 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
Возможное неудобство в том, что команда выполняется для всех выделенных файлов сразу, что неслабо может нагрузить систему. Тут уж смотри сам, какие у тебя ситуации.

А вот как быть в этом случае с переименованием/перемещением - даже мыслей нет.
У меня для этого специализированный софт стоит.
Последний раз редактировалось Rodny Ср июн 11, 2008 22:49, всего редактировалось 1 раз.
kadvlad
Сообщения: 81
Зарегистрирован: Вс авг 26, 2007 14:45

Сообщение kadvlad »

Ага, спасибо большое! Поковыряю.
Раньше видел этот скрипт, но даже не додумался искать решение так.
;)

UPD. А может, как-то приспособить команду "wait" для поочередного запуска?
Последний раз редактировалось kadvlad Ср июн 11, 2008 22:53, всего редактировалось 1 раз.
Аватара пользователя
aLexx
Сообщения: 442
Зарегистрирован: Пн мар 14, 2005 08:33
Откуда: Новокузнецк
Контактная информация:

Сообщение aLexx »

У меня БитРейтКонвертер пашет в полный рост! На ТС 7.03.
Я теперь даже знаю, что на Мотор нельзя больше 300 песен закачать...
А вот на плеер (4 гб памяти) музона качнулось на 200 часов!
И это только любимое...
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение 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
; ---------------------------------------------------------
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

kadvlad писал(а):А может, как-то приспособить команду "wait" для поочередного запуска?
Замени в скрипте строку

Код: Выделить всё

WshShell.Run """" & sProg & """", 1, False
на вот эту

Код: Выделить всё

WshShell.Run """" & sProg & """", 1, True
Это мое 400-ое сообщение и, надо же, такая неглубокая мысля...
kadvlad
Сообщения: 81
Зарегистрирован: Вс авг 26, 2007 14:45

Сообщение 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"

Спасибо.
kadvlad
Сообщения: 81
Зарегистрирован: Вс авг 26, 2007 14:45

Сообщение 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"
Посмотрите, пожалуйста, кто понимает.
У меня не получилось сконфигурировать настройки и перетянуть на кнопку файлы.
Аватара пользователя
Rodny
Сообщения: 949
Зарегистрирован: Ср янв 24, 2007 00:59
Откуда: Могилёв, Беларусь

Сообщение 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". И они действительно ничего не выводят. А непосредственно окном они не управляют.
Dimych
Сообщения: 27
Зарегистрирован: Ср фев 01, 2006 10:48

Сообщение 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%) и запускает на выполнение.
Dimych
Сообщения: 27
Зарегистрирован: Ср фев 01, 2006 10:48

Сообщение Dimych »

Небольшая правка:
1. Параметры кнопки %L %P
2.

Код: Выделить всё

if "%OUTPATH%"=="" set OUTPATH=%2
if "%OUTPATH%"=="." set OUTPATH=%2
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

kadvlad писал(а):Однако остались ещё вопросы:
1. Не удается заставить работать свернутым/скрытым DOS-окно.
Кодековский аргумент --quiet (или --silent) не помогает.
Попробуй в скрипте, там где

Код: Выделить всё

WshShell.Run """" & sProg & """", 1, True
написать, соответственно

Код: Выделить всё

WshShell.Run """" & sProg & """", 6, True
или

Код: Выделить всё

WshShell.Run """" & sProg & """", 0, True
PS сам не проверял...
kadvlad
Сообщения: 81
Зарегистрирован: Вс авг 26, 2007 14:45

Сообщение kadvlad »

Друзья,

спасибо большое всем!
На выходных обязательно попробую все предложенные варианты, о результатах отпишусь.
;)
Ответить