|
|
|
Albert_Wesker
  Стаж: 16 лет Сообщений: 205
|
Albert_Wesker ·
04-Июл-23 22:44
(2 года 7 месяцев назад)
Написал батник для пакетного объединения mkv и mka (видео и аудио). Файлы должны лежать в одной папке, так же измените путь до mkvtoolnix. Немного о работе скрипта: скрипт удаляет все дорожки кроме японской, добавляет новую и делает ее первой
скрытый текст
Код:
@echo off
:: НИЖЕ УКАЗАТЬ ПУТЬ ДО "mkvmerge.exe" ::
set path=D:\mkvtoolnix
echo Video: mkv, audio: mka, sub: ass. Enter - yes, N - no.
set /p ans="Answer: "
if "%ans%" EQU "" (
set vid=mkv
set aud=mka
set sub=ass
) else (
set /p vid="Video: "
set /p aud="Audio: "
set /p sub="Sub: "
) REM Удаление всех аудио дорожек
FOR %%A IN (*.%vid%) DO (
if exist "%%~NA.%aud%" (
"%path%\mkvmerge.exe" -o "!new\%%~NA.%vid%" --no-tracks "^audio" "%%A"
) else (
if exist "%%~NA.%sub%" (
"%path%\mkvmerge.exe" -o "!new\%%~NA.%vid%" --no-tracks "^audio" "%%~NA".%sub% --compression 1:none "%%A"
) else (
echo '%%~NA.%vid%' - ONLY VIDEO, SKIP!
)
)
) REM Выполнение основной части кода
FOR %%A IN (*.%vid%) DO (
if exist "%%~NA.%aud%" (
if exist "%%~NA.%sub%" (
"%path%\mkvmerge.exe" -o "!new\%%~NA".%vid% --default-track 0:yes --language 0:rus --compression 0:none "%%~NA".%aud% "%%~NA".%sub% --compression 1:none "%%A"
) else (
"%path%\mkvmerge.exe" -o "!new\%%~NA".%vid% --default-track 0:yes --language 0:rus --compression 0:none "%%~NA".%aud% --compression 1:none "%%A"
)
) else (
if exist "%%~NA.%sub%" (
"%path%\mkvmerge.exe" -o "!new\%%~NA".%vid% --default-track 0:yes --language 0:rus --compression 0:none "%%~NA".%sub% --compression 1:none "%%A"
) else (
echo '%%~NA.%vid%' - ONLY VIDEO, SKIP!
)
)
)
color 0A
echo DONE!
PAUSE
:: AlivE_and_Vano / v1.11 / 2023 ::
|
|
|
|
Adventurer_Kun
  Стаж: 13 лет 8 месяцев Сообщений: 5426
|
Adventurer_Kun ·
06-Июл-23 07:01
(спустя 1 день 8 часов, ред. 06-Июл-23 07:01)
|
|
|
|
Albert_Wesker
  Стаж: 16 лет Сообщений: 205
|
Albert_Wesker ·
06-Июл-23 09:04
(спустя 2 часа 3 мин.)
где ж вы раньше были 
еще бы знаете что... опененги пакетно вырезать... Сам использую такой код
скрытый текст
Код:
@echo off
set ffmpeg_path=D:\ger\Serial_Experiments_Lain_BDRip_720p_Hi10p_[AnimeCeh]\!new\ro\ffmpeg.exe
mkdir "crop" 2>nul for A in (*.mkv) do (
%ffmpeg_path% -i "A" -ss 00:01:56 -c copy "crop\%%A"
) echo Обрезка файлов завершена. Измененные файлы находятся в папке "crop".
pause
Проблема - черный экран пару секунд, потом картинка сыпется где то в середине. Если прописать -ss 00:01:56 вначале команды, то тайминги сбиваются -- то есть как то криво режется, не там где планировал
|
|
|
|
Adventurer_Kun
  Стаж: 13 лет 8 месяцев Сообщений: 5426
|
Adventurer_Kun ·
06-Июл-23 10:08
(спустя 1 час 3 мин., ред. 06-Июл-23 10:08)
Albert_Wesker
Если резать без перекодивания, то оно режется на местах ближайших ключевых кадров от указанного тайминга.
Можно резать скриптом что режет через mkvtoolnix, там проблем меньше с сбиванием тайминга, но режет также по ключевым кадрам.
|
|
|
|
Albert_Wesker
  Стаж: 16 лет Сообщений: 205
