Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] 2 переменных для MP3SPLT (http://forum.oszone.net/showthread.php?t=336841)

Sisin 25-09-2018 11:32 2832804

2 переменных для MP3SPLT
 
mp3splt -c "File.cue" "Folder\File.mp3" - делит файл File.mp3 из папки Folder по File.cue из корневой папки.

Подскажите, пожалуйста, как сделать батник так, чтобы после обработки разделенные файлы сохранялись в папке Folder2??

PS: Нужен батник вида: for %%a in (Folder\*.mp3) do (

YuS_2 25-09-2018 12:11 2832810

Sisin,
Вы лучше не решение подсказывайте, а полностью задачу опишите
Что находится в каталоге Folder, кроме разрезанных файлов?
Все ли файлы .mp3 требуется перенести из Folder в Folder2?
В общем, если подробнее опишете задачу, то получите более точное решение.

Sisin 25-09-2018 12:27 2832815

Цитата:

Цитата YuS_2
Что находится в каталоге Folder, кроме разрезанных файлов?
Все ли файлы .mp3 требуется перенести из Folder в Folder2?
В общем, если подробнее опишете задачу, то получите более точное решение. »

В каталоге Folder - 1 файл File.mp3 (Это файл копия всего AudioCD, которую надо поделить на композиции с помощью mp3splt)
Надо, чтобы поделенные файлы были в Folder2.

Elven 25-09-2018 15:51 2832846

для этого нужно знать как работает этот самый mp3split. двухминутного чтения хелпа хватило бы для того чтобы найти параметры -o и -d
Скрытый текст
Код:

-o FORMAT
Output format. FORMAT is a string that will be used as output directory and/or filename. If FORMAT contains the DIRCHAR character ('\' on windows and '/' on other systems), directories will be created for each DIRCHAR if they don't exist and the output files will be created in the corresponding directory. If the -d option is not specified, the output directory is the concatenation of the input file directory and the extracted path from FORMAT. If the -d option is also specified, the output directory will be the concatenation between the -d option value and the extracted path from the -o FORMAT (characters up to the last DIRCHAR). Invalid filename characters from the tags are transformed to '_'.
It can contain name variables, that must begin with @ char and that can be:

@A: performer if found, otherwise artist
@a: artist name
@p: performer of each song (only with .cue)
@b: album title
@g: genre
@t: song title*
@n: track number identifier* (not the real ID3 track number)**
@N: track tag number**
@l: track number identifier as lowercase letter* (not the real ID3 track number)**
@L: track tag number as lowercase letter**
@u: track number identifier as uppercase letter* (not the real ID3 track number)**
@U: track tag number as uppercase letter**
@f: input filename (without extension)
@m, @s or @h: the number of minutes, seconds or hundreths of seconds of the start splitpoint**
@M, @S or @H: the number of minutes, seconds or hundreths of seconds of the end splitpoint**

(**) One digit may follow defining the number of digits to output.
If the digit is 0, then a special rule is applied when the pattern value is equal to 0:
- the pattern is discarded
- all characters like : _ . and -. preceding it are discarded
- all characters following it are discarded up to the next @ or a separator like : _ . and -
This rule is useful for discarding the last part of the time when equal to 0. For example @m_@s_@h0hundreths__@M_@S will only output @m_@s__@M_@S if the hundreths of seconds are 0.

When split files are more than one, at least one of @t, @n, @N, @l, @L, @u or @U (*) must be present to avoid ambiguous names. You can put any prefix, separator, suffix in the string, for more elegance. To make easy the use spaces in output filename without interfering with line parameters, you can use the char '+' that will be automatically replaced with a space. Valid examples are:

@n_@a_@b_@t
@a+-+@n+-+@t (default if using -c and -o is not specified)
@a/@b/@t_@n (will create the directories '<artist>' and '<artist>/<album>')
@f_@n+@m:@s+@M:@S

-d NAME
Output directory. To put all output files in the directory named NAME. If directory does not exists, it will be created. The -o option can also be used to output files into a directory.


как результат конечный батник (хотя какой там батник если ванлайном все делается) может выглядеть приблизительно так:
Код:

forfiles /P folder\ /m "*.mp3" /c "mp3split -c file.cue @path -d folder2\"
все это весьма приблизительно, да непонятно зачем, там же гуи есть, и морочиться ради одного файла даже не понимаю зачем.

Sisin 25-09-2018 16:02 2832847

Цитата:

Цитата Elven
морочиться ради одного файла даже не понимаю зачем. »

И я тоже не понимаю))

Смысл был в том, что File.mp3 и File.cue - это 2 переменные!!!

Какой смысл делать:
Код:

forfiles /P folder\ /m "*.mp3" /c "mp3split -c file.cue @path -d folder2\"
если file.cue надо вводить вручную??

Elven 25-09-2018 16:18 2832848

О, становится интереснее, а теперь внимание вопрос: как соотнести cue с нужным mp3?

Sisin 25-09-2018 16:22 2832849

Цитата:

Цитата Elven
О, становится интереснее, а теперь внимание вопрос: как соотнести cue с нужным mp3? »

У MP3 и CUE - одинаковые названия (поэтому написано File.cue и File.mp3)

Elven 25-09-2018 16:36 2832854

Код:

for /f %i in ('dir /b /a:-d "*.mp3"') do mp3splt -c "%~ni.cue" "Folder\%~ni.mp3" -d "folder2\%~ni"
все равно ванлайном. код для запуска из консоли, если превращать в батник критично - заменить % на %%. ну и пути тоже выставить, соответственно.

Sisin 25-09-2018 16:52 2832860

Все работает, благодарю)

