Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для YuS_2

Crazy


Contributor


Сообщения: 1235
Благодарности: 518

Профиль | Отправить PM | Цитировать


Цитата 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

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 23-07-2021 в 09:46.

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:27, 23-07-2021 | #3