Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Вывод в txt-файл разрешения видео форматов (http://forum.oszone.net/showthread.php?t=349257)

lyohalyoha 22-07-2021 17:44 2962656

Вывод в txt-файл разрешения видео форматов
 
Здравствуйте! Нужен батник,который создавал бы список разрешения(НЕ РАСШИРЕНИЯ и НЕ РАЗМЕР(вес)файла,а именно разрешение(например 720х480).Нужно закинуть батник в папку,запустить его и чтобы в этой же папке создался txt-файл с разрешением видео в таком же порядке,как видео в папке.Или может есть программа для показа разрешения видео из папок?Спасибо!
P.S.Функция в проводнике для отображения размеров(разрешения)видео не работает,ничего не показывается.Только у фоток.

Iska 23-07-2021 04:31 2962682

Вам для каких целей этот файл будет нужен?

YuS_2 23-07-2021 09:27 2962685

Цитата:

Цитата lyohalyoha
Или может есть программа для показа разрешения видео из папок? »

Результат зависит от постановки задачи...
Пока, могу предложить вот такой скрипт на powershell:
script.ps1
Код:

#requires -v 3.0
<#
.SYNOPSIS
        Скрипт для получения строк детализированной информации из файлов.

.Description
        Получает дополнительные свойства из файлов, в зависимости от выбранных параметров.
        Для получения свойств одного файла, можно указать его с относительным или абсолютным
        путем. Для массового получения свойств - необходимо указать каталог с файлами.
        Скрипт параметризированный.

.Parameter Items
        Обязательный: Указываются файлы или каталоги (в случае каталога, будут выбраны
        файлы содержащиеся в нем по фильтру)

.Parameter Filter
        Необязательный: Фильтр для отбора файлов. Поддерживаются маски

.Parameter Propnum
        Необязательный: Единственный номер параметра или диапазон параметров, или набор
        параметров. См. примеры

.Parameter Recurse
        Переключатель: При наличии, будет осуществляться рекурсивная выборка файлов из
        каталогов. Для элементов-файлов, переключатель игнорируется.

.Parameter Force
        Переключатель: При наличии, будут выбираться скрытые, системные и т.п. файлы.

.Parameter Outfiles
        Переключатель: Для осуществления вывода в отдельные файлы. Имя файла будет
        составлено из имени и расширения обрабатываемого файла и нового расширения .txt
        Файлы складываются рядом со скриптом.

.Example
        .\script.ps1 -item 'd:\root1','d:\root2','d:\root3\file.mp4' -propnum 27 -recurse -force

        Это пример выборки файлов, указанных в перечислении -items, для дальнейшей обработки,
        Будет получено свойство с номером 27. Каталоги из перечисления будут обработаны рекурсивно
        для выборки всех файлов.
       
.Example
        .\script.ps1 -item 'd:\root1' -propnum (1..2048) -force

        Это пример выборки файлов из указанного каталога, для дальнейшей обработки.
        Будут получены свойства с номерами от 1 до 2048. Выбираются все файлы.
       
.Example
        .\script.ps1 -item 'd:\root1' -filter ('*.mpg','*.avi','*.mkv','*.mp4','*.3gp','*.vob') `
        -propnum 27 |ft

        Это пример выборки файлов из указанного каталога, для дальнейшей обработки.
        Будет получено свойство с номером 27. Выбираются только доступные файлы и только с
        указанными расширениями в фильтре.

.Notes
        Created By YuS

        Version: 1.00
        Date: 2/04/2018
        Purpose/Change:        Первая версия
        Version: 2.00
        Date: 17/09/2019
        Purpose/Change:        Изменена логика скрипта, добавлена возможность выборки набора свойств.
                Добавлена возможность вывода в консоль. Добавлен подсчет общей продолжительности
                медиафайлов, если выбрано единственное свойство 27. Расширена возможность
                группировки по параметрам.
                Поправлены старые баги, добавлены новые. :)

.Link
        ...
#>


[CmdletBinding()]
Param (
        [parameter(mandatory=$true)]
        [string[]]$items,
        [string[]]$filter = '*.*',
        [ValidateRange(0,2048)]
        [int[]]$propnum = 27,
        [switch]$recurse,
        [switch]$force,
        [switch]$outfiles
)

function testpth($x){
        $pars = @{}
        $pars.path = [management.automation.wildcardpattern]::escape($x)
        if ($force){$pars.force = $true}
        if ($filter){$pars.include = $filter}
        if(test-path $x -pathtype container){
                $pars.path += '\*'
                if ($recurse){$pars.recurse = $true}
                dir @pars|?{!$_.psiscontainer}
        } elseif (test-path $x -pathtype leaf){
                gi @pars
        } else {
                write-host Path no correct
                sleep -s 5
                break
        }
}
function info($var,$k){
        process{
                $a = new-object -com 'shell.application'
                $b = $a.namespace($var.directoryname)
                [int]$i=0
                foreach($i in $propnum){
                        $rslt = $b.getdetailsof($b.parsename($var.name),$i)
                        if($rslt){
                                [pscustomobject]@{
                                        IDFile = $k
                                        IDProp = $i
                                        Name = $var.name
                                        FullName = $var.fullname
                                        DirectoryName = $var.directoryname
                                        Type = $b.getdetailsof($null,$i)
                                        Context = $rslt
                                }
                        }
                }
        }
}

$arr = $items|%{testpth $_}|%{$n=1}{info $_ $n;$n++}

if ($outfiles){
        # Подготовка хэш-таблиц с последующей группировкой
        $p = $arr|group idfile -ashash -asstr
        # Вывод в отдельные файлы
        1..$p.count|%{
                if($p."$_".idprop.length -eq 1){
                        $name = [string]$p."$_".name + '.txt'
                }else{
                        $name = [string]$p."$_".name[0] + '.txt'
                }
                $p."$_"|select idfile,idprop,fullname,type,context|out-file -lit $name -app -enc utf8
        }
} else {
        $arr
}

if ($propnum.length -eq 1 -and $propnum -eq 27){
        try{
                $total = [timespan]::new(0,0,(([timespan[]]$arr.context).totalseconds|
                measure -sum).sum)
                write-host "Общая продолжительность: $total" -for cyan
        }catch{
                write-host 'Context' не является продолжительностью медиафайла: "`n" $_ -for red
        }
}


