[FAQ] Быстрый способ вшить озвучку в видео во все серии для просмотра на телевизоре или приставке.

Страницы :   Пред.  1, 2, 3, 4, 5
Ответить
 

hiiammichael

Стаж: 15 лет 3 месяца

Сообщений: 281


hiiammichael · 16-Май-25 08:46 (4 месяца 2 дня назад)

Adventurer_Kun
Благодарю! Буду разбираться.
[Профиль]  [ЛС] 

ILix08I

Стаж: 16 лет 2 месяца

Сообщений: 2

ILix08I · 14-Июл-25 15:36 (спустя 1 месяц 29 дней, ред. 14-Июл-25 15:36)

Может кому будут полезны скрипты что для себя писал, тут больше для тех кто плюс минус понимает код чтобы быстро отредактировать под свои потребности.
Для работы должен быть установлен mkvmerge из mkvtoolnix и PowerShell@latest на момент написания
  1. Положить как .ps1 файл в корень
  2. Блок # Add Fonts удалить если нет шрифтов которые нужно вшить
  3. Если есть то положить все шрифты в fonts папку
  4. В блоке Sound указать озвучки что нужны и где они лежат(путь до папки), важно чтобы часть названия совпадало с названием видео
  5. Блок Subs RU и Subs EN аналогично озвучке, если есть то вписать если нет удалить
Сам код
Код:

$maxThreads = 6  # Количество параллельных потоков
$rootDir = $PSScriptRoot
Get-ChildItem -LiteralPath $rootDir -Filter "*.mkv" | ForEach-Object -Parallel {
    function Get-Track {
        param(
            [Parameter(Mandatory)]
            [string]$SearchFolder,
            [Parameter(Mandatory)]
            [string]$FileBase,
            [string]$Extension = ".mka",
            [Parameter(Mandatory)]
            [string]$Language,
            [Parameter(Mandatory)]
            [string]$TrackName
        )
        $files = Get-ChildItem -LiteralPath $SearchFolder | Where-Object { $_.Name.Contains($FileBase) -and $_.Extension -eq $Extension };
        if ($files.Count -eq 1) {
            $file = $files[0];
            $langUpper = $Language.ToUpper();
            return "--language 0:$Language --track-name `"0:[$langUpper] $TrackName`" --compression -1:none `"$($file.FullName)`""
        }
        elseif ($files.Count -eq 0) {
            throw "Ошибка: Файл не найден с подстрокой '$FileBase' в '$SearchFolder'"
        }
        else {
            throw "Ошибка: Найдено более одного файла с подстрокой '$FileBase' в '$SearchFolder'"
        }
    }
    $projectDir = $_.DirectoryName;
    $fileName = $_.BaseName;
    $fileExtension = $_.Extension;
    $fileFullName = "$fileName$fileExtension"
    $outputFileFullName = "$projectDir/merged/$fileFullName"
    $inputFileFullPath = "$projectDir/$fileFullName"
    $mimeTypeMap = @{
        ".ttf" = "application/x-truetype-font"
        ".otf" = "application/vnd.ms-opentype"
    };
    $command = @(
        "mkvmerge"
        "-o `"$outputFileFullName`""
        "--compression -1:none `"$inputFileFullPath`""
    )
    try {
        # --- Sound ---
        # Многоголосая
        $command += Get-Track -SearchFolder "$projectDir/RUS Sound/xxxx/" -FileBase $fileName -Extension ".mka" -Language "rus" -TrackName "XXXXX (Многоголосая закадровая)";
        # Трехголосая
        $command += Get-Track -SearchFolder "$projectDir/RUS Sound/xxxx/" -FileBase $fileName -Extension ".mka" -Language "rus" -TrackName "XXXXX (Трехголосая закадровая) - xxxx";
        # Двухголосая
        $command += Get-Track -SearchFolder "$projectDir/RUS Sound/xxxx/" -FileBase $fileName -Extension ".mka" -Language "rus" -TrackName "XXXXX (Двухголосая закадровая(муж./жен.)) - xxxx";
        # Одноголосая
        $command += Get-Track -SearchFolder "$projectDir/RUS Sound/xxxx/" -FileBase $fileName -Extension ".mka" -Language "rus" -TrackName "XXXXX (Одноголосая закадровая(жен.)) - xxxx";
        # --- Subs RU ---
        $command += Get-Track -SearchFolder "$projectDir/RU Subs/" -FileBase $fileName -Extension ".ass" -Language "rus" -TrackName "Полые Crunchyroll";
        $command += Get-Track -SearchFolder "$projectDir/надписи/" -FileBase $fileName -Extension ".ass" -Language "rus" -TrackName "Надписи Crunchyroll";
        # --- Subs EN ---
        $command += Get-Track -SearchFolder "$projectDir/EN Subs/" -FileBase $fileName -Extension ".ass" -Language "eng" -TrackName "Full Crunchyroll";
        # Add Fonts
        $fontFiles = Get-ChildItem -LiteralPath "$projectDir/fonts/" -Include *.ttf, *.otf;
        if ($fontFiles.Count -eq 0) {
            Write-Error "Ошибка: Шрифты .ttf и .otf не найдены в папке '$projectDir/fonts/'"
            exit 1
        }
        $fontFiles | ForEach-Object {
            $fontFile = $_.FullName;
            $extension = $_.Extension.ToLower();
            # Проверка что mimeType существует в списке известных
            if ($mimeTypeMap.ContainsKey($extension)) {
                $mimeType = $mimeTypeMap[$extension]
            } else {
                throw "Ошибка: Неизвестный тип файла шрифта '$extension'. Добавьте соответствующий MIME-тип в маппинг."
            }
            $command += "--attachment-mime-type $mimeType --attach-file `"$fontFile`""
        }
    } catch {
        Write-Error $_.Exception.Message
        exit 1
    }
    # Выполнение команды
    $result = Start-Process -FilePath "cmd.exe" -ArgumentList ("/c", ($command -join " ")) -NoNewWindow -Wait -PassThru 2>&1
    # Фильтруем прогресс (например, строку вида "Обработано: 95%")
    $result | Where-Object { $_ -notmatch "Обработано|Progress|%|идет обработка" } | Write-Host
} -ThrottleLimit $maxThreads
[Профиль]  [ЛС] 

nujievik

Стаж: 1 год 5 месяцев

Сообщений: 110

nujievik · 15-Июл-25 03:48 (спустя 12 часов)

ILix08I
а зачем этим заниматься, если есть?
[Инструкция] В 1 клик вшить внешние дорожки в видео, убрать линковку
[Профиль]  [ЛС] 

Kuller94

Стаж: 15 лет 10 месяцев

Сообщений: 2


Kuller94 · 19-Июл-25 17:13 (спустя 4 дня, ред. 19-Июл-25 17:13)

Спасибо за инструкцию! Всё работает))
[Профиль]  [ЛС] 

sfinx-3

Старожил

Стаж: 17 лет 10 месяцев

Сообщений: 2405

sfinx-3 · 18-Авг-25 15:42 (спустя 29 дней)

Есть ли способ так же просто вырезать ненужные аудио дорожки?
[Профиль]  [ЛС] 

nujievik

Стаж: 1 год 5 месяцев

Сообщений: 110

nujievik · 18-Авг-25 18:16 (спустя 2 часа 34 мин., ред. 18-Авг-25 18:24)

sfinx-3
https://rutr.life/forum/viewtopic.php?t=6570175
mux-media -a номера_нужных_дорожек --solo
Так как программа прежде всего предназначена для муксирования, то обрабатываемые видео поместите в отдельную папку, иначе из подпапок видео будет подтягивать дополнительные аудио/субтитры (по совпадению имени).
Ну или дополнительно проставьте флаг mux-media --depth 0 чтобы запретить подтягивать файлы из подпапок.
Примеры
  1. Оставить только аудиодорожку с номером 1
    Код:
    mux-media -a 1 --solo --depth 0
  2. Оставить только аудиодорожки с номерами 1,2,3
    Код:
    mux-media -a 1-3 --solo --depth 0
  3. Оставить все аудиодорожки кроме 1
    Код:
    mux-media -a !1 --solo --depth 0
[Профиль]  [ЛС] 

sfinx-3

Старожил

Стаж: 17 лет 10 месяцев

Сообщений: 2405

sfinx-3 · 19-Авг-25 20:30 (спустя 1 день 2 часа)

nujievik, попробую, спасибо. Жаль нет с интерфейсом, добавить-вырезать, поменять местами...
[Профиль]  [ЛС] 

jеnsen

Помощник модератора

Стаж: 15 лет 4 месяца

Сообщений: 3333

jеnsen · 19-Авг-25 20:37 (спустя 7 мин.)

sfinx-3 писал(а):
88113509Жаль нет с интерфейсом, добавить-вырезать, поменять местами...
Здрасте приехали. MKVToolNix. Ей собираются 100% релизов на всех трекерах мира. Вам советуют ПО на ее основе, просто оно удобное для пакетной обработки, что выгоднее в случае сериалов, а не фильмов.
[Профиль]  [ЛС] 

Adventurer_Kun

Top Seed 01* 40r

Стаж: 13 лет 2 месяца

Сообщений: 5283

Adventurer_Kun · 19-Авг-25 20:57 (спустя 19 мин., ред. 19-Авг-25 20:57)

sfinx-3
Сборка всех серий на основе одной серии собранной в интерфейсе MKVToolnix
Просто применяете эту инструкцию уже к первой серии готовой раздачи, убирая лишнее в MKVToolNix и сразу к пункту 4 следуете. Если нужна чисто пакетная обработка.
[Профиль]  [ЛС] 

sfinx-3

Старожил

Стаж: 17 лет 10 месяцев

Сообщений: 2405

sfinx-3 · 19-Авг-25 21:09 (спустя 12 мин.)

jеnsen писал(а):
88113538Здрасте приехали. MKVToolNix.
Я вообще забыл, что её можно "открыть"))) Думал тоже как "командная строка" работает, спасибо.
Adventurer_Kun писал(а):
88113592Сборка всех серий на основе одной серии собранной в интерфейсе MKVToolnix
Спасибо большое за инструкцию.
[Профиль]  [ЛС] 
 
Ответить
Loading...
Error