|
Albert_Wesker ·
06-Июл-23 12:51
(спустя 2 часа 42 мин.)
Adventurer_Kun писал(а):
скриптом что режет через mkvtoolnix, там проблем меньше с сбиванием тайминга, но режет также по ключевым кадрам.
ткните носом, не нашел
|
|
|
|
Adventurer_Kun
  Стаж: 13 лет 8 месяцев Сообщений: 5426
|
Adventurer_Kun ·
06-Июл-23 18:54
(спустя 6 часов, ред. 06-Июл-23 18:54)
Albert_Wesker
Этот скрипт надо ещё написать мне) Albert_Wesker
Запускаете и вводите время в формате 00:00:00 и нажимаете Enter.
Введя 00:01:30. Всё что дальше этого времени сохранится.
скрытый текст
Код:
@echo off set /p time= for %%f in ("*.mkv","*.mp4","*.hevc","*.avi","*.h264","*.m2ts") do "%PROGRAMFILES%\MkvToolNix\mkvmerge.exe" --output "Completed\%%~nf.mkv" ( "%%f" ) --title "%%~nf" --split parts:%time%-01:00:00 for %%f in ("*.mkv","*.mp4","*.hevc","*.avi","*.h264","*.m2ts") do "%PROGRAMFILES(x86)%\MkvToolNix\mkvmerge.exe" --output "Completed\%%~nf.mkv" ( "%%f" ) --title "%%~nf" --split parts:%time%-01:00:00
|
|
|
|
Albert_Wesker
  Стаж: 16 лет Сообщений: 205
|
Albert_Wesker ·
09-Июл-23 06:28
(спустя 2 дня 11 часов)
Adventurer_Kun
Красиво, лаконично, а я такого нагородил! Теперь можно эксперименты лейн на старом телеке посмотреть, спасибо!
|
|
|
|
ваще вася
Стаж: 16 лет 6 месяцев Сообщений: 22
|
ваще вася ·
29-Июл-23 19:00
(спустя 20 дней)
Добрый день! Правильно ли я понимаю, что при mkvextrackGui с дорожкой dts.x в коньейнере mkv "танцы сбубном" не нужны как с атмос через aec3to, что она сразу с объектами экспортируется?
|
|
|
|
ваще вася
Стаж: 16 лет 6 месяцев Сообщений: 22
|
ваще вася ·
03-Авг-23 05:02
(спустя 4 дня)
Добрый день! Правильно ли я понимаю, что при mkvextrackGui с дорожкой dts.x в коньейнере mkv "танцы сбубном" не нужны как с атмос через aec3to, что она сразу с объектами экспортируется?
|
|
|
|
isbs
  Стаж: 17 лет Сообщений: 610
|
isbs ·
03-Авг-23 11:22
(спустя 6 часов)
ваще вася писал(а):
85024089Добрый день! Правильно ли я понимаю, что при mkvextrackGui с дорожкой dts.x в коньейнере mkv "танцы сбубном" не нужны как с атмос через aec3to, что она сразу с объектами экспортируется?
Все объекты зашиты в поток как в DTSHD-MA (X), так и в DOLBY TRUE-HD (ATMOS). Никакой mkvextrackGui на них никак не повлияет.
|
|
|
|
ваще вася
Стаж: 16 лет 6 месяцев Сообщений: 22
|
ваще вася ·
08-Авг-23 05:07
(спустя 4 дня)
isbs писал(а):
85024747
ваще вася писал(а):
85024089Добрый день! Правильно ли я понимаю, что при mkvextrackGui с дорожкой dts.x в коньейнере mkv "танцы сбубном" не нужны как с атмос через aec3to, что она сразу с объектами экспортируется?
Все объекты зашиты в поток как в DTSHD-MA (X), так и в DOLBY TRUE-HD (ATMOS). Никакой mkvextrackGui на них никак не повлияет.
То есть выгружается DTS:X полноценный, хоть и в разрешении .dts? Так как Долби выгружается только труХД, поэтому проще выгружать через еас3tо в разрешение .thd+ac3.
Дело в том, что пока нет возможности проверить звук на ресивере.
|
|
|
|
isbs
  Стаж: 17 лет Сообщений: 610
|
isbs ·
18-Авг-23 21:16
(спустя 10 дней)
ваще вася писал(а):
То есть выгружается DTS:X полноценный, хоть и в разрешении .dts? Так как Долби выгружается только труХД, поэтому проще выгружать через еас3tо в разрешение .thd+ac3.
Дело в том, что пока нет возможности проверить звук на ресивере.
Вы путаете MKVextract и eac3to. Первый выгружает как есть. А второй как раз может выдернуть полноценный поток или ядро.
|
|
|
|
hoda228
Стаж: 3 года 1 месяц Сообщений: 161
|
hoda228 ·
07-Сен-23 14:18
(спустя 19 дней)
приветствую .
а что можно сделать если название файла и исходник не совпадает ?
|
|
|
|
Keynol
  Стаж: 21 год Сообщений: 7804
