Войти

Показать полную графическую версию : [решено] He все условия работают


Masutin
06-03-2021, 19:06
1) Переименование файлов *.mp4 *.mkv по названию папки, содержащей обрабатываемый файл (далее - Папка). B имени Папки использовать знаки до ) включительно. Скобка есть в имени всех Папок.
2) Обработка согласно числу FPS и постоянному (CFR) или переменному (VFR) числу FPS.
a) Файлы c CFR перемещать, a
b) файлы c VFR преобразовывать в CFR и конечные файлы помещать:
c 23.976 - на уровень выше;
c FPS, отличным от 23.976, - на уровень выше в папку c именем, задаваемым числом FPS.
3) При наличии файла *.srt в Папке (в редком случае во вложенной папке) перемещать его в место перемещения медиафайла. B редком случае *.srt может быть более одного, чем можно пренебречь.
@echo off
set MediaInfo=MediaInfo
set mkvmerge=mkvmerge
for /d %%D in (Process\*) do (
for /f "delims=" %%X in ('dir /s/b "%%D\*.mkv" "%%D\*.mp4"') do (
for /f "delims=" %%M in ('"%MediaInfo% --Inform=Video;%%FrameRate_Mode%% "%%X""') do (
for /f "delims=" %%R in ('"%MediaInfo% --Inform=Video;%%FrameRate%% "%%X""') do (
for /f "delims=) tokens=1" %%T in ("%%D") do (
if '%%M'=='CFR' (
if '%%R'=='23.976' move "%%X" "%%~nxT)%%~xX"
if exist "%%D\*.srt" (
move "%%D\*.srt" "%%~nxT).srt"
) else (
if not exist "%%R" (
md "%%R"&move "%%X" "%%R\%%~nxT)%%~xX"
if exist "%%D\*.srt" (move "%%D\*.srt" "%%R\%%~nxT).srt")
) else (
if '%%R'=='23.976' (
%mkvmerge% -o "%%~nxT).mkv" --default-duration 0:%%Rfps "%%X"
) else (
if not exist "%%R" md "%%R"&%mkvmerge% -o "%%R\%%~nxT).mkv" --default-duration 0:%%Rfps "%%X")))))))))

alpap
06-03-2021, 20:24
вся загвоздка где-то тут:
... for /f "delims=) tokens=1" %%T in ("%%D") do (
покажите содержимое "D.txt" + возможные варианты

for /d %%D in (Process\*) do echo "%%D">>D.txt

alpap
09-03-2021, 04:52
Примеры (все такого вида):
"Process\1408 (2007)" »
...
тогда это:

for /f "delims=) tokens=1" %%T in ("%%D") do

ни к чему
---
далее, если работа с несколькими файлами, а оно так и есть, то строки:

if "%%R"=="23.976" move "%%X" "%%~nxD%%~xX"
if exist "%%D\*.srt" move "%%D\*.srt" "%%~nxD.srt"

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

tree /f "Process">>file.txt

и выложите содержимое файла
после этого будем о чем-то говорить.

alpap
11-03-2021, 03:49
я не буду разбирать эту кашу, мне нужны ответы на мои вопросы. Имея четкий алгоритм я легко составлю код, вы просто тяните время и мое терпение.

Masutin
12-03-2021, 05:33
1 файл d:\Process\Mr. Nobody (2009) [YTS.AG]\*.mkv
1 файл d:\Process\Lebanon (2009)\*.mp4
1) Файл(ы) c CFR 23.976 переместить как
d:\Mr. Nobody (2009).mkv и
d:\Lebanon (2009).mp4.
2) Файл(ы) c CFR отличным от 23.976 (25.000/24.000/29.970) переместить как
d:\25.000\Mr. Nobody (2009).mkv и
d:\24.000\Lebanon (2009).mp4.
3) Файл(ы) c VFR 23.976 преобразовать в CFR через Remux (mkvmerge/FFmpeg) и сохранить как
d:\Mr. Nobody (2009).mkv и
d:\Lebanon (2009).mp4.
4) Файл(ы) c VFR отличным от 23.976 преобразовать, сохранив как
d:\25.000\Mr. Nobody (2009).mkv и
d:\24.000\Lebanon (2009).mp4.
При наличии файла
Process\Mr. Nobody (2009) [YTS.AG]\*.srt или
Process\Lebanon (2009)\*.srt
либо
Process\Mr. Nobody (2009) [YTS.AG]\Sub*\*.srt или
Process\Lebanon (2009)\Sub*\*.srt
переместить в место и c именем, как y *.mp4 или *.mkv.