А можно ли как-то обойти проблему с длинными именами с пробелами в названии?? Т.е. если название вида "Имя Артиста - 77 - Юбилейный альбом CD1", то батник не работает, а если просто "CD1", то все ОК.

Iska 25-09-2018 17:10 2832865

Цитата:

Цитата Sisin
Т.е. если название вида "Имя Артиста - 77 - Юбилейный альбом CD1", то батник не работает, »

Какой именно «батник»? Что значит — «не работает»? Если «ручками» набрать команду mp3splt в консоли с этими именами (разумеется, обрамлёнными кавычками) — команда отработает?

Elven 25-09-2018 17:20 2832869

это скорее не с длинными именами а с кириллицей. по идее кодировка должна спасти (866). проблема пробелов решается кавычками. еще есть вариант что сама тулза не умеет работать с кириллицей, тогда остается только один извратный вариант - переименовывать исходные файлы, обрабатывать и переименовывать обратно, но я за написание такого точно не возьмусь, ибо хоть и умею наслаждаться извращениями, но вотэтовот явный перебор.

Iska 25-09-2018 17:28 2832873

Elven, а где там кодировка-то может влиять? В Вашем коде я таких мест не вижу, везде гольный ASCII. Кавычки в нужных местах также наличествуют. Так что, скорее, именно это:
Цитата:

Цитата Elven
еще есть вариант что сама тулза не умеет работать с кириллицей »

(есть такая частая проблема с импортными, портированными из мира Unix, утилитами) хотя в данном случае я и не проверял (поскольку коллега Sisin не выложил образцов для тестирования).

Elven 25-09-2018 17:39 2832876

Цитата:

Цитата Iska
образцов для тестирования »

А я не сомневался что где-то это всплывет.
Цитата:

Цитата Iska
где там кодировка-то может влиять? »

например при указании пути в теле батника, я, конечно, обошелся без кириллицы, но гарантировать что Sisin сделал так же не могу.

Iska 25-09-2018 17:53 2832878

Цитата:

Цитата Elven
например при указании пути в теле батника, я, конечно, обошелся без кириллицы, но гарантировать что Sisin сделал так же не могу. »

Это да. Я потому и спрашиваю у него — «какой именно «батник»?».

Sisin 26-09-2018 10:32 2832937

Цитата:

Цитата Iska
Это да. Я потому и спрашиваю у него — «какой именно «батник»?». »

Вот такой:
Код:

