Я хочу использовать инструмент командной строки vlc для захвата видео с USB-камеры (на Windows!). Проблема в том, что неясно, когда прекращать запись. Цель состоит в том, чтобы захватить лицо пользователей, когда он запускает программу. Важно иметь правильное время. Я запуск VLC как это:VLC - прерывать поток/транскодирование интерактивно через командную строку на windows/python/программный захват видео на окнах
cmd = ['C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe', 'dshow://',
'--dshow-size=640x480', '--dshow-adev=None', '--dshow-fps=30',
'--dshow-vdev=USB_Camera',
'--sout=#transcode{vcodec=h264,vb=1024,fps=30,width=640,deinterlace}
:standard{access=file,mux=ps,dst=
"path\\to\\dstfile"}',
'--qt-start-minimized']
p = subprocess.Popen(cmd)
# ... user interaction and stuff ...
# ???? can i do sth. better here ???
p.kill()
Проблема с вызовом, чтобы убить в том, что процесс перекодировки прерывается, который портит видео файла (он по-прежнему играть, но есть фиктивные кадры в конце концов, и частота кадров/время отображения не выравниваются).
Мой вопрос: Есть ли какая-либо чистая возможность закончить процесс правильно? Любой другой сигнал, я пытался использовать, как
signal.SIGINT
signal.CTRL_C_EVENT
...
не удалось прекратить VLC, или убили его и, таким образом, получают ту же коррупцию (я не помню, каждый сигнал, я пытался)
Если кто-нибудь имеет лучшее представление о том, как захватить видео с веб-камеры программным способом (т.е. запуск/прекратить из сценария), вы радушны. – knthls
Попробуйте использовать интерфейс [rc] (https://wiki.videolan.org/Documentation:Modules/rc) с помощью сокета. У меня есть пример в [этом ответе] (http://stackoverflow.com/a/8111621/205580). – eryksun
Windows не имеет сигналов, поэтому вы можете отправлять команды CTRL_C_EVENT и CTRL_BREAK_EVENT в группу процессов в консоли, к которой вы подключены, или все процессы, подключенные к консоли (включая вашу собственную), с помощью группы таргетинга 0. Когда вы создаете процесс, вы можете назначить его как лидерство новой группы с помощью флага создания 'CREATE_NEW_PROCESS_GROUP', что имеет смысл только в том случае, если это консольный процесс, или позже выделяет консоль. Этот флаг создания отключает Ctrl + C в процессе, поэтому, если он вручную не включает все, что вы можете надежно отправить, это Ctrl + Break. – eryksun