|
с разрешения димона
Стаж: 10 месяцев Сообщений: 14
|
с разрешения димона ·
05-Сен-24 11:58
(5 месяцев 13 дней назад, ред. 09-Фев-25 16:20)
UPD 09.02
Как этим пользоваться
- Скачайте исполняемый файл (.exe) для Windows x64 или универсальный набор скриптов (.pyz).
- Если используете набор скриптов, установите зависимости.
- Запустите в директории, содержащей видео или внешние файлы.
Поведение по умолчанию можно изменить, настроив файл конфигурации или передав аргументы командной строки.
В частности, можно не копировать скрипт в директорию с файлами, а просто передать ее в качестве аргумента:
Код:
merge-tracks-with-video.exe "директория с файлами"
Возможности
- Работает в Windows, GNU/Linux. Должен работать в macOS и BSD.
- Создает объединенный MKV контейнер без перекодирования дорожек.
- Находит файлы для объединения:
- по частичному совпадению имени файла с именем видео
- в родительских директориях стартовой директории
- в поддиректориях директории видео
- Объединяет линкованное (mkv segment linking) видео.
- Позволяет обрезать часть MKV видео (для MKV с chapters).
- Ретаймит аудио и субтитры для объединенного линкованного или обрезанного видео, чтобы не было рассинхрона.
- Выставляет кодировку для нераспознанных в UTF субтитров.
- Называет дорожки аудио и субтитров по хвосту их имени ИЛИ по имени директории. (Исходное название, если оно есть, копируется без изменений).
- Устанавливает язык дорожек аудио и субтитров по ключевым словам в пути к файлам. (Исходный флаг языка также копируется без изменений).
- Устанавливает язык системной локали приоритетным для сортировки дорожек и сортирует дорожки.
- Проставляет Forced, Default, Enabled флаги на основании сортировки дорожек.
- Добавляет шрифты для субтитров в контейнер.
- Сортирует все шрифты по имени. (В том числе уже имевшиеся в контейнере до объединения).
- Пропускает нераспознанные mkvmerge файлы и chapters.
- Поддерживает любые опции, поддерживаемые mkvmerge.
- Позволяет задать опции объединения для всех файлов в директории, для групп файлов и для отдельных файлов.
Поведение скрипта зависит от стартовой директории и переданных опций (необязательная настройка).
Режим по умолчанию
- Стартовая директория и директория сохранения - текущая рабочая директория.
- Файлы для объединения ищутся в 3 родительских директориях и в поддиректориях стартовой директории.
- Если старт в директории:
- видео - все найденные дорожки ДОБАВЛЯЮТСЯ к исходным
- внешних файлов - исходные дорожки ЗАМЕНЯЮТСЯ найденными
- Если старт в директории:
- внешних аудио - ищется 1 штука внешних субтитров (приоритет поиск надписей)
- внешних субтитров - оригинальное аудио сохраняется
- Сортируются дорожки в выходном файле в несколько уровней:
- Видео > Аудио > Надписи > Субтитры
- Forced (True > None > False, где True и False - заданные вручную значения, а None - не задано)
- Default (True > None > False)
- Enabled (True > None > False)
- Локализованная дорожка > Неопределенные языки > Другие языки > Японская дорожка
- Дорожка из файла с надписями > Дорожка из файла без надписей
- Проставляются Forced, Default, Enabled флаги:
- Forced для всех отключено
- Default включено для одной дорожки каждого типа (первой в сортировке). Если локализованная аудиодорожка установлена Default или Default установлена аудиорожка на языке субтитров, то Default для субтитров выключено
- Enabled для всех включено
- Имя выходного файла ставится имя видео + суффикс что сделано (_added_audio, _replaced_subs и т.п.)
- Линкованное видео разделяется на части, части записываются на диск и потом объединяются.
Работа с линкованным видео
По умолчанию линкованное видео записывается на диск сначала по частям, потом из этих частей собирается целое видео. Фактически перезаписывается в 2 раза больший объем диска, чем весит итоговое видео.
Чтобы снизить трату дискового ресурса, можно отрезать прилинкованные видео части (обычно это опенинг и эндинг). Тогда промежуточные части записываться не будут, будет сразу писаться итоговое видео. Сделать это можно с помощью флага:
Код:
python merge-tracks-with-video.pyz -linking
Режим переназначения опций
Активируется передачей аргументов командной строки или настройкой файла конфигурации. Непереданные опции остаются на дефолтных значениях. Формируемая mkvmerge команда включает все неотключенные вручную опции.
Pro режим
Активируется установкой +pro флага. Отключает сортировку шрифтов для шрифтов в контейнере видео. Формирует чистую mkvmerge команду без опций mkvmerge -o outfile file1 file2 file3. Можно комбинировать с режимом переназначения, в частности включать в команду убранные опции.
Файл конфигурации
- Должен располагаться в текущей рабочей директории.
- Имеет более низкий приоритет над аргументами командной строки. (При указании значения опции в файле конфигурации и в аргументе командной строки приоритет будет отдан последнему).
- Примеры синтаксиса и закомментированные значения опций перечислены в файле конфигурации.
- Чтобы изменить значение опции в файле конфигурации, нужно раскомментировать строку и изменить значение справа.
Аргументы командной строки
- Имеют приоритет над опциями в файле конфигурации. (При указании значения опции в файле конфигурации и в аргументе командной строки приоритет будет отдан последнему).
- Если аргумент не распознан, выполнение завершается.
- Аргументы можно передавать с разным синтаксисом.
- допустимы префиксы +, -, --, --no-, --save- для поддерживаемых вне -target= аргументов.
- для неподдерживаемых вне -target= нужно соблюдать синтаксис опций mkvmerge.
|
|
Lexo666
![Старожил](https://static.rutr.life/ranks/oldbie_2.gif) ![](https://static.rutr.life/avatars/3/4/18423904.gif) Стаж: 14 лет 6 месяцев Сообщений: 960
|
Lexo666 ·
05-Сен-24 12:07
(спустя 9 мин.)
Зачем, когда плеер и так подхватывает внешнюю дорожку?
|
|
с разрешения димона
Стаж: 10 месяцев Сообщений: 14
|
с разрешения димона ·
05-Сен-24 12:25
(спустя 18 мин.)
Lexo666
Не все смотрят с компа
|
|
Lexo666
![Старожил](https://static.rutr.life/ranks/oldbie_2.gif) ![](https://static.rutr.life/avatars/3/4/18423904.gif) Стаж: 14 лет 6 месяцев Сообщений: 960
|
Lexo666 ·
05-Сен-24 12:26
(спустя 59 сек.)
с разрешения димона
Проблемы любителей TV...
|
|
Haru
![](https://static.rutr.life/avatars/5/67/28077167.jpg) Стаж: 12 лет 6 месяцев Сообщений: 4287
|
Haru ·
05-Сен-24 14:29
(спустя 2 часа 3 мин.)
с разрешения димона писал(а):
86667714Предлагаю ложить этот скрипт в директории с внешним аудио, чтобы облегчить жизнь трудящимся, которые затрудняются это сделать самостоятельно.
Всего лишь 20-25 дополнительных Кбайт к каждой папке с внешним аудио за уменьшение количества хейта и нытья!
Отказано. Это лишний файл, ещё и потенциально опасный скрипт, который производит установку файлов из сети.
с разрешения димона писал(а):
86667714Написал скрипт
Можете коротко объяснить отличия от этого и того? Я-то понимаю, но интересно ваше объяснение.
|
|
с разрешения димона
Стаж: 10 месяцев Сообщений: 14
|
с разрешения димона ·
05-Сен-24 20:46
(спустя 6 часов, ред. 05-Янв-25 18:19)
скрытый текст
Haru писал(а):
86668136потенциально опасный скрипт, который производит установку файлов из сети.
Данную функцию можно вырезать. В Linux скрипте скачивания нет.
Сейчас установка требует явного согласия пользователя вводом "yes" или "y" с клавиатуры, без согласия ничего не скачивается. Считаю такой подход этичным. Но вы правы в том, что я не могу отвечать за безопасность скачиваемого исполняемого файла с github, оно на совести разработчика.
Haru писал(а):
86668136Можете коротко объяснить отличия от этого и того
В указанных скриптах:
- Требуется помещение видео в одну папку с аудио (мой находит видео и в директориях выше)
- В случае нахождения аудио в другой директории требуется ввод пути к директории аудио (у меня другой подход, предполагается что скрипт лежит в папке с аудио, а не с видео, но путь к видео в другой директории вводить не требуется)
- Требуется ввод расширения аудиофайлов (в моем не требуется)
- Не требующий ввода расширения аудио скрипт обрабатывает только аудио в .mka
- Меньше список поддерживаемых расширений
- Нельзя задать ограничение на количество обрабатываемых файлов
- Поддерживается работа с субтитрами (в моем в настоящий момент нет)
- Нет Linux версии
В целом же можно сказать, что мой скрипт можно просто ложить в папку аудио для раздач с текущей структурой (где видео находится в каталогах выше аудио). И он будет работать. Никаких дополнительных путей, расширений вводить не надо будет.
Единственное, что нужно - это ffmpeg по пути %USERPROFILE%\Downloads\ffmpeg-master-latest-win64-gpl\bin\ffmpeg.exe. И то в настоящий момент поддерживается его скачивание. Так что все должно работать просто при запуске батника, без скачивания и распаковки ffmpeg вручную.
|
|
Haru
![](https://static.rutr.life/avatars/5/67/28077167.jpg) Стаж: 12 лет 6 месяцев Сообщений: 4287
|
Haru ·
05-Сен-24 21:42
(спустя 55 мин.)
с разрешения димона писал(а):
86669513Данную функцию можно вырезать.
Основная проблема в том, что скрипт — это автоматизация какого-то процесса, который может нанести вред. Я верю вам, что в вашем скрипте ничего плохого нет, но я не верю релизеру, который может заменить ваш скрипт на что угодно. В качестве отдельной темы, F.A.Q — это можно устроить, да. Выглядит полезно. Но не в составе раздачи.
С таким же успехом, в состав раздачи необходимо включать плеер, проводник и прочее. Не забывайте, что здесь раздаётся аниме, а не программы для их просмотра.
с разрешения димона писал(а):
86669513Поддерживается работа с субтитрами
Ну вот и первое предложение. Многие стараются делать субтитры-надписи, а скрипт их игнорирует.
с разрешения димона писал(а):
86669513ffmpeg по пути
Тоже мелкая проблема. Обычно ffmpeg проще в path один раз прописать, так и будет у тех, кто им часто пользуется.
Но мы тут всё-таки о новичках рассуждаем, да.
с разрешения димона писал(а):
86669513Меньше список поддерживаемых расширений
Mkvtoolnix вроде бы не так уж мало поддерживает форматов.
Промежуточные итоги:
Скрипт выглядит полезным, но надо доработать.
Основная проблема в том, что сколько бы скриптов не писали, как бы жизнь смотрящим не упрощали, то итог будет всегда негативный: «Зачем мне что-то качать? Почему не могу посмотреть? Я качаю с очков и тут нет скриптов!». Мысль, думаю, вы понимаете.
Скрипт проверим, если всё ок, то подумаем над включением его в какой-то единый пост со всеми полезностями.
|
|
Haru
![](https://static.rutr.life/avatars/5/67/28077167.jpg) Стаж: 12 лет 6 месяцев Сообщений: 4287
|
Haru ·
10-Сен-24 10:51
(спустя 4 дня)
с разрешения димона, попробовал ваш скрипт. Нюансы были ясны уже из вашего текста, теперь просто наглядно подтвердил их.
- На моих внешних файлах он не может найти видео и сопоставить их с аудио. Как вы и написали: «имена аудио- и видеофайлов совпадают за исключением расширения». Т. е. пользователь должен всё равно руками переименовывать/копировать дорожки. Легче не стало.
Всё из-за того, что аудио у меня подписаны таким шаблоном:
Код:
Ramen Aka Neko - 01 [WEB-DL CR 1080p AVC AAC].AniLibria.mka
А видео, очевидно, не имеет уточнения:
Код:
Ramen Aka Neko - 01 [WEB-DL CR 1080p AVC AAC].mkv
Получаю закономерный ответ от скрипта:
- Как уже писал выше, ваш скрипт заменяет аудио и не учитывает субтитры (и шрифты), тем самым он бесполезен для тех, кто смотрит JAP+Sub на приставках/тв и прочих устройствах без поддержки внешних файлов.
На данный момент, то спорный скрипт. На примере Онгоинги (HD Video) мы видим такую статистику:
Всего 60 релизов и 15 авторов, из них: 6 авторов сделали раздачи с внешними файлами. 32 релиза содержат внешние файлы:
- 24 релиза сделаны с внешним аудио.
- 8 релизов имеют только внешние русские субтитры
Что примерно 50%. С учётом вышенаписанного, то ваш скрипт даже эти 50% не может обработать так просто, как вам того хотелось бы.
В масштабах всего раздела, то мы можем говорить примерно о такой же статистике (очень условно, конечно), исключая линковку. Ваш скрипт успешно её игнорирует и собирает бесполезный файл с большим рассинхроном.
|
|
с разрешения димона
Стаж: 10 месяцев Сообщений: 14
|
с разрешения димона ·
13-Сен-24 23:50
(спустя 3 дня, ред. 05-Янв-25 18:18)
скрытый текст
v0.2
Концепция та же. Закидываете в папку к аудио или к сабам, с которыми хотите сгенерировать видео. Запускаете.
- Для случаев без шрифтов скрипт умеет сам устанавливать ffmpeg.
- Для шрифтов требуется ручная установка mkvmerge (mkvtoolnix). Установите в любую директорию и пропишите в системный PATH. Или положите по пути:
Код:
%USERPROFILE%\Downloads\mkvtoolnix\mkvmerge.exe
Добавлено
- Поиск по частичному совпадению имени.
Теперь скрипт сопоставляет файлы типа X.ext1 и XY.ext2. Необходимо, чтобы имя одного из двух файлов включало в себя имя другого без расширения. Т.е. приведенный выше пример обработается корректно:
Код:
Ramen Aka Neko - 01 [WEB-DL CR 1080p AVC AAC].AniLibria.mka
Ramen Aka Neko - 01 [WEB-DL CR 1080p AVC AAC].mkv
- Поддержка субтитров.
- У пользователя запрашивается, нужно ли искать субтитры. По умолчанию ищутся.
- Если скрипт запущен в директории аудио, субтитры будут заменены вместе с аудио.
- Если скрипт запущен в директории аудио приоритетно ищутся надписи.
- Если скрипт запущен в директории субтитров, будут заменены только субтитры. Аудио заменяться не будет.
- Если скрипт запущен в директории субтитров обрабатываться будут только субтитры в директории скрипта.
- Субтитры ищутся в директории скрипта, в поддиректориях по запросам для поиска, в директории видео, в поддиректориях по запросам для поиска.
- Поддержка шрифтов.
- Вместе с субтитрами в контейнер добавляются шрифты, если они есть.
- Шрифты ищутся в директории скрипта, в поддиректориях по запросам для поиска, в директории субтитров, в поддиректориях по запросам, в поддиректориях родительской директории субтитров.
- Для добавления шрифтов необходим mkvmerge в PATH или по пути %USERPROFILE%\Downloads\mkvtoolnix\mkvmerge.exe
- Поддержка добавленных в PATH программ
- Теперь не требуется скачивание ffmpeg и ffprobe в Downloads, если они прописаны в PATH.
- Функции поиска директорий
- Вспомогательные функции для работы скрипта.
- Ищут директории субтитров и шрифтов по частичному совпадению имени к запросу.
- Пользователь с ними не взаимодействует. Шаблоны поиска прописаны в файле скрипта.
Что планируется добавить
- Скачивание mkvmerge аналогично ffmpeg.
- Шаблоны поиска из нескольких слов.
- Сейчас в строке поиска прописано несколько запросов из одного слова. Из-за этого возможны ошибки.
- Если в шаблоне поиска Sub а в релизе несколько директорий с Sub, например, ENG Subs и RUS Subs, то скрипт перейдет в первую найденную директорию - в ансаб. И будет добавлять ансабы в данном случае.
- На текущий момент для таких релизов закидывайте сабы в директорию к аудио. Или запускайте скрипт из директории сабов (аудио не будет заменяться).
С линкованным видео не работает! Поддержку линкованного видео пока не представляю как реализовать.
|
|
Adventurer_Kun
![Top Seed 01* 40r](https://static.rutr.life/ranks/s_topseed_1.gif) ![](https://static.rutr.life/avatars/5/36/27425036.jpg) Стаж: 12 лет 7 месяцев Сообщений: 5042
|
Adventurer_Kun ·
14-Сен-24 07:51
(спустя 8 часов)
Цитата:
%USERPROFILE%\Downloads\mkvtoolnix\mkvmerge.exe
Добавить дополнительные директории как ниже можно дополнительно?
Ну это самые ходовые если у человека стоит MkvToolNix
Код:
"%PROGRAMFILES%\MkvToolNix\mkvmerge.exe"
"%PROGRAMFILES(x86)%\MkvToolNix\mkvmerge.exe"
|
|
с разрешения димона
Стаж: 10 месяцев Сообщений: 14
|
с разрешения димона ·
14-Сен-24 12:40
(спустя 4 часа, ред. 05-Янв-25 18:18)
скрытый текст
Adventurer_Kun
Добавил. v0.2.1
Обновил прикрепленный файл в стартовом посте.
Теперь скрипт умеет работать с mkvmerge.exe в стандартных директориях:
Код:
"%PROGRAMFILES%\MkvToolNix\mkvmerge.exe"
"%PROGRAMFILES(x86)%\MkvToolNix\mkvmerge.exe"
|
|
Haru
![](https://static.rutr.life/avatars/5/67/28077167.jpg) Стаж: 12 лет 6 месяцев Сообщений: 4287
|
Haru ·
14-Сен-24 15:12
(спустя 2 часа 31 мин.)
с разрешения димона, попробовал обновлённый скрипт. Сейчас уже похоже на то, что можно «мозг» отключить и одной кнопкой всё сделать.
с разрешения димона писал(а):
86701327С линкованным видео не работает! Поддержку линкованного видео пока не представляю как реализовать.
Это я, конечно, в общем плане писал. Сейчас линковка в разделе запрещена, но будет интересно, если вы сможете это реализовать, если честно. Раздач с линковкой много.
Протестирую ещё ваш скрипт. Благодарю за доработку.
|
|
Adventurer_Kun
![Top Seed 01* 40r](https://static.rutr.life/ranks/s_topseed_1.gif) ![](https://static.rutr.life/avatars/5/36/27425036.jpg) Стаж: 12 лет 7 месяцев Сообщений: 5042
|
Adventurer_Kun ·
16-Сен-24 09:10
(спустя 1 день 17 часов, ред. 16-Сен-24 09:10)
ещё можно добавить расширения аудио.
Код:
wav, dts, truehd, ec3, dtshd, mp2, mpa, eac3
А также видео.
Цитата:
set "VIDEO_EXTENSIONS=mkv mp4 avi m4a mpeg mpg ts webm mov flv"
Цитата:
set "AUDIO_EXTENSIONS=mka m4a mp4 aac ac3 flac mp3 ogg opus mov flv"
Мне вот интересно это не приведёт ли к каким-то конфликтам?
Хотя ни разу не видел в аниме разделе чтобы озвучки в mp4 были, тем более в mov, как и видео в m4a.
ну и насчёт разговора о добавления скрипта в раздачи, такое точно не разрешат, но вот стоит упростить некоторые вещи для обычного пользователя.
скрипту не хватает уже сканирование всех папок с озвучками, субтитрами и потом вшитием их всех в видео (либо выбором из какой подпапки вшить озвучку, субтитры), в идеале скрипт должен находиться возле видео, а ещё чтобы он имена дорожкам внутри контейнера давал исходя из названия папки в которой находиться озвучка (субтитры), такие имена как Sound, Sounds, RUS Sounds можно добавить в чёрный список имён.
В целом я давно размышлял о таком универсальном скрипте что вшивает сразу все дороги аудио, субтитры и шрифты. Только у меня пока умения нет написать такое сложное. (Хотя может напишу, уже сложные скрипты немного научился) Ну и лень немного такое делать ![](https://static.rutr.life/smiles/icon_smile.gif)
Из последнего сложного писал фандаб команде скрипт что вшивает внешнюю обложку в видео и кодирует 2 версии видео для разных хостингов, применяя определённые настройки кодирования исходя из размера входного видео. И там по мелочи всякие доп штуки.
скрытый текст
@echo off rmdir /s /q "C:\Temp" > NUL 2>&1 :: cls
echo Поместите в папку рядом со скриптом файлы:
echo 1) Видео в формате MKV,MP4,AVI
echo 2) Субтитры в формате ASS
echo 3) Обложку в формате PNG,JPG,JPEG echo. ::
echo.
echo Введите название выходного видео и нажмите Enter.
echo.
set /p name= :: mkdir "C:\Temp\" > NUL 2>&1
(attrib +h "C:\Temp" 2>&1) setlocal set "скрипт_директория=%~dp0" if not exist "%скрипт_директория%*.ass" ( "%~dp0\Resources\ffplay.exe" -autoexit -nodisp -loglevel panic "%~dp0\Resources\error.wav"
echo ┌──────────────────────────────────────────────────────────────────────┐
echo │ Внимание, файл ASS с надписями не найден в папке. │
echo │ Закройте окно и поместите в папку надписи и снова запустите скрипт. │
echo │ Либо нажмите Enter для продолжения работы скрипта без надписей. │
echo └──────────────────────────────────────────────────────────────────────┘
echo. copy "%~dp0\Resources\Temp.ass" "C:\Temp\Temp.ass" > NUL 2>&1 pause
cls 7
echo ┌───────────────────────────────────────────┐
echo │ Выбрано кодирование видео без надписей. │
echo └───────────────────────────────────────────┘
echo. ) else (
echo.
) :: mkdir "%~dp0\Completed" > NUL 2>&1 copy "%~dp0\Resources\Telegram.txt" "C:\Temp\Telegram.txt" > NUL 2>&1 ::
cls
echo Выбрано имя выходного файла: %name%
echo Подготовка видео и определение настроек кодирования. for %%f in ("*.mp4","*.mkv","*.avi") do (
"%~dp0\Resources\MKVToolNix\mkvmerge.exe" --output "C:\Temp\Temp.mkv" --no-subtitles --no-attachments --no-chapters ^( "%%f" ^) -q > NUL 2>&1
) :: set "videoPath=C:\Temp\Temp.mkv" for %%A in ("%videoPath%") do set "videoSizeBytes=%%~zA" set /a "videoSizeMB=videoSizeBytes / 1048576" if %videoSizeMB% gtr 1024 (
set "result=20"
) else (
set "result=17"
) :: set "videoPath=C:\Temp\Temp.mkv" for %%A in ("%videoPath%") do set "videoSizeBytes=%%~zA" set /a "videoSizeMB=videoSizeBytes / 1048576" if %videoSizeMB% gtr 1024 (
set "resultT=Выбраны настройки кодирования [обычные], так как видео больше 1 ГБ"
) else (
set "resultT=Выбраны настройки кодирования [высокие], так как видео меньше 1 ГБ"
) echo %resultT% :: setlocal set "скрипт_директория=C:\Temp\" if not exist "%скрипт_директория%Temp.mkv" ( "%~dp0\Resources\ffplay.exe" -autoexit -nodisp -loglevel panic "%~dp0\Resources\error.wav"
cls 7
echo ┌──────────────────────────────────────────────────────────────────────┐
echo │ Внимание, видео не найдено в папке. │
echo │ Закройте окно и поместите в папку видео и снова запустите скрипт. │
echo └──────────────────────────────────────────────────────────────────────┘
echo. pause
exit ) else (
echo > NUL 2>&1
) :: setlocal enabledelayedexpansion set "Temp_folder=C:\Temp" if not exist "%Temp_folder%" (
mkdir "%Temp_folder%"
) for %%i in ("*.ass") do (
copy "%%i" "%Temp_folder%\Temp%%~xi" > NUL 2>&1
) :: echo.
echo Кодирование аудиодорожки: "%~dp0\Resources\FFmpeg.exe" -y -i "C:\Temp\Temp.mkv" -loglevel panic -stats -c:v copy -f wav - | "%~dp0\Resources\qaac64.exe" 2> "C:\Temp\errors.log" --threading --ignorelength --tvbr 118 - -o "C:\Temp\qaac64.m4a" :: setlocal enabledelayedexpansion set ffmpeg_path="%~dp0\Resources\FFmpeg.exe" for %%i in (*.jpg) do ( !ffmpeg_path! -i "%%i" -loglevel panic -stats "C:\Temp\Temp.png" > NUL 2>&1
) for %%i in (*.png) do (
=
!ffmpeg_path! -i "%%i" -loglevel panic -stats "C:\Temp\Temp.png" > NUL 2>&1
) for %%i in (*.jpeg) do (
=
!ffmpeg_path! -i "%%i" -loglevel panic -stats "C:\Temp\Temp.png" > NUL 2>&1
) :: setlocal set "скрипт_директория=C:\Temp\" if not exist "%скрипт_директория%Temp.png" ( "%~dp0\Resources\ffplay.exe" -autoexit -nodisp -loglevel panic "%~dp0\Resources\error.wav"
cls 7
echo ┌──────────────────────────────────────────────────────────────────────┐
echo │ Внимание, файл для обложки не найден в папке │
echo │ Закройте окно и поместите в папку обложку и снова запустите скрипт. │
echo └──────────────────────────────────────────────────────────────────────┘
echo. pause
exit ) else (
echo > NUL 2>&1
) :: setlocal set image_file="C:\Temp\Temp.png" :: "%~dp0\Resources\FFmpeg.exe" -loop 1 -i %image_file% -y -c:v libx264 -t 0.001 -crf %result% -preset medium -r 23.976 -vf format=yuv420p -colorspace bt709 -s 1920x1080 -loglevel panic -stats "C:\Temp\01.mp4" > NUL 2>&1 :: cd /d "C:\Temp\"
echo. echo Кодирование видео для VK: "%~dp0\Resources\FFmpeg.exe" -i "C:\Temp\Temp.mkv" -y -c:v libx264 -crf %result% -preset medium -an -r 23.976 -vf format=yuv420p,hflip,ass="Temp.ass" -colorspace bt709 -s 1920x1080 -loglevel panic -stats "C:\Temp\VK.mp4" :: cd /d "C:\Temp\"
echo. echo Кодирование видео для Telegram: "%~dp0\Resources\FFmpeg.exe" -i "C:\Temp\Temp.mkv" -y -c:v libx264 -crf %result% -preset medium -an -r 23.976 -vf format=yuv420p,ass="Temp.ass" -colorspace bt709 -s 1920x1080 -loglevel panic -stats "C:\Temp\Telegram.mp4" :: cd.. :: echo Объединение заставки и видео Telegram. "%~dp0\Resources\FFmpeg.exe" -f concat -safe 0 -i "C:\Temp\Telegram.txt" -r 23.976 -c copy -loglevel panic -stats "C:\Temp\Telegram-Temp.mp4" > NUL 2>&1 :: echo Создание готового видео для VK. mkdir "%~dp0\Completed\VK" > NUL 2>&1 "%~dp0\Resources\FFmpeg.exe" -y -i "C:\Temp\VK.mp4" -i "C:\Temp\qaac64.m4a" -loglevel panic -c:v copy -c:a copy -metadata:s:a:0 title="MoonWalkers (Script by Adventurer_Kun v8)" -map 0:0 -map 1:0 -loglevel panic -stats "%~dp0\Completed\VK\%name% [VK].mp4" > NUL 2>&1 :: echo Создание готового видео для Telegram. mkdir "%~dp0\Completed\Telegram" > NUL 2>&1 "%~dp0\Resources\FFmpeg.exe" -y -i "C:\Temp\Telegram-Temp.mp4" -i "C:\Temp\qaac64.m4a" -loglevel panic -c:v copy -c:a copy -metadata:s:a:0 title="MoonWalkers (Script by Adventurer_Kun v8)" -map 0:0 -map 1:0 -loglevel panic -stats "%~dp0\Completed\Telegram\%name% [Telegram].mp4" > NUL 2>&1 :: rmdir /s /q "C:\Temp" > NUL 2>&1 cls
timeout /t 1 >nul
"%~dp0\Resources\ffplay.exe" -autoexit -nodisp -loglevel panic "%~dp0\Resources\success.wav"
echo ┌────────────────────────────────────────────┐
echo │ Кодирование успешно завершено. │
echo │ Готовые видео находятся в папке Completed │
echo └────────────────────────────────────────────┘
echo. :: echo Введите цифру для выбора шаблона и нажмите Enter.
echo 1 = Удалить входные файлы (Внимание. Удалит все файлы в папке с расширением .ass .mkv .mp4 .avi .png .jpg .jpeg)
echo 2 = Не удалять входные файлы.
echo 3 = Сделать резервную копию входных файлов в zip и удалить входные файлы рядом со скриптом.
echo.
@echo off
setlocal :begin
set /p q="" if "%q%"=="1" goto delete_files
if "%q%"=="2" goto skip_deletion
if "%q%"=="3" goto backup_files echo Неверный ввод, попробуйте снова.
goto begin :delete_files
echo Удаление входных файлов...
cd /d "%~dp0"
del *.ass *.mkv *.mp4 *.avi *.png *.jpg *.jpeg /q
echo Все файлы удалены.
exit
goto end :skip_deletion
echo Вы выбрали не удалять файлы.
exit
goto end :backup_files echo.
echo Введите имя резервной копии.
echo.
set /p filename=
echo. echo Архивирование и удаление входных файлов... mkdir "C:\Temp\" > NUL 2>&1
(attrib +h "C:\Temp" 2>&1) "%~dp0\Resources\7-ZipPortable\App\7-Zip64\7z.exe" a -tzip "C:\Temp\%filename%.zip" "%~dp0\*.ass" "%~dp0\*.mkv" "%~dp0\*.mp4" "%~dp0\*.avi" "%~dp0\*.png" "%~dp0\*.jpg" "%~dp0\*.jpeg" > NUL 2>&1 mkdir "%~dp0\Backup" > NUL 2>&1 for /f "tokens=1-4 delims=/: " %%a in ("%date%") do (
set "year=%%c"
set "month=%%b"
set "day=%%a"
) for /f "tokens=1-3 delims=:." %%A in ("%time%") do (
set "hour=%%A"
set "minute=%%B"
) mkdir "%~dp0\Backup\%year%%month%%day%" > NUL 2>&1 set "extensions=.zip"
for %%G in (%extensions%) do (
move /y "C:\Temp\*.zip" "%~dp0\Backup\%year%%month%%day%\" > NUL 2>&1
) del /q "%~dp0\*.ass" "%~dp0\*.mkv" "%~dp0\*.mp4" "%~dp0\*.avi" "%~dp0\*.png" "%~dp0\*.jpg" "%~dp0\*.jpeg" 2>nul
rmdir /s /q "C:\Temp" > NUL 2>&1
exit
goto end :end pause
|
|
с разрешения димона
Стаж: 10 месяцев Сообщений: 14
|
с разрешения димона ·
17-Сен-24 03:48
(спустя 18 часов, ред. 05-Янв-25 18:18)
скрытый текст
Adventurer_Kun
Спасибо, добавил, поправил.
Adventurer_Kun писал(а):
86710957не приведёт ли к каким-то конфликтам
Не приведет.
Подробнее
- Аудио и видео должны быть разные файлы. Один и тот же файл скрипт не примет и за аудио и за видео.
- Такие "конфликтные" расширения перечислены в MIX_EXTENSIONS и для них есть доп. проверка. Это контейнеры, которые в теории могут содержать как аудио, так и видеодорожку.
- Если файл с расширением из "видеорасширений" в одной папке с аудио и расширение аудио не "чисто аудио", то проверяется наличие в этом файле видеодорожки.
- Если файл с расширением из "видеорасширений" не в одной папке с аудио, а выше, то проверка не производится (ресурсозатратно).
Т.е. если в раздаче не нарушена структура и аудио лежат в поддиректориях видеодиректории или видео закинуто в директорию к аудио, то все норм будет.
В теории еще возможен конфликт если закинуть более 1 аудиофайла с одинаковым названием в папку. Если одно из аудио будет "чисто аудио", а другое аудио "смешанное", то скрипт может принять "смешанное" аудио за видео и т.к. второй файл "чисто аудио" проверка на наличие видеодорожки проводиться не будет. Но сейчас скрипт впринципе не поддерживает добавление более одной аудиодорожки, так что это использование не по назначению.
Конкретно с m4a ошибка, поправил. Он только аудио. mp4 же - контейнер, который может содержать видео и/или аудио. Т.е. в теории возможны в нем озвучки. Как и в mov и flv.
Если к конфликтам не приводит не вижу смысла не добавлять, проверка на соответствие расширению ведется сравнением переменных внутри скрипта, т.е. ресурсов добавление еще нескольких расширений не отнимает практически.
Adventurer_Kun писал(а):
86710957о добавления скрипта в раздачи, такое точно не разрешат
Согласен. Аргумент, что автор раздачи может подменить батник, сложно оспорить. Надеюсь на выделение в FAQ и в "пост с полезностями".
Adventurer_Kun писал(а):
86710957стоит упростить
Adventurer_Kun писал(а):
86710957либо выбором из какой подпапки вшить озвучку, субтитры
немного противоречит идеи упрощения ![](https://static.rutr.life/smiles/icon_biggrin.gif)
Но у меня есть идея как одновременно и упростить и дать больше настроек.
v0.2.2
Обновлен файл в стартовом посте. Также скрипт теперь можно скачать с Github
- Скорректирована логика поиска директорий субтитров и шрифтов.
- Мелкие фиксы и исправления.
|
|
с разрешения димона
Стаж: 10 месяцев Сообщений: 14
|
с разрешения димона ·
20-Сен-24 17:19
(спустя 3 дня, ред. 05-Янв-25 18:17)
скрытый текст
v0.3.0
Добавлена поддержка линкованного видео.
- Для обработки линкованного видео в одной папке с батником нужно положить merge-video-from-split-chapters.py и delete-temp-files.py для чистки (временный вариант).
- Также в системе должен быть установлен Python и прописан в PATH.
Нелинкованное видео можно обрабатывать как прежде - одним батником и без Python.
Основное тело скрипта будет переписано на Python для кроссплатформенного выполнения. До этого добавления новой функциональности не будет.
С точки зрения пользователя планируется оставить все как есть. Просто запуск одного батника, который сделает красиво.
UPD 13.10
v0.3.2
Добавлен ретайминг аудио и субтитров для линкованного видео. Больше рассинхрона быть не должно для любых конфигураций
|
|
Adventurer_Kun
![Top Seed 01* 40r](https://static.rutr.life/ranks/s_topseed_1.gif) ![](https://static.rutr.life/avatars/5/36/27425036.jpg) Стаж: 12 лет 7 месяцев Сообщений: 5042
|
Adventurer_Kun ·
20-Сен-24 17:50
(спустя 30 мин., ред. 20-Сен-24 17:50)
Цитата:
Также в системе должен быть установлен Python и прописан в PATH.
Можно через команду
Код:
winget install Python.Python.3
в cmd поставить питон и вроде он сразу в path добавляется.
Ну это самый лёгкий способ вроде.
|
|
с разрешения димона
Стаж: 10 месяцев Сообщений: 14
|
с разрешения димона ·
22-Ноя-24 21:05
(спустя 2 месяца 2 дня, ред. 05-Янв-25 18:17)
скрытый текст
v0.5.0
Для Windows и Linux выложил x64 исполняемые файлы. Установка Python и MKVToolNix для них не требуется. Просто скачиваете .exe и запускаете, в него все включено.
Python скрипт остается универсальным вариантом для всех систем.
Добавлена поддержка всех аргументов mkvmerge, добавлены новые аргументы (см. "Аргументы вызова" в стартовом посте). Т.е. теперь можно накрутить все что угодно, что поддерживает mkvmerge.
|
|
|