Кнопка для пакетной конвертации в MP3
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2, 3, 4  Next  :| |:
Total Commander -> Автоматизация Total Commander

#1: Кнопка для пакетной конвертации в MP3 Author: kadvlad PostPosted: Tue Jun 10, 2008 19:11
    —
Друзья,
Решил сделать кнопку, чтоб список выделенных файлов (директорий?) передавался в 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]

Спасибо.

#2:  Author: RodnyLocation: Могилёв, Беларусь PostPosted: Wed Jun 11, 2008 03:14
    —
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".

#3:  Author: kadvlad PostPosted: Wed Jun 11, 2008 21:20
    —
Спасибо за содействие.

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

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

Похожее решение раньше было: http://wincmd.ru/plugring/wcx_plugin_BitRate_Converter_0.html
Но в 7.03 почему-то не хочет ставиться.
Может, связаться с автором плагина?.. Сам я не разбираюсь в вопросе.

#4:  Author: RodnyLocation: Могилёв, Беларусь PostPosted: Wed Jun 11, 2008 22:36
    —
Программы-конвертеры запускают 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

#5:  Author: kadvlad PostPosted: Wed Jun 11, 2008 22:44
    —
Ага, спасибо большое! Поковыряю.
Раньше видел этот скрипт, но даже не додумался искать решение так.
Wink

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


Last edited by kadvlad on Wed Jun 11, 2008 22:53; edited 1 time in total

#6:  Author: aLexxLocation: Новокузнецк PostPosted: Wed Jun 11, 2008 22:48
    —
У меня БитРейтКонвертер пашет в полный рост! На ТС 7.03.
Я теперь даже знаю, что на Мотор нельзя больше 300 песен закачать...
А вот на плеер (4 гб памяти) музона качнулось на 200 часов!
И это только любимое...

#7:  Author: Tol!kLocation: Арзамас PostPosted: Thu Jun 12, 2008 22:48
    —
у мну 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
; ---------------------------------------------------------

#8:  Author: VolniyLocation: Местный PostPosted: Fri Jun 13, 2008 00:46
    —
kadvlad wrote:
А может, как-то приспособить команду "wait" для поочередного запуска?

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


Это мое 400-ое сообщение и, надо же, такая неглубокая мысля...

#9:  Author: kadvlad PostPosted: Fri Jun 13, 2008 01:30
    —
Друзья, спасибо, почти получилось.
В скрипте поменял три строчки с 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"

Спасибо.

#10:  Author: kadvlad PostPosted: Wed Jun 18, 2008 00:50
    —
Вот, выложил архивчик (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"


Посмотрите, пожалуйста, кто понимает.
У меня не получилось сконфигурировать настройки и перетянуть на кнопку файлы.

#11:  Author: RodnyLocation: Могилёв, Беларусь PostPosted: Wed Jun 18, 2008 03:48
    —
Сразу говорю: я мало что понимаю 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". И они действительно ничего не выводят. А непосредственно окном они не управляют.

#12:  Author: Dimych PostPosted: Thu Jun 19, 2008 00:41
    —
Вот батничек

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%) и запускает на выполнение.

#13:  Author: Dimych PostPosted: Thu Jun 19, 2008 01:00
    —
Небольшая правка:
1. Параметры кнопки %L %P
2.
Code:
if "%OUTPATH%"=="" set OUTPATH=%2
if "%OUTPATH%"=="." set OUTPATH=%2

#14:  Author: VolniyLocation: Местный PostPosted: Thu Jun 19, 2008 02:39
    —
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 сам не проверял...

#15:  Author: kadvlad PostPosted: Thu Jun 19, 2008 12:52
    —
Друзья,

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



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page 1, 2, 3, 4  Next  :| |:
Page 1 of 4

Powered by phpBB © 2001, 2005 phpBB Group