当前位置:网站首页>FFmpeg录制视频、停止(VB.net,踩坑,类库——10)
FFmpeg录制视频、停止(VB.net,踩坑,类库——10)
2022-07-17 11:45:00 【小虞163】
网上的好多教程,关于FFmpeg录制视频的,要安装Screen Capturer Recorder,
我们其实不需要去安装一大坨的东西
1、还是要下载、安装
但是我们只需要用到其中的2个组件
audio_sniffer是在目录:Screen Capturer Recorder\vendor\virtual-audio
根据系统需要选择相应的组件,我们默认使用非x64的,即x32
安装后提取这两个选中的文件就可以卸载了
在使用之前先干一件事,在2个项目中分别新建一个应用程序清单文件,如果你只有一个项目,就只需要一个应用程序清单文件。把
注释部分的第二行替换 "-->"后面的内容(我已经替换好了)这样,主程序就会以管理员身份运行,以管理员身份重新启动visual studio。目的是注册那两个组件,让FFmpeg识别,组件的名字不要改动。(一定要使用管理员身份)
注册的代码:
Public Class RegDll
Public Function RegRec()
VideoProcess.SharedP("C:\WINDOWS\system32\cmd.exe", "/c /q regsvr32 /u " & Application.StartupPath & "\screen-capture-recorder.dll", True)
VideoProcess.SharedP("C:\WINDOWS\system32\cmd.exe", "/c /q regsvr32 " & Application.StartupPath & "\screen-capture-recorder.dll", True)
VideoProcess.SharedP("C:\WINDOWS\system32\cmd.exe", "/c /q regsvr32 /u " & Application.StartupPath & "\audio_sniffer.dll", True)
VideoProcess.SharedP("C:\WINDOWS\system32\cmd.exe", "/c /q regsvr32 " & Application.StartupPath & "\audio_snifferr.dll", True)
End Function
Public Shared Function SharedP(s As String, Arguments As String, nowindow As Boolean)
Dim p As New Process
p.StartInfo.FileName = s
p.StartInfo.Arguments = Arguments
p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardError = True
p.StartInfo.CreateNoWindow = nowindow
p.Start()
p.WaitForExit()
p.StandardError.ReadToEnd()
Return p.StandardError.ReadToEnd()
p.Close()
p.Dispose()
End Function
End Class
注:可以把注册和sharedP 写在同一个类里,我的sharedP写在了VideoProcess类中
主窗体先注册这两个组件,为了在给别人用的时候,可以实现操作简单化,让程序自己注册,可以在Form_Load时注册,即执行RegRec函数(function,可以改成sub)
2、在注册的前提下,我们就不在FFmpeg测试了,肯定有了
FFmpeg -list_devices true -f dshow -i dummy
3、写2个过程,不一定要是函数,因为没有可以返回的值
Public PRec As New Process
Public Function StartRecordVid(ffmpeg As String, out As String)
PRec.StartInfo.FileName = "cmd"
PRec.StartInfo.Arguments = "/c " & ffmpeg & " -f dshow -i audio=" & Chr(34) & "麦克风阵列 (Conexant SmartAudio HD)" & Chr(34) & " -f dshow -i audio=" & Chr(34) & "virtual-audio-capturer" & Chr(34) & " -filter_complex amix=inputs=2:duration=first:dropout_transition=0 -f dshow -i video=" & Chr(34) & "screen-capture-recorder" & Chr(34) & " -pix_fmt yuv420p " & out & " -y"
PRec.StartInfo.UseShellExecute = False
PRec.StartInfo.CreateNoWindow = true
'PRec.StartInfo.RedirectStandardOutput = True
'PRec.StartInfo.RedirectStandardError = True
PRec.StartInfo.RedirectStandardInput = True
PRec.Start()
PRec.EnableRaisingEvents = True
End Function
Public Function EndRecordVid()
PRec.StandardInput.WriteLine("q")
PRec.StandardInput.AutoFlush = True
PRec.Close()
PRec.Dispose()
End Function
输入的时候需要用到 " 可以使用chr(34)代替
值得注意的是:由于在看别人的教程时没有细致考虑,导致先执行StartRecordVid函数时,PRec已经close + dispose了,以至于在调用停止的时候显示StandardInput尚未重定向这个错误
这是错误的代码:
Public Function StartRecordVid(ffmpeg As String, out As String)
PRec.StartInfo.FileName = "cmd"
PRec.StartInfo.Arguments = "/c " & ffmpeg & " -f dshow -i audio=" & Chr(34) & "麦克风阵列 (Conexant SmartAudio HD)" & Chr(34) & " -f dshow -i audio=" & Chr(34) & "virtual-audio-capturer" & Chr(34) & " -filter_complex amix=inputs=2:duration=first:dropout_transition=0 -f dshow -i video=" & Chr(34) & "screen-capture-recorder" & Chr(34) & " -pix_fmt yuv420p " & out & " -y"
PRec.StartInfo.UseShellExecute = False
PRec.StartInfo.CreateNoWindow = true
'PRec.StartInfo.RedirectStandardOutput = True
'PRec.StartInfo.RedirectStandardError = True
PRec.StartInfo.RedirectStandardInput = True
PRec.Start()
PRec.EnableRaisingEvents = True
PRec.Close()
PRec.Dispose()
End Function
Public Function EndRecordVid()
PRec.StandardInput.WriteLine("q")
PRec.StandardInput.AutoFlush = True
End Function
这是一个坑,不要去踩哦
最后:不要忘记把FFmpeg所有的进程全部结束任务,
Public Function EndRecordVid()
PRec.StandardInput.WriteLine("q")
PRec.StandardInput.AutoFlush = True
' PRec.Close()
'PRec.Dispose()
PRec.Kill()
End Function
加入kill指令,以便移动视频,不需要close 和dispose了。
边栏推荐
- Clwy permission management (I) -- project construction
- Cmake -- Notes
- 【分离式超图像分类平台】使用深度学习中那些令人兴奋的模型搭建图像分类平台
- Network Security Learning (Qianfeng network security notes) 1-- building virtual machines
- [Download] take you to use FRP to achieve intranet penetration detailed tutorial!
- 2022.07.13 暑假集训 个人排位赛(八)
- 506.相对名次
- [200 opencv routines] 233 Moment invariants of regional features
- 二维数组与稀疏数组之间的转换
- Excel数据插入Mysql数据库可能遇到的问题
猜你喜欢
[fishing artifact] UI library second low code tool - form part (II) sub control
【C语言】浅涉常量、变量
ES6中的let、const、var
网络安全学习(千锋网络安全笔记)1--搭建虚拟机
Clwy authority management (II) -- user module
[email protected])|罗丹明6G修饰MOF材料|过氧化氢酶@ZIF复合材料|mof材料"/>
镧系金属有机骨架([email protected])|罗丹明6G修饰MOF材料|过氧化氢酶@ZIF复合材料|mof材料
Huawei wireless devices are configured with static load balancing
Clwy permission management (III) -- user group module
[email protected]载体)|UiO-66/CoSO复合材料|ZIF-67纳米晶表面修饰六咪唑环三磷腈"/>
硫化铜纳米粒/ZIF-8复合材料([email protected]载体)|UiO-66/CoSO复合材料|ZIF-67纳米晶表面修饰六咪唑环三磷腈
负载型金属有机骨架ZIF-8/氧化石墨烯储氢材料|二氧化钛/ZIF-8复合材料|二氧化硅@ZIF8纳米材料
随机推荐
ES6中的let、const、var
钴铁双金属有机骨架Cox/MIL-100(Fe)|光敏剂@[email protected]|负载CQDs的FeMIL101材料|mof试剂
Network Security Learning (Qianfeng network security notes) 1-- building virtual machines
数据包知识
506.相对名次
Huawei wireless device configuration dynamic load balancing
壳聚糖包裹PCN224纳米粒子|金属-有机骨架Fe-MIL-88NH2|镍基MOF材料(Ni-MOF/NF)
cmake -- 笔记
CLWY权限管理(三)--- 用户组模块
mysql5.6 alter语句
基于AI智能关联技术的5G网络切片研究与实现
面向6G的智能反射面无线通信综述
Brilliant use output
mof定制产品|N-K2Ti4O9/g-C3N4/UiO-66三元复合材料|纸基Au-AgInSe2-ZIF-8纳米复合材料
Packet knowledge
[动态规划]DP27 跳跃游戏(二)-中等
18. Shell Scripting (1)
Idea stuck and reported an error: UI was frozen for xxxxx MS problem solving
Chapter 4 - first order multi-agent system consistency - > pilot follow system consistency [program code]
Data Lake (XII): integration of spark3.1.2 and iceberg0.12.1