|
Keynol ·
07-Сен-23 14:28
(спустя 9 мин.)
hoda228
Опишите на примере, станет яснее, поможет ли скрипт
|
|
|
|
hoda228
Стаж: 3 года 1 месяц Сообщений: 161
|
hoda228 ·
07-Сен-23 19:50
(спустя 5 часов)
Keynol
хочу перепаковать сериальчик . вырезать ненужные озвучи и субтитры.
Я первый раз столкнулся с mkvtoolnix .так что освоил только пакование по одному файлу .
чаще всего серия называется по руски а исходник название на английском совсем другое.
например
файл называется - 09. Формула мести.mkv , иходный файл ставит - The Big Bang Theory - S03E09 The Vengeance Formulation.mkv
вырезать нужно две озвучки , оставить только кураж бомбей и удалить английские субтитры
Всамой программе не нашел такого чтоб все выделить и по правилу удалить заданые озвучки и сабы . даже если все скидываю в кучу то выводит в один файл
тут что то можно поделать скриптом ?
|
|
|
|
Keynol
  Стаж: 21 год Сообщений: 7804
|
Keynol ·
07-Сен-23 21:12
(спустя 1 час 21 мин., ред. 07-Сен-23 21:13)
hoda228
смотрите, все исходники надо привести к такому виду
The Big Bang Theory - S03EL.mkv
где L - номер серии.
Если серий в папке больше 9, то нужно указать это в скрипте, если больше 99 тоже. т.е. будет одно и то же название, но будет меняться ТОЛЬКО номер серии.
иначе никак Уже после получения списка измененных файлов, вручную можете из называть как душе угодно.
Но после этого скриптом если что, воспользоваться не получится.
Скрипт меняет после работы только номер серии и всё.
Названия в исходнике/результате будут одни и те же, отличия только в номере серий. Если у вас несколько сезонов с нумерацией например по 20 серий, то нужны разные папки на каждый сезон.и для скрипта нужно будет на каждый сезон прописывать путь.
либо переименовать ВСЕ серии от 01 до последней в нужном формате и свалить в одну папку и тогда скрипт зараз всё обработает.
но разделения на сезоны не будет.
|
|
|
|
hoda228
Стаж: 3 года 1 месяц Сообщений: 161
|
hoda228 ·
07-Сен-23 21:12
(спустя 23 сек., ред. 07-Сен-23 21:15)
Keynol
думаю что удобней будет все в одну папку свалить. потомучто там несколько сезонов и много файлов. попробую использовать какойто авто ренеймер есл он такое может. хотя названия серий на руском тоже не хотелось бы терять.
спасибо за совет. буду пробывать
|
|
|
|
Keynol
  Стаж: 21 год Сообщений: 7804
|
Keynol ·
07-Сен-23 21:14
(спустя 2 мин.)
hoda228
Пожалуйста 
p.s. дополнил инструкцию.
|
|
|
|
Xsive Pro
 Стаж: 18 лет 4 месяца Сообщений: 1201
|
Xsive Pro ·
27-Фев-24 03:00
(спустя 5 месяцев 19 дней)
Ребят, а какая версия является последней из классических (до редизайна), я пользуюсь 4.5.0 уже несколько лет, а начиная с какой поменялась оболочка?
|
|
|
|
teleport2222
 Стаж: 11 лет 4 месяца Сообщений: 213
|
teleport2222 ·
27-Фев-24 08:23
(спустя 5 часов)
Xsive Pro
8.3.0
Можно выбрать старый или новый дизайн установить.
|
|
|
|
chuchupikachu
Стаж: 7 лет 5 месяцев Сообщений: 9
|
chuchupikachu ·
22-Янв-26 06:54
(спустя 1 год 10 месяцев, ред. 28-Янв-26 17:47)
Спасибо за скрипт.
Если кто-нибудь столкнётся с проблемой "файл не найден", то возможно mkvtoolnix пытается переименовать выходящий файл, подтягивая новое имя из тегов. Применимо для новых версий программы. Чтобы это исправить, настройки -> Значения по умолчанию -> Автоматически устанавливать имя файла из исходных файлов (снять галочку).
Ещё скрипт не переваривает наличие круглых скобок в названиях файлов () например
[Beatrice-Raws] Bakuman. (2012) 04 [BDRip 1920x1080 HEVC FLAC].mkv
приходится переименовывать в
[Beatrice-Raws] Bakuman. [2012] 04 [BDRip 1920x1080 HEVC FLAC].mkv
Для пакетного переименования файлов и папок можно использовать программу ReNamer или Total Comander. UPD. кроме круглых скобок, смволы & и ! в названиях файлов тоже не переваривает, но в путях к файлам норм.
|
|
|
|
Adventurer_Kun
  Стаж: 13 лет 8 месяцев Сообщений: 5426
|
Adventurer_Kun ·
22-Янв-26 07:34
(спустя 40 мин., ред. 22-Янв-26 07:34)
|
|
|
|
chuchupikachu
Стаж: 7 лет 5 месяцев Сообщений: 9
|
chuchupikachu ·
23-Янв-26 10:29
(спустя 1 день 2 часа, ред. 28-Янв-26 17:45)
спасибо, попробую.
Судя по описанию, суть работы скриптов идентичена.
Есть ли какие-нибудь принципиальные отличия?
Те две сложности, которые я описал выше, скорее касаются непосредственно mkvtoolnix. (интерпретация скобок и проблемы настройки имени)
И колличество действий для запуска примерно одинаковое. Опыт использования второго скрипта оказался менее удачным.
Из минусов
-После исполнения скрипта окно закрывается и не получается ознакомиться с результатом работы. В превом скрипте окно cmd оставалось открытым и если какя-нибудь серия не спакетировалась можно было узнать доп. информацию.
-Необходимость дёргаться по поводу кодировки.
-Всегда обращать внимание, не заменил ли ты первое 01 в скрипте на %%I.
-Прогоняет лишние круги -два вида скриптов, вместо одного
-жёсткая првязка к нумерации 01,02,... (первый скрипт обрабатывает и в случае отсутствия нулей)
|
|
|
|
nujievik
 Стаж: 1 год 11 месяцев Сообщений: 199
|
nujievik ·
23-Янв-26 15:25
(спустя 4 часа)
chuchupikachu
в таком случае попробуйте и третий))
В 1 клик вшить внешние дорожки в видео
Цитата:
После исполнения скрипта окно закрывается и не получается ознакомиться с результатом работы.
фиксится запуском пустого окна cmd и вызовом скрипта непосредственно из этого пустого окна
|
|
|
|
chuchupikachu
Стаж: 7 лет 5 месяцев Сообщений: 9
|
chuchupikachu ·
24-Янв-26 17:44
(спустя 1 день 2 часа)
Спасибо, но скрипт из этой темы мне максимально зашёл. Простой и удобный. Уже обработал им 2tb из коллекции, чем значительно упростил себе жизнь.
|
|
|
|
Adventurer_Kun
  Стаж: 13 лет 8 месяцев Сообщений: 5426
