|
Компьютерный форум 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 |
Старожил Сообщения: 286
|
Профиль | Отправить PM | Цитировать DJ Mogarych, хороший вариант. Спасибо.
помогите с кодировкой пож... $path = "E:\!!Youtube\АРХИВ\!временное\Ролики\!в работе\tmp\1\Book0001.wav" $shell = New-Object -COMObject Shell.Application $folder = Split-Path $path $file = Split-Path $path -Leaf $shellfolder = $shell.Namespace($folder) $shellfile = $shellfolder.ParseName($file) $seconds = [TimeSpan]::Parse("$($shellfolder.GetDetailsOf($shellfile, 27);)").totalseconds _________________________________________________________ $frames = $seconds * 30 $music_path = "E:\\!!Youtube\\АРХИВ\\!временное\\Ролики\\!в работе\\tmp\\1\\Book0001.wav" $video_path = "E:\\!!Youtube\\АРХИВ\\!временное\\Ролики\\!в работе\\tmp\\1\\ProShow Slideshow 1.mp4" Get-Content C:\project\kc\temp_1.tscproj | ForEach-Object {$_ -replace "music_path", $music_path} | Set-Content C:\project\kc\temp_2.tscproj Get-Content C:\project\kc\temp_2.tscproj | ForEach-Object {$_ -replace "video_path", $video_path} | Set-Content C:\project\kc\temp_final.tscproj при выполнении -replace, в конечном файле вместо (русских) значений из переменных - кракозябры! (скрин кое как прикрепил) Кодировка начального файла - utf-8. (без BOM). Так должно и остаться. Помогите с кодом пож |
Последний раз редактировалось 9119, 09-06-2021 в 13:22. Отправлено: 12:35, 09-06-2021 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
fascinating rhythm Сообщения: 6494
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 13:22, 09-06-2021 | #12 |
Старожил Сообщения: 286
|
Профиль | Отправить PM | Цитировать огромное спасибо, значение вставляется корректно.
но на выходе получаем utf-8 С BOM (если верить notepad++). А софту, который использует этот файл - нужен обычный UTF-8, и с utf-8 С BOM он не работает (пишет мол файл поврежден) Стоит в notepad++ выставить обычный UTF-8, сохранить и все ок, все работает. Могу сразу после замены получить обычный UTF-8 (БЕЗ BOM)? дает желаемую кодировку, но все русские буквы внутри файла становятся "???" |
Последний раз редактировалось 9119, 09-06-2021 в 14:51. Отправлено: 14:24, 09-06-2021 | #13 |
fascinating rhythm Сообщения: 6494
|
Профиль | Отправить PM | Цитировать Потому что -Encoding ASCII - это 7-битная кодировка.
Судя по всему, проще всего поставить Powershell Core (https://github.com/PowerShell/powers...eleases/latest), там UTF8 without BOM - это кодировка по умолчанию. https://stackoverflow.com/a/34969243 Либо воспользоваться решением оттуда же. Есть вариант выключить BOM на уровне системы (в Windows 10), но лично я не стал бы так делать. |
------- Последний раз редактировалось DJ Mogarych, 09-06-2021 в 15:19. Отправлено: 15:12, 09-06-2021 | #14 |
Старожил Сообщения: 286
|
Профиль | Отправить PM | Цитировать DJ Mogarych, поставил core. Спасибо
|
Отправлено: 15:46, 09-06-2021 | #15 |
Забанен Сообщения: 793
|
DJ Mogarych, уже дал ответ как решается задача, через системный шелл. Давайте до кучи рассмотрим как вычислить продолжительность математически (Iska вроде бы сетовал, что ему не шибко хочется заморачиваться с расчётами). Для примера возьмём RIFF Wave (это те самые WAV, что можно отыскать в %systemroot%\Media). Формат такого WAV беспрецедентно прост: первые 12 байт - т.н. RIFF описатель, следующий 24 байта - описатели формата, далее два блока по четыре байта - пролог данных, а там и сами данные.
Как видим всё просто, бутылка, дабы разобраться, нам не потребуется. Обобщённый алгоритм вычисления длительности в миллисекундах: Перевести в секунды, минуты, часы (нужное подчеркнуть) полученное значение, полагаю, уже не составит труда. |
Последний раз редактировалось greg zakharov, 09-06-2021 в 17:18. Отправлено: 17:02, 09-06-2021 | #16 |
Старожил Сообщения: 248
|
Профиль | Отправить PM | Цитировать @DJ Mogarych а не проще разве отрезать бом ?
Directory: C:\Users\Serguei Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 6/10/2021 12:01 AM 10 test1.txt.new -a---- 6/10/2021 12:00 AM 13 test1.txt od -x test1.txt ; od -x test1.txt.new 0000000 bbef d1bf d082 d0b5 d1ba d181 0082 0000015 0000000 82d1 b5d0 bad0 81d1 82d1 0000012 The UTF-8 representation of the BOM is the (hexadecimal) byte sequence 0xEF,0xBB,0xBF. сам скрипт: param( [String]$source, [String]$dest = "${source}.new" ) # https://stackoverflow.com/questions/288111/remove-byte-order-mark-from-a-file-readallbytes-byte $text = [System.IO.File]::ReadAllText($source) $writer = new-object System.IO.StreamWriter($dest, $false, (new-object System.Text.UTF8Encoding($false))) $writer.Write($text) $writer.Close() |
Отправлено: 07:15, 10-06-2021 | #17 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Serguei Kouzmine:
|
|
Отправлено: 21:54, 10-06-2021 | #18 |
Старожил Сообщения: 248
|
Профиль | Отправить PM | Цитировать не писать BOM можно в своих логах а в чужих его придется отрезать
|
Отправлено: 04:36, 11-06-2021 | #19 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Serguei Kouzmine, в каком сообщении темы Вы видите «чужой лог»?
|
Отправлено: 19:23, 11-06-2021 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Посоветуйте программу для накладывания аудио .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 |
|