Войти

Показать полную графическую версию : [решено] Выполнить действие для текущего файла


Страниц : [1] 2

A555555
19-09-2020, 11:47
Добрый день.
Помогите пожалуйста.

Имеется BATник выполняющий функцию слияния одноименных файлов звука .m4a и видео .mp4, например луна.mp4 склеится с луна.m4a на выходе будет луна.mkv
@ECHO OFF
for %%f in ("*.mp4") do mkvmerge.exe --output "%%f.mkv" ( "%%~nf.m4a" ) --no-audio --no-subtitles --no-attachments ( "%%f" ) --track-order 1:0,0:0
:end
Для того чтоб сработало, BATник всегда лежит в папке с этими файлами.

Очень бы хотелось сделать удаленно лежащий батник, и для него ярлык положить например в папку контекстного меню "Отправить...".
Т.е. чтоб правой кнопкой например по видеосодержащему файлу .mp4 ПКМ - Отправить - Батник и пошел процесс слияния даже если батник не лежит в текущей папке.

Если я сильно много хочу, то как вариант мне также нормальным кажется временное копирование батника в папку с текущим файлом, для которого я сделал ПКМ - Отправить - БАТник.
Т.е. лежит батник с вышеуказанным кодом на диске "c:\Program Files\K-Lite Codec Pack\Filters\ffmpeg\mkv.bat"
Ярлык для него лежит в "c:\Users\Пользователь\AppData\Roaming\Microsoft\Windows\SendTo\mkv.ink"

По случайному файлу, лежащему например в D:\Temp2\луна.mp4 (само собой и аудио файл скорее всего там лежит луна.m4a), ПКМ - Отправить - Батник
- батник копирует получается сам себя mkv.bat в эту папку с файлом (папку чтоб определяло просто как текущую, а не именно D:\Temp2\)
- выполняется
- самоудаляется из текущей папки

megaloman
19-09-2020, 13:41
A555555, @Echo Off
cls
Pushd %1 ||(Echo Folder "%~1" not correct &Pause &Exit /B 2)
CD
for %%f in ("*.mp4") do mkvmerge.exe --output "%%f.mkv" ( "%%~nf.m4a" ) --no-audio --no-subtitles --no-attachments ( "%%f" ) --track-order 1:0,0:0
Popd
Exit /BНа этот батник сделайте ярлык, например, на рабочем столе и затягивайте на него мышкой нужную папку.
Вашу строку никак не тестировал.

A555555
19-09-2020, 14:18
megaloman
Очень круто.
Можно перетягивать папку, а можно как я и хотел через контекстное "Отправить" тоже по нужной папке.

Fors1k
20-09-2020, 22:46
По случайному файлу, лежащему например в D:\Temp2\луна.mp4 (само собой и аудио файл скорее всего там лежит луна.m4a), ПКМ - Отправить »
Param(
$mkvmerge = 'C:\soft\mkvmerge.exe'
)cls

reg add HKLM\SOFTWARE\Classes\*\shell\MKVmerge\command /d "powershell.exe gci *.mp4|%%{`$mkv=`$_.Name -replace'[^\.]+$', 'mkv';`$m4a=`$_.Name -replace'[^\.]+$', 'm4a';$mkvmerge --output `$mkv (`$m4a) --no-audio --no-subtitles --no-attachments (`$_.name) --track-order 1:0,0:0}" /f

A555555
20-09-2020, 23:06
Fors1k
ошибка по всей видимости
http://forum.oszone.net/attachment.php?attachmentid=162493&stc=1&d=1600632291

ПКМ по mp4 файлу к которому нужно приклеить одноименную m4a, выбираю новый пункт mkvmerge в меню.

Fors1k
21-09-2020, 13:06
Запустил еще раз у себя. Работает без проблем.
Покажите вывод команды:
$host.Version
И вот этой:
cls
reg query HKLM\Software\Classes\*\shell\MKVmerge\command /ve