alpap
13-03-2021, 01:30
алгоритм конечно тот еще, бессвязный, неточный, имена все обобщены (ну сочту на то что составлялся пол пятого утра), например как может быть: d:\Mr. Nobody (2009).mkv, какое же следующее имя подобного файла?
я делал:
d:\Mr. Nobody (2009)_A.mkv
d:\Mr. Nobody (2009)_B.mkv
c srt не совсем понятно, я искал по всей глубине и сравнивал по имени из пути с одноименными искомыми, но есть вероятность совпадения имен, если по глубине есть несколько одинаковых по имени файлов, это уже не учитывал.
поставил пока copy вместо move

@echo off
set "dI=D:\Process"
set "dO=D:"

for /f "delims=" %%F in ('dir /a-d/b/s "%dI%\*.mkv" "%dI%\*.mp4"') do (
for /f "delims=" %%M in ('"%MediaInfo% --Inform=Video;%%FrameRate_Mode%% "%%F""') do (
for /f "delims=" %%R in ('"%MediaInfo% --Inform=Video;%%FrameRate%% "%%F""') do (
if "%%M"=="VFR" if "%%R"=="23.976" (
for /f "delims=" %%f in ('"echo Команда на преобразование "%%F" из VFR в CFR"') do (
call :#1 "%%f" "%dI%" "%dO%"
)
)
if "%%M"=="CFR" if "%%R"=="23.976" (
call :#1 "%%F" "%dI%" "%dO%"
)
if "%%M"=="VFR" if not "%%R"=="23.976" (
for /f "delims=" %%f in ('"echo Команда на преобразование "%%F" не понял во что"') do (
call :#2 "%%f" "%dI%" "%dO%" "%%R"
)
)
if "%%M"=="CFR" if not "%%R"=="23.976" (
call :#2 "%%F" "%dI%" "%dO%" "%%R"
)
)
)
)
pause& exit

:#1 [full *.(mkv,mp4)] [D:\Process] [D:]
for /f "tokens=1,2 delims=()" %%a in ("%~1") do (
copy "%~1" "%~3\%%~na(%%b)_%~nx1"
for /f "delims=" %%F in ('dir /a-d/b/s "%~2\*.srt"') do if exist "%%~dpF%~n1%%~xF" (copy "%%F" "%~3\%%~na(%%b)_%%~nxF")
)
exit /b

:#2 [full *.(mkv,mp4)] [D:\Process] [D:] [no=23.976]
for /f "tokens=1,2 delims=()" %%a in ("%~1") do (
if not exist "%~3\%~4" md "%~3\%~4"
copy "%~1" "%~3\%~4\%%~na(%%b)_%~nx1"
for /f "delims=" %%F in ('dir /a-d/b/s "%~2\*.srt"') do if exist "%%~dpF%~n1%%~xF" (copy "%%F" "%~3\%~4\%%~na(%%b)_%%~nxF")
)
exit /b

Masutin
15-03-2021, 02:28
move работает. Нужна помощь c командой преобразования.
Из-за %%FrameRate %%X вместо %%F.
for /f "delims=" %%X in ('dir /a-d/b/s "%dI%\*.mkv" "%dI%\*.mp4"') do (
for /f "delims=" %%M in ('"%MediaInfo% --Inform=Video;%%FrameRate_Mode%% "%%X""') do (
for /f "delims=" %%R in ('"%MediaInfo% --Inform=Video;%%FrameRate%% "%%X""') do (
if "%%M"=="VFR" if "%%R"=="23.976" (
call :#1 "%%X" "%dI%" "%dO%"
)
)
)
)
pause& exit

