Войти

Показать полную графическую версию : [решено] автоответ bat-нику во время его работы с последующим продолжением


nwss
14-12-2021, 14:07
Заранее извиняюсь за туманное название темы, сейчас объясню возникшую передо мной задачу.

Для упрощения своего работы сделал следующий командный файл. Его назначение: фиксация какой-либо информации в виде аудио-видео-заметок.



chcp 866>nul
setlocal enableextensions enabledelayedexpansion
set pt=%USERPROFILE%\desktop\zayavki
echo %time:~0,8% | sed s/:/./g>%TEMP%\zayavka.tmp
set /p clocks=<%TEMP%\zayavka.tmp
set "name=%pt%\%1-%date%-%clocks%.wmv"
@ffmpeg -f gdigrab -framerate 15 -i desktop -f dshow -i audio="Microphone (2- High Definition Audio Device)" "%name%"
for /f %%a in ('echo %name%') do ffmpeg -i "%name%" -c:v libx264 -crf 28 "%pt%\%%~na.mp4
del /f /q /s "%name%"



Прошу не показывать пальцем и не смеяться - сделал как умею. Конструктивную критику же, наоборот, приветствую :)
Он находится у меня в папке Windows чтобы я мог вызывать его из любого места просто запустив командную строку. Принимает 1 аргумент который будет частью имени созданного файла.
https://youtu.be/oAi1lSjgSBY - демонстрация работы файла.

И наконец мой вопрос - на 0:27 в видео я нажимаю CTRL+C чтобы остановить запись, и командный файл спрашивает, продолжить ли ему исполнение или вовсе завершиться?
Как мне избежать этого вопроса и автоматически разрешить ему дальнейшее исполнение?
Если что ffmpeg - консольная утилита для работы с видео-аудио файлами, их конвертации, записи, вещания и т.п. ссылка на оф сайт - https://ffmpeg.org/

Заранее благодарю всех за помощь.

DJ Mogarych
14-12-2021, 14:20
Надо нажимать не "Ctrl+C", а "q".

nwss
14-12-2021, 14:27
Не реагирует на q.

DJ Mogarych
14-12-2021, 14:44
Непонятно почему, в Powershell реагирует нормально.
Просто после Ctrl+C с большой вероятностью получится битый файл.

nwss
14-12-2021, 15:08
Ни единого битого файла. Пользуюсь много лет уже.
Попробую вызвать ffmpeg через ps.

upd. так не выходит. не дружу с powershell. подскажите как правильно вызвать?

powershell -ExecutionPolicy Bypass -Command 'ffmpeg -f gdigrab -framerate 15 -i desktop -f dshow -i audio="Microphone (2- High Definition Audio Device)" "%name%"'

DJ Mogarych
14-12-2021, 15:32
Так не выйдет, это надо весь батник переписывать под PS. Попробуйте просто запустить строку записи прямо в PS и остановить её с помощью q.

nwss
14-12-2021, 15:36
Да, через ps корректно завершается запись по q.
Переписать его под powershell я не осилю :(
Может кто предложит еще какие-то варианты. Я немного знаком с ahk.

DJ Mogarych
14-12-2021, 16:39
Опишите, что он делает, код cmd я не очень понимаю.
Он пишет в wmv, а потом конвертирует в mp4? Почему сразу в mp4 не писать?

nwss
14-12-2021, 17:23
Потому что в mp4 почему-то не схватывает вывод с моего микрофона.
Точнее как только я начинаю говорить что-то - звук на видео просто пропадает.
Не знаю в чем дело, но вышел из ситуации вот так.
Добавил комментарии к bat-нику.


rem Рудимент, с кодировкой вроде и так впорядке все
chcp 866>nul

rem Тоже осталось от предыдущих экспериментов, не нужно
setlocal enableextensions enabledelayedexpansion

rem Следующие строчки формируют имя файла на выходе.
rem Костыль с выводом в файл в темп сделал потому, что были какие-то проблемы
rem именно с именем файла на выходе
rem сейчас получается файл в формате %1-принимает первый аргумент при запуске
rem %date% - текущая дата, %clocks% - время до секунды (заменяя : на . с помощью sed)
set pt=%USERPROFILE%\desktop\zayavki
echo %time:~0,8% | sed s/:/./g>%TEMP%\zayavka.tmp
set /p clocks=<%TEMP%\zayavka.tmp
set "name=%pt%\%1-%date%-%clocks%.wmv"

rem запуск записи с экрана + микрофона
@ffmpeg -f gdigrab -framerate 15 -i desktop -f dshow -i audio="Microphone (2- High Definition Audio Device)" "%name%"

rem конвертируем wmv в mp4. %~na - только имя файла
for /f %%a in ('echo %name%') do ffmpeg -i "%name%" -c:v libx264 -crf 28 "%pt%\%%~na.mp4

rem удаляем wmv оригинал
del /f /q /s "%name%"

DJ Mogarych
14-12-2021, 17:51
Что-то вроде того:

$path = "$env:USERPROFILE\desktop\zayavki\$args-$(get-date -f "yyyy.MM.dd-HH.mm.ss")"
& ffmpeg -f gdigrab -framerate 15 -i desktop -f dshow -i audio="Microphone (2- High Definition Audio Device)" "$path.wmv"
& ffmpeg -i "$path.wmv" -c:v libx264 -crf 28 "$path.mp4"
del "$path.wmv" -force -confirm:$false


Вызвать скрипт ("Запись" - аргумент):

C:\temp\recording.ps1 Запись

nwss
15-12-2021, 09:29
work like a charm, мое почтение :drug:
жаль что у меня какая-то детская обида на powershell. наверно за то, что не поддался мне когда пытался его освоить.




© OSzone.net 2001-2012