A555555
21-09-2020, 19:25
Fors1k

Покажите вывод команды: »

C:\Users\ПОЛЬЗОВАТЕЛЬ>$host.Version
"$host.Version" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.



И вот этой: »

C:\Users\ПОЛЬЗОВАТЕЛЬ>reg query HKLM\Software\Classes\*\shell\MKVmerge\command /ve

HKEY_LOCAL_MACHINE\Software\Classes\*\shell\MKVmerge\command
(по умолчанию) REG_SZ powershell.exe gci *.mp4|%{`$mkv=`$_.Name -repla
ce'[^\.]+$', 'mkv';`$m4a=`$_.Name -replace'[^\.]+$', 'm4a';$mkvmerge --output `$
mkv (`$m4a) --no-audio --no-subtitles --no-attachments (`$_.name) --track-order
1:0,0:0}

Fors1k
21-09-2020, 19:59
Вставьте и выполните код из моего первого сообщения в powershell, а не в cmd. Тогда все заработает. Только измените путь к mkvmerge.exe .

A555555
21-09-2020, 20:45
Fors1k
Мне не хватает мозгов, чтоб вашу мысль уловить.
Мои исходные данные.
mkvmerge.exe через переменные среды системы прописан в Системные переменные строка Path. Путь там с русскими буквами и пробелами.
В вашем коде путь на свой сменил, взяв путь в обычные двухчерточные кавычки.

Запускал ваш код, и привел скрин ошибки из PowerShell. Сейчас ошибка сохраняется.

Fors1k
21-09-2020, 21:32
Мне не хватает мозгов, чтоб вашу мысль уловить. »
Нажмите Win+R.
Напишите там powershell, нажмите Enter.
В открывшееся окно вставьте код, предварительно изменив в нем путь.
Param(
$mkvmerge = 'C:\soft\mkvmerge.exe'
)cls

reg add HKLM\SOFTWARE\Classes\*\shell\MKVmerge\command /d "powershell.exe gci *.mp4|%%{`$mkv=`$_.Name -replace'[^\.]+$', 'mkv';`$m4a=`$_.Name -replace'[^\.]+$', 'm4a';$mkvmerge --output `$mkv (`$m4a) --no-audio --no-subtitles --no-attachments (`$_.name) --track-order 1:0,0:0}" /f
Готово, все должно работать.

A555555
21-09-2020, 21:45
Fors1k
запустил PowerShell, вставил код, путь примерно следующий указав
'd:\Temp2\Windows и сеть\Windows установка\Обновления и настройки\MKV\MKVtoolnix\mkvmerge.exe'
оставил для пути только ваши скобки.

Получаю следующий результат.
http://forum.oszone.net/attachment.php?attachmentid=162500&stc=1&d=1600713934




megaloman
помогите пожалуйста облагородить этот код, режет все файлы с соответствующими расширениями в папке откуда запускается батник.
for %%f in ("*.m4v","*.mp4","*.mpg","*.mpeg","*.avi","*.flv","*.webm","*.mkv","*.ts","*.m2ts") do mkvmerge.exe --output "J://%%~nf/%%f" --split size:95M ( "%%f" )
избавится от привязки к конкретной папке, чтоб например можно было через ярлык SendTo запустить на любом файле.

Fors1k
21-09-2020, 23:26
Получаю следующий результат. »
Все, можете пользоваться.

megaloman
22-09-2020, 08:43
помогите пожалуйста облагородить этот код, режет все файлы с соответствующими расширениями в папке откуда запускается батник. ... избавится от привязки к конкретной папке, чтоб например можно было через ярлык SendTo запустить на любом файле. »Если "избавится от привязки к конкретной папке" - то задача решена - вместо Вашей строки из предыдущего кода (она выделена красным цветом) поставьте другую, как я понимаю, Ваш код обрабатывает все файлы в папке. Никаких изменений при этом в Вашей строке не требуется. Ежели надо обработать конкретный единичный файл (Вы как-то нечётко сформулировали мысль: то ли Вам папка надо, то ли файл)- пишите, буду думать.