@echo ON
md fix
for %%a in (*.flac) do (
ffmpeg -i "%%~a" ^
-ab 320k ^
-map_metadata 0 ^
-id3v2_version 3 ^
"fix\%%~na.mp3"
)
for /f %%i in ('dir /b /a:-d "fix\*.mp3"') do (
MP3SPLT\mp3splt -c "%%~ni.cue" "fix\%%~ni.mp3" -d "fixed\%%~ni"
)
del /q fix
rd /q fix
pause

Цитата:

Цитата Iska
Если «ручками» набрать команду mp3splt в консоли с этими именами (разумеется, обрамлёнными кавычками) — команда отработает? »

Работает. Проверил. (http://prdownloads.sourceforge.net/m...2.6.2_i386.zip)

А при запуске "батника" в конце видим:



При условии названий:
Имя Артиста - 77 - Юбилейный альбом CD1.cue
Имя Артиста - 77 - Юбилейный альбом CD1.flac
Имя Артиста - 77 - Юбилейный альбом CD1.mp3

YuS_2 26-09-2018 11:37 2832943

Цитата:

Цитата Sisin
при запуске "батника" в конце видим: »

1. Сохраните батник в кодировке cp866
2. Вот эту часть:
Код:

for /f %%i ...
надо заменить на такую:
Код:

for /f "delims=" %%i ...

Sisin 26-09-2018 13:51 2832952

Код:

@echo ON
md fix
for %%a in (*.flac) do (
ffmpeg -i "%%~a" ^
-ab 320k ^
-map_metadata 0 ^
-id3v2_version 3 ^
"fix\%%~na.mp3"
)
for %%i in ("fix\*.mp3") do (
MP3SPLT\mp3splt -c "%%~ni.cue" "fix\%%~ni.mp3" -d "fixed"
)
del /q fix
rd /q fix
pause

Так все работает как надо.
Всем спасибо)

PS: Проблема была в fixed\%%~ni. Программа создает имя и путь в другой кодировке или что-то вроде того.
Лучше выбрать путь меньшего сопротивления)))

Iska 26-09-2018 17:37 2832987

Sisin, проблема была в пробелах в пути/имени файла, а не в кодировке.

YuS_2 26-09-2018 19:56 2833009

Цитата:

Цитата Sisin
Так все работает как надо.
Всем спасибо)
PS: Проблема была в fixed\%%~ni. Программа создает имя и путь в другой кодировке или что-то вроде того. »

Вы спрашивали советы для того, чтобы в итоге не прислушиваться к ним и выдать свою, причем неправильную версию? Отличный подход! :)
На досуге поэкспериментируйте:
В каталоге, где расположено это "безобразие":
Цитата:

Цитата Sisin
При условии названий:
Имя Артиста - 77 - Юбилейный альбом CD1.cue
Имя Артиста - 77 - Юбилейный альбом CD1.flac
Имя Артиста - 77 - Юбилейный альбом CD1.mp3 »

откройте консоль cmd и запустите сначала это:
Код:

for /f %i in ('dir /b/a-d') do @echo.%i
затем вот это:
Код:

for /f "delims=" %i in ('dir /b/a-d') do @echo.%i
PS Проанализируйте оба результата...

Sisin 27-09-2018 10:32 2833094

Цитата:

Цитата YuS_2
PS Проанализируйте оба результата... »

Согласен, Ваш вариант правильный.

Sisin 27-09-2018 10:52 2833098

А как тогда добавить несколько расширений в конструкцию:

Код:

for /f "delims=" %%i in ('dir /b /a:-d "fix\*.mp3"') do (
Я бы написал for %%i in (*.mp3;*.mp4) do ( и кое как бы работало)))

YuS_2 27-09-2018 11:54 2833103

Цитата:

Цитата Sisin
как тогда добавить несколько расширений в конструкцию »

Код:

pushd "fix"
for /f "delims=" %%i in ('dir /b/a-d "*.mp3" "*.mp4"') do (
...
)
popd



Время: 21:28.

Время: 21:28.
© OSzone.net 2001-