![]() |
Поместить вывод команды в переменную
Здравствуйте. Я пытаюсь настроить тригер на громкость аудио файла.
Команда выглядит так: Код:
ffmpeg -i "%~1" -af "volumedetect" -f null nul Вывод выглядит так:
![]() Нужное число это mean_volume: -15.5 dB Подскажите пожалуйста как в переменную _var поместить значение mean_volume. Очень желательно до точки. То есть не 15.5 а 15 Спасибо. |
ateka, Выполните команду в виде:
Код:
ffmpeg -i "%~1" -af "volumedetect" -f null nul >c:\zzzzzzzzzzzzzz.txt |
Вложений: 1
Код:
ffmpeg -i "test.mp4" -af "volumedetect" -f null nul 2>temp.txt output
Код:
ffmpeg version git-2020-05-13-b12b053 Copyright (c) 2000-2020 the FFmpeg developers |
ateka, Полноценно отладить не могу, нет ffmpeg, пробуйте:
Код:
@Echo Off |
Супер! Спасибо большое! Как часы!
драфт
Код:
::@Echo Off |
Код:
ffmpeg -i "%~1" -af "volumedetect" -f null nul|sed -n "/mean_volume:/s/^.*[:]\s[-]\?//;T;s/[.].*$//p" |
Цитата:
|
А в Пауэршелле как запихнуть вывод ффмпега в переменную? Но только чтобы без промежуточных текстовых файлов.
|
Цитата:
Код:
$result = & ffmpeg.exe |
Цитата:
Код:
$a = ffmpeg -i "file.flac" -af "volumedetect" -f null nul 2>&1 |
Busla, ну уж до этого я и сам мог догадаться - так не работает.
Foreigner, да, работает. Но нельзя ли без перенаправления, и почему stderr, если после выполнения команды в переменной $error ничего нет? Хочется какого-то более "родного" решения для PS, менее костыльного. |
DJ Mogarych, Оно еще и по разному выводит -- в Windows PowerShell вообще бедово, а в Core, только попробовал, нормально:
Код:
[string[]] $a = ffmpeg -i ".\20 - Contact Lost.flac" -af "volumedetect" -f null nul 2>&1 |
Цитата:
и на Win10 и на Win2012R2 (не конкретно с ffmpeg, а с консольными exe) но вообще - это "магия", оно пытается интерпретировать строку как команду PoSh, зависит от конкретных атрибутов в том числе |
Почему не пользовать стандартные методы запуска файла на исполнение, ожидание завершения и чтение потоков stdout и stderr? Только не спрашивайте как, я помнить — не помню, а сил сегодня ковыряться в документации .Net нет.
|
Код:
invoke-expression 'ffmpeg -i ".\20 - Contact Lost.flac" -af "volumedetect" -f null nul' -errorvariable stderr 2>$null |
Iska, стандартный "метод" - Start-Process, а ваша привычка на каждый чих ковыряться в .Net - это как раз нестандартный метод
К сожалению, туда встроена своя "магия", которая не всегда корректно отрабатывает. Из широко известных примеров - 7zip при запуске через Start-Process (или прямое обращение к System.Diagnostics.Process) изредка падает. |
Busla, пусть будет Start-Process, если оно позволяет сделать искомое. А оно позволяет? В случае .Net я вижу простое:
Цитата:
Цитата:
|
Я так понимаю, что если ffmpeg так разработан, что он все отдает через stderr, то ничего не попишешь. Пробовал и под виндоус и под линукс. Единственное, что могу сказать, pwsh гораздо лучше обработал вывод и на ходу сменил тип на стринг-массив без потери форматирования, powershell сделало тоже самое, но криво -- текст поплыл, добавились переносы. В интернете так же много информации по этому поводу. Ну вот так они сделали. Им наверное видней.
|
Время: 20:38. |
Время: 20:38.
© OSzone.net 2001-