A555555
22-09-2020, 19:12
megaloman
когда нужно склеить, то в папке скорее всего одни кандидаты будут и не страшно, что в ней много других фалов, одинаковость имени склеиваемых хорошо отсеивает ненужные.

А вот для случая "порезать" файл под FAT32 флешку нет особенно ограничителей типа одноименности и в итоге например в папке куда я качаю торренты может быть очень много mkv и т.п., но порезать нужно конкретный.
Просто вставив свой код в ваш, работает, но в инете особенно не принято одиночные файлы видео класть в отдельную папку при раздаче. А копировать в стронку крупные файлы или при скачивании городить каждому свою папку грустный вариант.

У меня есть украденный из интернета код под ffdshow, он перекодированием через ярлык в "Отправить" занимается именно указанного файла.
@ECHO OFF
IF %1.==. (
ECHO [-------------- SendTo FFmpeg converter ---------------]
ECHO [ NO FILE SPECIFIED ]
ECHO [------------------------------------------------------]
) ELSE (
"c:\Program Files\K-Lite Codec Pack\Filters\ffmpeg\ffmpeg.exe" -i %1 -c:v libx264 -pix_fmt yuv420p -preset slow -crf 26 -y %1_[COPY].mp4
ECHO [-------------- SendTo FFmpeg converter ---------------]
ECHO [ SERVED ]
ECHO [------------------------------------------------------]
)
:end
конечно же, как человек без знаний по этой теме, я попробовал вставить и сюда, но не прокатило.

A555555
22-09-2020, 19:38
Все, можете пользоваться. »
снова не работает.
При попытке в общей папке указать како-то файл проходится по всем отвечающим нужному расширению с ошибкой для каждого
http://forum.oszone.net/attachment.php?attachmentid=162506&stc=1&d=1600792807

Попробовал и в тепличных условиях, вынеся в отдельную папку одноименные видео и аудио для склейки, тоже не нравится
http://forum.oszone.net/attachment.php?attachmentid=162505&stc=1&d=1600792689

Fors1k
22-09-2020, 19:47
A555555, Выполните в powershell, покажите вывод еще раз.
cls
reg query HKLM\Software\Classes\*\shell\MKVmerge\command /ve

A555555
22-09-2020, 20:07
Fors1k,
уже положил программу по изначально данному вами пути, чтоб хоть этот момент с русскими буквами и пробелами не влезал
http://forum.oszone.net/attachment.php?attachmentid=162507&stc=1&d=1600794368

Fors1k
22-09-2020, 21:55
A555555,
Вывод каких-то команд лучше выкладывайте текстом, а не скриншотом.
У вас MKVmerge.exe в 'C:\soft\mkvmerge.exe' или в 'd:\Temp2\Windows и сеть\Windows установка\Обновления и настройки\MKV\MKVtoolnix\mkvmerge.exe' ?
На всякий случай покажите вывод $host.Version .

A555555
22-09-2020, 22:13
Fors1k,

На всякий случай покажите вывод $host.Version . »
Major Minor Build Revisi
----- ----- ----- ------
4 0 -1 -1


У вас MKVmerge.exe в 'C:\soft\mkvmerge.exe' или в 'd:\Temp2\Windows и сеть\Windows установка\Обновления и настройки\MKV\MKVtoolnix\mkvmerge.exe' ? »
На данный момент и там и там, но прописано вашим кодом сюда
'C:\soft\mkvmerge.exe'
чтоб точно не мешались сюда ещё пути.

Fors1k
22-09-2020, 23:58
Major Minor Build Revisi
----- ----- ----- ------
4 0 -1 -1 »
Вам нужно установить обновление: https://www.microsoft.com/en-us/download/details.aspx?id=54616




© OSzone.net 2001-2012