|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] получить длительность аудио (wav)-файла. |
|
|
PowerShell - [решено] получить длительность аудио (wav)-файла.
|
Старожил Сообщения: 286 |
Профиль | Отправить PM | Цитировать
Добрый.
Есть необходимость вывести длительность wav-файла в консоль. Нашел для себя способ такой: на выходе получим: причем дважды, т.к так выводит модуль. Скрытый текст
General
Complete name : C:\project\Book0001.wav Format : Wave File size : 19.6 MiB Duration : 58 s 378 ms Overall bit rate mode : Constant Overall bit rate : 2 823 kb/s Audio Format : PCM Format profile : Float Codec ID : 3 Codec ID/Hint : IEEE Duration : 58 s 378 ms Bit rate mode : Constant Bit rate : 2 822 kb/s Channel(s) : 2 channels Sampling rate : 44.1 kHz Bit depth : 32 bits Stream size : 19.6 MiB (100%) Для использования в переменной мне нужно 5-ти значное число и только в единственном экземпляре. Т.е. было а нужно: первый вариант: второй вариант: Помогите с кодом пожалуйста. |
|
Отправлено: 21:39, 08-06-2021 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата greg zakharov:
Тут вот попался старый скрипт, без использования внешних модулей и прочих оберток: 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."$_"|ft idfile,idprop,fullname,type,context -auto|out-file -lit $name -app -enc utf8 } } else { $arr } <# # При необходимости вывода в консоль единственного свойства 27 (общая продолжительность медиафайлов), # этот блок надо раскомментировать 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 } } #> Цитата 9119:
в -item можно указать набор файлов или даже каталог с файлами, а также можно использовать фильтры... в описании скрипта есть примеры. |
||
------- Отправлено: 08:56, 26-06-2021 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать YuS_2, там точность до секунд, посему нет смысла переводить в миллисекунды.
|
Отправлено: 09:05, 26-06-2021 | #22 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
------- Отправлено: 09:46, 26-06-2021 | #23 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать YuS_2, у автора сначала фигурировали миллисекунды, потом он написал, что ему достаточно и секунд.
Я про то, что Shell.Application даёт точность до секунд. Насколько я понимаю. |
Отправлено: 10:35, 26-06-2021 | #24 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
------- Отправлено: 12:39, 26-06-2021 | #25 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Посоветуйте программу для накладывания аудио .wav на видео .wmv | dr.iw | Видео и аудио: обработка и кодирование | 2 | 05-03-2012 00:23 | |
Разное - Утечка ресурсов из-за файла .wav | Peutrov | Microsoft Windows 7 | 12 | 24-12-2011 15:49 | |
[решено] Как получить такие атрибуты видео-файла, как длительность, частота кадров и др? | evg64 | AutoIt | 5 | 12-12-2009 15:43 | |
Мультимедиа - [addon] LameDropXPd (программа для конвертации wav/mp3/wav) | Fraerok | Наборы обновлений для Windows XP/2003/Windows 7 | 7 | 27-08-2009 20:00 | |
[решено] создание .wav файла с кодированием u-law 32Khz | Maxik_BG | Видео и аудио: обработка и кодирование | 12 | 21-11-2006 12:31 |
|