qBittorent, FileBot, mkvmerge - ремикс всех видео файлов в *.mkv и удаление субтитров в процессе

Я пытаюсь выполнить этот очень полезный пакет для обработки всех файлов *.avi, *.mkv и *.mp4 в текущем каталоге и всех подкаталогах и создания файлов *.mkv (удаление субтитров в процессе) с удалением исходного файла.

@echo off
for /F "delims=" %%I in ('dir /A-D /B /ON /S *.avi *.mkv *.mp4 2^>nul') do (
    mkvmerge.exe "%%~I" -o "%%~dpI~%%~nI.tmp" --no-subtitles
    if not errorlevel 1 (
        del "%%~I"
        move /Y "%%~dpI~%%~nI.tmp" "%%~dpnI.mkv" >nul
    )
)

со скриптом Filebots AMC (qBittorrent)

filebot -script fn:amc --output "/path/to/media" --action duplicate --conflict skip -non-strict --log-file amc.log --def excludeList=amc.excludes unsorted=y music=y artwork=y "ut_dir=%F" "ut_kind=multi" "ut_title=%N" "ut_label=%L"

в сочетании с его --def exec=command

--def exec="mkvpropedit {quote f} --edit info --set title={quote object}"

Поэтому я попытался адаптировать пакет к переменной qBittorrents и назвал его filebot.bat:

mkvmerge.exe "%F" -o "%F.tmp" --no-subtitles
if not errorlevel 1 (
    del "%F"
    move /Y "%F.tmp" "%F.mkv" >nul
)

и соответствующим образом скорректировал сценарий AMC

filebot -script fn:amc --output "D:\Desktop\filebot\test2" --action duplicate --conflict skip -non-strict --log-file amc.log --def excludeList=amc.excludes unsorted=n music=y artwork=n "ut_dir=D:\Desktop\filebot\test1\test.avi" "ut_kind=multi" --def exec="D:\Desktop\filebot\test3\filebot.bat {quote f}"

AMC работает так, как должно, но когда запускается команда --def exec, происходит следующее:

C:\Users\Admin>mkvmerge.exe "F.tmp" --no-subtitles
mkvmerge v13.0.0 ('The Juggler') 64bit
Error: no destination file name was given.

mkvmerge -o out [global options] [options1] <file1> [@option-file.json] …

Я предполагаю, что это как-то связано с переменной qBittorrent "%F". Я был бы очень признателен за помощь!

Редактировать: я удалил все остальное внутри пакета и настроил его на

mkvmerge.exe "%~1" -o "%~dpn1.tmp" --no-subtitles && >NUL move /Y "%~dpn1.tmp" "%~n1.mkv"

Это то, что cmd говорит после того, как AMC уже работает правильно:

C:\Users\Admin>mkvmerge.exe "D:\Desktop\filebot\test2\TV Shows\StartUp (2016)\Season 01\StartUp (2016) - S01E01 - Seed Money.avi" -o "D:\Desktop\filebot\test2\TV Shows\StartUp (2016)\Season 01\StartUp (2016) - S01E01 - Seed Money.tmp" --no-subtitles   && move /Y "D:\Desktop\filebot\test2\TV Shows\StartUp (2016)\Season 01\StartUp (2016) - S01E01 - Seed Money.tmp" "StartUp (2016) - S01E01 - Seed Money.mkv" 1>NUL
mkvmerge v13.0.0 ('The Juggler') 64bit
'D:\Desktop\filebot\test2\TV Shows\StartUp (2016)\Season 01\StartUp (2016) - S01E01 - Seed Money.avi': Using the demultiplexer for the format 'Matroska'.
'D:\Desktop\filebot\test2\TV Shows\StartUp (2016)\Season 01\StartUp (2016) - S01E01 - Seed Money.avi' track 0: Using the output module for the format 'AVC/h.264'.
'D:\Desktop\filebot\test2\TV Shows\StartUp (2016)\Season 01\StartUp (2016) - S01E01 - Seed Money.avi' track 1: Using the output module for the format 'AAC'.
'D:\Desktop\filebot\test2\TV Shows\StartUp (2016)\Season 01\StartUp (2016) - S01E01 - Seed Money.avi' track 2: Using the output module for the format 'text subtitles'.
'D:\Desktop\filebot\test2\TV Shows\StartUp (2016)\Season 01\StartUp (2016) - S01E01 - Seed Money.avi' track 3: Using the output module for the format 'text subtitles'.
The file 'D:\Desktop\filebot\test2\TV Shows\StartUp (2016)\Season 01\StartUp (2016) - S01E01 - Seed Money.tmp' has been opened for writing.
Progress: 100%
The cue entries (the index) are being written...
Multiplexing took 6 seconds.
Done ?(?????)?

Файл по-прежнему .avi и имеет все еще субтитры.


person Community    schedule 23.07.2017    source источник


Ответы (1)


Сценарий AMC запускает сценарий .bat с --def exec="path\to\filebot.bat {quote f}", верно? Я думаю, проблема в том, что в filebot.bat аргумент командной строки следует читать как "%~1", а не %F.

mkvmerge.exe -S "%~1" -o "%~dpn1.tmp" && >NUL move /Y "%~dpn1.tmp" "%~dpn1.mkv"

должен сделать это, я думаю. Кстати, && занимает место if not errorlevel 1. %~dpn1 означает диск, путь, базовое имя аргумента 1.

person rojo    schedule 23.07.2017
comment
Добавьте pause в конце, чтобы вы могли изучить вывод mkvmerge. Если ничего другого, у вас есть ffmpeg? Вы можете попробовать ffmpeg -i "%~1" -map 0:v -map -0:a -c:v copy -c:a copy "%~dpn1.mkv" в качестве альтернативы. - person rojo; 23.07.2017
comment
@ Liche1992 Liche1992 Он будет ремиксироваться с любыми указанными вами потоками. Пока вы указываете только видео- и аудиопотоки, это потоки, которые он будет повторно муксировать — вместе с соответствующими метаданными, а также глобальными метаданными контейнера (название, список глав и т. д.). Команда, которую я прокомментировал выше, создаст новый файл Matroska, содержащий наиболее значимый видео- и аудиопоток из старого файла. Если в исходном файле несколько аудиопотоков, будет скопирован только тот, у которого больше каналов или самый высокий битрейт. Если несколько потоков удовлетворяют этому условию, он копирует первый поток. - person rojo; 24.07.2017
comment
@ Liche1992 Liche1992 Вы можете отредактировать свой вопрос и добавить то, что вы пробовали, и полученные результаты журнала. Если соответствующая информация журнала слишком длинная, вы можете опубликовать ссылку на вставку pastebin. - person rojo; 24.07.2017
comment
@Liche1992 Liche1992 Извините, я добавил лишний тире между 0:a. Должно быть ffmpeg -i "%~1" -map 0:v -map 0:a -c:v copy -c:a copy "%~dpn1.mkv" - person rojo; 24.07.2017
comment
@ Liche1992 Согласно документации mkvmerge порядок параметров важен. -S или --no-subtitles должны стоять перед именем входного файла. Я отредактировал свой ответ, чтобы отразить это. - person rojo; 24.07.2017
comment
@ Liche1992 Обведите код обратными кавычками в комментариях StackOverflow. И знаешь, что? Кажется, я только что осознал свою ошибку. Измените это на move /Y "%~dpn1.tmp" "%~dpn1.mkv". Я думаю, что у меня в голове был синтаксис команды ren. move в качестве места назначения требуется полный путь, иначе файлы окажутся в текущем рабочем каталоге, который, вероятно, не является каталогом, содержащим видео. Извини за это! - person rojo; 24.07.2017
comment
@ Liche1992 Liche1992 О, извините, я напечатал ответ, а затем удалил его, когда увидел свою ошибку. В любом случае, mkvmerge будет более надежно давать вам желаемые результаты, если вы сможете заставить его работать, я думаю, особенно на видео с непредсказуемыми конфигурациями потоков (например, многоязычные видео). ffmpeg может решить, что звуковая дорожка на португальском языке является наиболее значимой, и скопирует только ее без какой-либо интенсивной акробатики с переключателями -map. - person rojo; 24.07.2017