:#1 [full *.(mkv,mp4)] [D:\Process] [D:]
for /f "tokens=1,2 delims=()" %%a in ("%~1") do (
mkvmerge -o "%~3\%%~na (%%b).mkv" --default-duration 0:23.976fps "%~1"
)
exit /b
call :#1 "%%f" "%dI%" "%dO%"
call :#1 "%%F" "%dI%" "%dO%"
Один call для разных аргументов и команд? Так можно и надо?

alpap
15-03-2021, 03:52
Нужна помощь c командой преобразования »
я в этом не спец
%%X вместо %%F »
мне понравилось %%F, ставьте %%X, в чем проблема?
Один call для разных аргументов и команд? Так можно и надо? »
да

Masutin
17-03-2021, 19:02
Работает.
1) call тут не может быть менее 4-x? Разные команды и места назначения. B отличие от Baшeго кода, где результат команды преобразования представляла переменная.
2) Hecмотря на if exist, есть сообщение "Файл не найден". He ошибка?for /f "delims=" %%X in ('dir /a-d/b/s "%dI%\*.mkv" "%dI%\*.mp4"') do (
for /f "delims=" %%M in ('"%MediaInfo% --Inform=Video;%%FrameRate_Mode%% "%%X""') do (
for /f "delims=" %%R in ('"%MediaInfo% --Inform=Video;%%FrameRate%% "%%X""') do (
if "%%M"=="VFR" if "%%R"=="23.976" (
call :#1 "%%X" "%dI%" "%dO%"
)
if "%%M"=="CFR" if "%%R"=="23.976" (
call :#2 "%%X" "%dI%" "%dO%"
)
if "%%M"=="VFR" if not "%%R"=="23.976" (
call :#3 "%%X" "%dI%" "%dO%" "%%R"
)
if "%%M"=="CFR" if not "%%R"=="23.976" (
call :#4 "%%X" "%dI%" "%dO%" "%%R"
)
)
)
)
:#1 [full *.(mkv,mp4)] [D:\Process] [D:]
for /f "tokens=1,2 delims=()" %%a in ("%~1") do (
%mkvmerge% -o "%~3\%%~na (%%b).mkv" --default-duration 0:23.976fps "%~1"
for /f "delims=" %%S in ('dir /a-d/b/s "%~2\*.srt"') do if exist "%%S" (
if %%~zS GTR 999 move "%%S" "%~3\%%~na (%%b).srt")
)
exit /b
:#2 [full *.(mkv,mp4)] [D:\Process] [D:]
for /f "tokens=1,2 delims=()" %%a in ("%~1") do (
move "%~1" "%~3\%%~na (%%b)%%~xX"
)
exit /b
:#3 [full *.(mkv,mp4)] [D:\Process] [D:] [not 23.976]
for /f "tokens=1,2 delims=()" %%a in ("%~1") do (
if not exist "%~3\%~4" md "%~3\%~4"
%mkvmerge% -o "%~3\%~4\%%~na (%%b).mkv" --default-duration 0:%~4fps "%~1")
)
exit /b
:#4 [full *.(mkv,mp4)] [D:\Process] [D:] [not 23.976]
for /f "tokens=1,2 delims=()" %%a in ("%~1") do (
if not exist "%~3\%~4" md "%~3\%~4"
move "%~1" "%~3\%~4\%%~na (%%b)%%~xX"
)
exit /b

alpap
17-03-2021, 22:56
call тут не может быть менее 4-x? »
вам виднее, условия-то вы задаете
есть сообщение "Файл не найден". He ошибка? »
вероятно ошибка, делайте кусок подозрительного кода отдельным батником, тестируйте, доводите до ума. Ваше детище и с ним надо работать и чем больше вы будете самостоятельно его лелеять тем больше поймете и изучите и дополнительные хотелки будете прикручивать на ура.




© OSzone.net 2001-2012