Я задаю свой вопрос в виде примера... У меня есть папка, содержащая несколько подпапок, которые являются следующими Основная папка==)Got, Vikings и т. д. В каждой из них есть видео с соответствующими им файлами srt. В среде Windows, запустив эту команду в основной папке, сделайте mkvmerge для мультиплексирования целых видео и соответствующих файлов srt в этом каталоге.
For /R %%A IN (*.mkv *.mp4) Do (
"C:/Program Files/MKVToolNix\mkvmerge.exe" -o "%%~dpnxAtemp" "%%~fA" "%%~dpnA.srt" && if errorlevel 2 (
echo errors generated during remuxing, original file not deleted
) else if errorlevel 1 (
del /f "%%~fA" "%%~dpnA.srt" echo Warnings generated during remuxing to "%%~A", original file deleted
) else (
del /f "%%~fA" "%%~dpnA.srt" echo Successfully remuxed to "%%~A", original file deleted
) && for /R %%A IN (*.mkvtemp *.mp4temp) do ren "%%~fA" "%**.mkv"
)
Pause
решение1
Код содержит некоторые ошибки, но я понимаю это следующим образом: 1
Выполните следующее для всех
*.mkv
и*.mp4
найдите рекурсивно:
- Запустите
mkvmerge
каждый файл и соответствующий ему*.srt
.- Если все прошло успешно (предупреждение или чистый выход):
- Удалите входные файлы.
- Переименуйте созданный файл в
<original_name>.mkv
.
Это можно сделать с помощью следующего скрипта в Ubuntu.
Используйте его на свой страх и риск, я не тестировал его полностью!
#!/bin/bash
find . -name \*.mp4 -o -name \*.mkv | while read orig_filename
do
filename="${orig_filename::-4}" # crop the extension
mkvmerge -o "$orig_filename.tmp" "$orig_filename" "$filename.srt"
if [ $? -le 1 ] # warning or clean exit
then
rm "$orig_filename" "$filename.srt"
mv "$orig_filename.tmp" "$filename.mkv"
fi
done
Перед запуском этого скрипта вам необходимо установитьmkvmerge
программа для Ubuntu:
sudo apt install mkvtoolnix
1 Я опустил сообщения об ошибках для простоты. Согласно комментариям, они не кажутся существенными для скрипта.