Использовать из консоли powershell, так:
Код:

.\script.ps1 -item 'D:\TEST' -filter ('*.mp4','*.mpg') -prop (314,316) -outfiles
- рядом со скриптом будут созданы текстовые файлы с наименованиями, такими же, как и у видеофайлов. Внутри текстовых файлов будут указаны параметры высоты и ширины кадра.
Или просто вывод в консоль:
Код:

.\script.ps1 -item '.\test' -filter ('*.mp4','*.mpg') -prop (314,316)|select Name,Type,Context

lyohalyoha 23-07-2021 15:39 2962710

Цитата:

Цитата Iska
Вам для каких целей этот файл будет нужен? »

Просто имеются больше 4000 видео и нужно разрешение у всех посмотреть.Каждое отдельно посмотреть-нереально.

Цитата:

Цитата YuS_2
Пока, могу предложить вот такой скрипт на powershell:
script.ps1 »

К сожалению у меня Powershell на ПК нету,не работает.Только батники работают :help:

YuS_2 23-07-2021 15:59 2962712

Цитата:

Цитата lyohalyoha
у меня Powershell на ПК нету »

это, что у Вас за ПК? Установите.

lyohalyoha 23-07-2021 17:05 2962714

Цитата:

Цитата YuS_2
это, что у Вас за ПК? Установите. »

Он есть у меня,запустил.Второй ваш код ввёл,исправив путь.Но в первый код script.ps1 что именно писать?Можете уточнить? :unsure:

YuS_2 23-07-2021 17:54 2962720

Цитата:

Цитата lyohalyoha
Второй ваш код ввёл,исправив путь. »

И? Результат есть?

Цитата:

Цитата lyohalyoha
Но в первый код script.ps1 что именно писать?Можете уточнить? »

Что уточнить? Там строка запуска скрипта, в которой необходимо указать существующий путь к каталогу с файлами и при необходимости, поправить фильтр для отбора файлов.
Вы запускать пробовали? Текстовые файлы рядом со скриптом создаются?

Iska 23-07-2021 18:52 2962722

Цитата:

Цитата lyohalyoha
Просто имеются больше 4000 видео и нужно разрешение у всех посмотреть. »

Тогда возьмите MediaInfo и просто «натравите» его на каталог с видеофайлами:
Скрытый текст

lyohalyoha 23-07-2021 19:39 2962724

Цитата:

Цитата YuS_2
И? Результат есть? »

Неа,результатов нету.Текстовые файлы не создаются.Ниже написали,через MediaInfo-я уже так и делаю+использую Notepad++ с мною записанным макросом для удаления лишнего,оставив только строки Ширину и Высоту видео.

Цитата:

Цитата Iska
Тогда возьмите MediaInfo и просто «натравите» его на каталог с видеофайлами: »

Спасибо большое за совет! Так уже и делаю,выше написал как.


Время: 07:20.

Время: 07:20.
© OSzone.net 2001-