Запись звука из командной строки

Windows 7

Для записи звука на семерке можно использовать стандартную утилиту

psexec -s -d C:\WINDOWS\System32\SoundRecorder.exe "/FILE C:\Temp\Test.wma /DURATION 0:0:20"
Ключ -d позволяет не ждать завершения записи

Windows 10

После ввода окружения Metro SoundRecorder.exe был удален из системы и для Win10 требуется другой механизм.
Предлагаю использовать стороннюю библиотеку, для работы с видио и аудио файлами, ffmpeg

Скачиваем ffmpeg и переходим в каталог его размещения.

Для получения ориентира, я решил записать стандартным средством звукозаписи пример аудиофайла.
Кстати запустить его можно из консоли таким образом:

explorer.exe shell:appsFolder\Microsoft.WindowsSoundRecorder_8wekyb3d8bbwe!App

Нужно мне это было что бы посмотреть его параметры, так как качество меня вполне устраивало.

.\ffmpeg -i "C:\Users\$env:username\Documents\Аудиозаписи\Запись.m4a"

Видим:

Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 193 kb/s

Контейнер: .m4a; Кодек: aac (LC); Битрейт: 196 kb/s

Далее смотрим список устройств чтобы найти ваш микрофон. Для этого нужно ввести следующую команду:

.\ffmpeg -list_devices true -f dshow -i dummy

На этом шаге я столкнулся с тем, что имя моего микрофона отображалось почему то кракозябрами. Такими ╨Ь╨╕╨║╤А╨╛╤Д╨╛╨╜ либо такими Микрофон.
В данном случае это слово «Микрофон» в кодировках CP866 и CP1251, соответственно.

При подобной проблеме, можете или перейти на сайт с декодером(первый в поиске),
или же использовать Alternative name — буквенно-цифровой ID устройства, который всегда отображается нормально.

Я выбрал такой же кодек как в файле-примере, поставил битрейт повыше, и в конечном виде команда у меня приняла такой вид.

.\ffmpeg -f dshow -i audio="Микрофон (USB PnP Sound Device)" -acodec aac -b:a 256k -t 10 out.m4a

Можно выбрать любой битрейт, но на официальном сайте выше 256 не рекомендуют, т.к. это избыточно.
Для минимального битрейта используйте ключ-q:a 0

Ключ -t определяет длительность записи. Можно и без него, но при остановке команды из Powershell, файл при запуске сообщает о повреждении.  А остановить запись штатным образом, нажатием «Q», не дает сам PoSh.

В то же время запуск и завершение этой команды в CMD происходят успешно.

Альтернатива для Powershell может быть запись в MP3

.\ffmpeg -f dshow -i audio="Микрофон (USB PnP Sound Device)" -acodec libmp3lame -b:a 256k out.mp3

Используется другой кодек и следовательно формат файла. Качество особо не ухудшается. Но самое главное, что при остановке выполнения сценария PoSh, файл не повреждается.

И еще пару команд:

psexec -s -d powershell -ExecutionPolicy RemoteSigned -command "C:\temp\ffmpeg.exe -f dshow -i audio='Микрофон (USB PnP Sound Device)' -acodec libmp3lame -b:a 256k -t 5 C:\temp\out.mp3"

Конечно же библиотека должна быть скопирована предварительно.

psexec -s -c C:\temp\ffmpeg.exe -f dshow -i audio='Микрофон (USB PnP Sound Device)' -acodec libmp3lame -b:a 256k -t 5 C:\temp\out.mp3

А в данном примере psexec сам копирует на удаленный компьютер файл и выполняет его с заданными параметрами

Добавить комментарий

Ваш адрес email не будет опубликован.