Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Кнопка для пакетной конвертации в MP3
Goto page 1, 2, 3  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
kadvlad



Joined: 26 Aug 2007
Posts: 81

Post (Separately) Posted: Tue Jun 10, 2008 19:11    Post subject: Кнопка для пакетной конвертации в MP3 Reply with quote

Друзья,
Решил сделать кнопку, чтоб список выделенных файлов (директорий?) передавался в 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]

Спасибо.
Back to top
View user's profile Send private message
Rodny



Joined: 24 Jan 2007
Posts: 949
Location: Могилёв, Беларусь

Post (Separately) Posted: Wed Jun 11, 2008 03:14    Post subject: Reply with quote

kadvlad
Путь запуска не нужен:
Code:
TOTALCMD#BAR#DATA
%ProgramFiles%\foobar2000\codecs\lame.exe -b 128
%S
%ProgramFiles%\Totalcmd\totalcmd.exe,2
Lame

-1
-1
Только это работает с одним файлом. Несколько файлов в командной строке lame, кажется, не позволяет. Подробно я не вникал.

kadvlad wrote:
каким образом в ком.строке кодера указать имена выходящих файлов?
А что ты хочешь указать? Если ничего не писать, как сейчас, то на выходе будет "исходный_файл.mp3".
Back to top
View user's profile Send private message
kadvlad



Joined: 26 Aug 2007
Posts: 81

Post (Separately) Posted: Wed Jun 11, 2008 21:20    Post subject: Reply with quote

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

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

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

Похожее решение раньше было: http://wincmd.ru/plugring/wcx_plugin_BitRate_Converter_0.html
Но в 7.03 почему-то не хочет ставиться.
Может, связаться с автором плагина?.. Сам я не разбираюсь в вопросе.
Back to top
View user's profile Send private message
Rodny



Joined: 24 Jan 2007
Posts: 949
Location: Могилёв, Беларусь

Post (Separately) Posted: Wed Jun 11, 2008 22:36    Post subject: Reply with quote

Программы-конвертеры запускают lame.exe несколько раз поочерёдно.
Для TC mozers написал скрипт List2Multi, который делает то же самое. Вот вроде последняя версия:
Code:
'  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

Кнопка будет такой
Code:
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

Возможное неудобство в том, что команда выполняется для всех выделенных файлов сразу, что неслабо может нагрузить систему. Тут уж смотри сам, какие у тебя ситуации.

А вот как быть в этом случае с переименованием/перемещением - даже мыслей нет.
У меня для этого специализированный софт стоит.


Last edited by Rodny on Wed Jun 11, 2008 22:49; edited 1 time in total
Back to top
View user's profile Send private message
kadvlad



Joined: 26 Aug 2007
Posts: 81

Post (Separately) Posted: Wed Jun 11, 2008 22:44    Post subject: Reply with quote

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

UPD. А может, как-то приспособить команду "wait" для поочередного запуска?


Last edited by kadvlad on Wed Jun 11, 2008 22:53; edited 1 time in total
Back to top
View user's profile Send private message
aLexx



Joined: 14 Mar 2005
Posts: 442
Location: Новокузнецк

Post (Separately) Posted: Wed Jun 11, 2008 22:48    Post subject: Reply with quote

У меня БитРейтКонвертер пашет в полный рост! На ТС 7.03.
Я теперь даже знаю, что на Мотор нельзя больше 300 песен закачать...
А вот на плеер (4 гб памяти) музона качнулось на 200 часов!
И это только любимое...
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1726
Location: Арзамас

Post (Separately) Posted: Thu Jun 12, 2008 22:48    Post subject: Reply with quote

у мну 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
; ---------------------------------------------------------
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Fri Jun 13, 2008 00:46    Post subject: Reply with quote

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

Замени в скрипте строку
Code:
WshShell.Run """" & sProg & """", 1, False
на вот эту
Code:
WshShell.Run """" & sProg & """", 1, True


Это мое 400-ое сообщение и, надо же, такая неглубокая мысля...
Back to top
View user's profile Send private message
kadvlad



Joined: 26 Aug 2007
Posts: 81

Post (Separately) Posted: Fri Jun 13, 2008 01:30    Post subject: Reply with quote

Друзья, спасибо, почти получилось.
В скрипте поменял три строчки с 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"

Спасибо.
Back to top
View user's profile Send private message
kadvlad



Joined: 26 Aug 2007
Posts: 81

Post (Separately) Posted: Wed Jun 18, 2008 00:50    Post subject: Reply with quote

Вот, выложил архивчик (6 Кб) с батниками для пакетной (?) обработки файлов (DOS, GUI).

Автор пишет так:
Quote:
- 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"


Посмотрите, пожалуйста, кто понимает.
У меня не получилось сконфигурировать настройки и перетянуть на кнопку файлы.
Back to top
View user's profile Send private message
Rodny



Joined: 24 Jan 2007
Posts: 949
Location: Могилёв, Беларусь

Post (Separately) Posted: Wed Jun 18, 2008 03:48    Post subject: Reply with quote

Сразу говорю: я мало что понимаю Smile
Заставить работать bat-ы на кнопке у меня не получилось. А вот с Lame.vbs кое-какие результаты есть.
А именно по второму вопросу из предыдущего поста:
"можно ли прописать НЕ новое расширение, а префикс: _track.mp3 ?"
В скрипте есть функция
Code:
Function getBasename(filespec)
  Dim fso
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set f = fso.GetFile(filespec)
 
  getBasename = f.ParentFolder & "\" & fso.GetBaseName(filespec)
End Function

Я по аналогии добавил другую:
Code:
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 и опции прописал.
Кнопка такого вида:
Code:
TOTALCMD#BAR#DATA
D:\Programs\Lame\Lame.vbs
%S
C:\WINDOWS\System32\WScript.exe
Lame


-1

Файлы на неё не перетаскивать! Выделять, а потом просто нажимать кнопку. С папками скрипт не работает в принципе.

Теперь что касается
Quote:
1. Не удается заставить работать свернутым/скрытым DOS-окно.
Кодековский аргумент --quiet (или --silent) не помогает.
Они же не это делают. В справке про оба написано: "don't print anything on screen". И они действительно ничего не выводят. А непосредственно окном они не управляют.
Back to top
View user's profile Send private message
Dimych



Joined: 01 Feb 2006
Posts: 27

Post (Separately) Posted: Thu Jun 19, 2008 00:41    Post subject: Reply with quote

Вот батничек

Code:
@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%) и запускает на выполнение.
Back to top
View user's profile Send private message
Dimych



Joined: 01 Feb 2006
Posts: 27

Post (Separately) Posted: Thu Jun 19, 2008 01:00    Post subject: Reply with quote

Небольшая правка:
1. Параметры кнопки %L %P
2.
Code:
if "%OUTPATH%"=="" set OUTPATH=%2
if "%OUTPATH%"=="." set OUTPATH=%2
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Thu Jun 19, 2008 02:39    Post subject: Reply with quote

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

Попробуй в скрипте, там где
Code:
WshShell.Run """" & sProg & """", 1, True
написать, соответственно
Code:
WshShell.Run """" & sProg & """", 6, True
или
Code:
WshShell.Run """" & sProg & """", 0, True

PS сам не проверял...
Back to top
View user's profile Send private message
kadvlad



Joined: 26 Aug 2007
Posts: 81

Post (Separately) Posted: Thu Jun 19, 2008 12:52    Post subject: Reply with quote

Друзья,

спасибо большое всем!
На выходных обязательно попробую все предложенные варианты, о результатах отпишусь.
Wink
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page 1, 2, 3  Next
Page 1 of 3

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group