|
Adventurer_Kun ·
01-Мар-26 17:45
(спустя 1 месяц 8 дней, ред. 01-Мар-26 17:45)
chuchupikachu
Сделал автономный ехе питон скрипт что автоматически заменяет 01 на переменную и сразу запускает обработку.
Там есть определённые правила для замены 01 на переменную. Ну я их под себя делал.
В основном стараюсь чтобы до 01 и после 01 стоял пробел во входных файлах.
https://disk.yandex.ru/d/R1b5rvItyfwkUQ
При запуске попросит скопировать код и после нужно нажать два раза Enter. Два раза сделано чтобы скрипт правильно отрабатывал вставку кода из множества строк.
После покажет все пути что скрипт заменил, а также пути что не заменил. Они подсвечены будут удобно чтобы убедиться что скрипт правильно отработал замену везде перед началом обработки. Серый текст указывает что замена не произошла.
А дальше уже выбираешь запускать обработку или нет.
В конце будет отчёт.
код скрипта
import re
import os
import subprocess
import sys # --- БЛОК АВТОМАТИЧЕСКОЙ УСТАНОВКИ ---
def install_requirements(modules):
"""Проверяет и устанавливает недостающие модули."""
for module in modules:
try:
__import__(module)
except ImportError:
print(f"[!] Модуль '{module}' не найден. Установка...")
try:
subprocess.check_call([sys.executable, "-m", "pip", "install", module])
print(f"[OK] Модуль '{module}' успешно установлен.")
except Exception as e:
print(f"[ERROR] Не удалось установить '{module}': {e}")
sys.exit(1) # Список необходимых расширений
install_requirements(['colorama'])
# ------------------------------------ from colorama import init, Fore, Style init(autoreset=True) def clear_console():
os.system('cls' if os.name == 'nt' else 'clear') def process_logic(text):
# Замена 01 на %I для прямой работы в CMD
pattern = r"(^| |\\)01(?=[ .]|$)"
return re.sub(pattern, r"\1%I", text) def extract_paths(text):
# Ищем всё содержимое внутри кавычек ("..." или ^"..."^)
found = re.findall(r'(?:\^"|")([^"]+?)(?:\^"|")', text)
# Фильтруем только то, что похоже на путь (содержит слэш)
paths = [item.strip() for item in found if "\\" in item or "/" in item]
return list(dict.fromkeys(paths)) # Удаление дубликатов с сохранением порядка def main():
clear_console()
print(Fore.CYAN + "=== MKV INSTANT RUNNER (v8 + AutoInstall) ===")
print(Fore.WHITE + "Вставь код и нажми " + Fore.YELLOW + "Enter дважды" + Fore.WHITE + ":\n") lines = []
while True:
try:
line = input()
if line.strip() == "" and lines:
break
lines.append(line)
except EOFError:
break if not lines:
print(Fore.RED + "Код не введен. Выход.")
return original_code = "\n".join(lines)
modified_body = process_logic(original_code) # Формируем команду (один % для прямой консоли)
header = "FOR %I IN (01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99) DO ("
full_command = f"{header} {modified_body} )" clear_console()
print(Fore.YELLOW + "=== ПОЛНЫЙ ОТЧЕТ ПО ПУТЯМ ===")
all_paths = extract_paths(modified_body) if all_paths:
for p in all_paths:
if "%I" in p:
display = p.replace("%I", Fore.GREEN + "%I" + Fore.WHITE)
print(f"{Fore.GREEN}[ЗАМЕНА]{Fore.WHITE} {display}")
else:
print(f"{Fore.WHITE}[БЕЗ ИЗМ]{Style.DIM} {p}")
else:
print(Fore.RED + "Пути не найдены.") print("\n" + Fore.CYAN + "="*65)
print(Fore.WHITE + "Запустить обработку?")
print(Fore.GREEN + "1. ДА, запуск")
print(Fore.RED + "2. Нет, отмена") choice = input("\nТвой выбор: ") if choice == '1':
print(Fore.MAGENTA + "\n[!] Запуск... Процесс отобразится ниже:\n") file_nums = [f"{n:02d}" for n in range(1, 100)]
results = [] # список (номер, успех: bool) for num in file_nums:
# Подставляем конкретный номер вместо %I
cmd_for_file = modified_body.replace("%I", num)
result = subprocess.run(cmd_for_file, shell=True)
success = (result.returncode == 0)
results.append((num, success)) # --- ИТОГОВЫЙ ОТЧЁТ ---
print("\n" + Fore.CYAN + "="*65)
print(Fore.CYAN + "=== ИТОГОВЫЙ ОТЧЁТ ПО ФАЙЛАМ ===")
print(Fore.CYAN + "="*65) ok_count = 0
fail_count = 0
for num, success in results:
if success:
print(f"{Fore.GREEN}[OK] Файл {num} — обработка прошла успешно")
ok_count += 1
else:
print(f"{Fore.RED}[ОШИБКА] Файл {num} — обработка завершилась с ошибкой")
fail_count += 1 print(Fore.CYAN + "="*65)
print(f"{Fore.GREEN}Успешно: {ok_count} {Fore.RED}Ошибок: {fail_count}")
print(Fore.CYAN + "="*65) else:
print(Fore.RED + "\nВыход отменен.") input("\nНажми Enter для завершения...") if __name__ == "__main__":
main()
Цитата:
-После исполнения скрипта окно закрывается и не получается ознакомиться с результатом работы. В превом скрипте окно cmd оставалось открытым и если какя-нибудь серия не спакетировалась можно было узнать доп. информацию.
-Необходимость дёргаться по поводу кодировки.
-Всегда обращать внимание, не заменил ли ты первое 01 в скрипте на %%I.
Это учёл в питон скрипте.
Цитата:
-Прогоняет лишние круги
Это конечно можно убрать легко.
Но бывают ситуации когда нужно или не нужно обработать определённые серии. Поэтому оставил список цифр в скрипте до 99 для редактирования. ¯\_(ツ)_/¯
Если есть какие-то предложения по улучшению скрипта пишите.
|
|
|
|