Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Matroska .mkv | MKVToolnix | Haali Media Spliter

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кодировка файла UTF-8 with BOM
Если MKVToolNix не в C:\Program Files\MKVToolNix замените везде путь на свой или указывайте параметр при вызове фунуции.

Код:
function Get-MKVTitle {
    param
    (
        # Полное имя файла.mkv
        [Parameter(
            Mandatory,
            ValueFromPipeline,
            ValueFromPipelineByPropertyName)]
        [Alias("FullName")]
        [string]
        $file,
 
        # Полное имя mkvinfo.exe
        [ValidateScript( { Test-Path -LiteralPath $_ -PathType Leaf })]
        [string]
        $mkvinfo = 'C:\Program Files\MKVToolNix\mkvinfo.exe'
    )
 
    begin {
        # Сохранить текущую кодировку косноли
        $enc = [Console]::OutputEncoding
 
        # Установить кодировку консоли в UTF-8, для mkvinfo.exe
        [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
 
        # Строка поиска для отбора строки только с названием
        $match = '\| \+ Title: '
 
        # Строка замены, что бы осталось только название
        $replace = '| + Title: '
    }
 
    process {
        $file = (Resolve-Path -LiteralPath $file)
 
        if ($file -match "\.mkv$") {
            # Получить навание
            $title = & $mkvinfo $file | Where-Object { $_ -match $match }
            if ($title) {
                $title = $title.Replace($replace, '')
            }
 
            [PSCustomObject]@{
                FullName = $file
                Title    = $title
            }
        }
    }
 
    end {
        # Восстановить ранее сохранённую кодировку консоли
        [Console]::OutputEncoding = $enc
    }
}
 
function Set-MKVTitle {
    param
    (
        # Полное имя файла.mkv
        [Parameter(
            Mandatory,
            ValueFromPipeline,
            ValueFromPipelineByPropertyName)]
        [Alias("FullName")]
        [string]
        $file,
 
        # Название внедрямое в файл mkv
        [Parameter(Mandatory)]
        [string]
        $title,
 
        # Полное имя mkvpropedit.exe
        [ValidateScript( { Test-Path -LiteralPath $_ -PathType Leaf })]
        [string]
        $mkvpropedit = 'C:\Program Files\MKVToolNix\mkvpropedit.exe'
    )
 
    begin {
        # Сохранить текущую кодировку косноли
        $enc = [Console]::OutputEncoding
 
        # Установить кодировку консоли в UTF-8, для mkvpropedit.exe
        [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
    }
 
    process {
        $file = (Resolve-Path -LiteralPath $file)
 
        if ($file -match "\.mkv$") {
            # Установить навание
            & $mkvpropedit $file --edit info -s title=$title
        }
    }
 
    end {
        # Восстановить ранее сохранённую кодировку консоли
        [Console]::OutputEncoding = $enc
    }
}
 
function Set-MKVNameToTitle {
    param
    (
        # Полное имя файла.mkv
        [Parameter(
            Mandatory,
            ValueFromPipeline,
            ValueFromPipelineByPropertyName)]
        [Alias("FullName")]
        [string]
        $file
    )
 
    process {
        # Только имя файла, без путей и расширения
        $BaseName = (Get-Item -LiteralPath $file).BaseName
 
        # Название из mkv файла
        $Title = (Get-MKVTitle -file $file).Title
 
        # Если название не совпадает с базовым именем файла
        if ($Title -ne $BaseName) {
            # Установить базовое имя файла в качестве названия в mkv
            Set-MKVTitle -file $file -title $BaseName
        }
    }
}
 
function Remove-MKVTitle {
    param
    (
        # Полное имя файла.mkv
        [Parameter(
            Mandatory,
            ValueFromPipeline,
            ValueFromPipelineByPropertyName)]
        [Alias("FullName")]
        [string]
        $file,
 
        # Полное имя mkvpropedit.exe
        [ValidateScript( { Test-Path -LiteralPath $_ -PathType Leaf })]
        [string]
        $mkvpropedit = 'C:\Program Files\MKVToolNix\mkvpropedit.exe'
    )
 
    process {
        $file = (Resolve-Path -LiteralPath $file)
 
        # Удалить навание
        & $mkvpropedit $file --tags all: -d title
    }
}
 
<#
    .SYNOPSIS
    Работа с тегом Название в mkv файле
    .DESCRIPTION
    Просмотр тега Название, установка тега Название,
    установка базового имени файла в качестве Названия
    .NOTES
    Название:       MKVTitle
    Версия:         0.2
    Автор:          iNNOKENTIY21
    Зависимость:    Требуются утилиты MKVToolNix (смотрите ссылку)
    .LINK
    https://mkvtoolnix.download/downloads.html
#>

Пример использования:

Код:
Import-Module MKVTitle.psm1
# Просмотр названий у всех файлов mkv в текущем каталоге
Get-ChildItem *.mkv | Get-MKVTitle | Format-Table -AutoSize
 
# Удаление названий во всех файлах mkv в текущем каталоге
Get-ChildItem *.mkv | Remove-MKVTitle
 
# Записать указанное название в указанный файл
Set-MKVTitle -file FileName.mkv -title "название"
 
# Записать имя файла в качестве названия всем файлам в текущем каталоге
Get-ChildItem *.mkv | Set-MKVNameToTitle
 
# Записать имя файла в качестве названия
Set-MKVNameToTitle -file FileName.mkv
и т.д.

Всего записей: 3004 | Зарегистр. 16-08-2012 | Отправлено: 12:04 19-07-2019 | Исправлено: iNNOKENTIY21, 13:21 19-07-2019
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » Matroska .mkv | MKVToolnix | Haali Media Spliter


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru