都客直播录屏,直播监控录屏工具,支持抖音、快手、哔哩哔哩等平台自动批量监控和录制,并且支持自动根据时长分解视频、设置封面、添加画中画等功能,特别适合直播切片,团购带货视频制作。
- 支持抖音、快手、哔哩哔哩直播监控并录制。
- 批量自动监控录制。
- 支持设置封面和按时长分割。
- 支持画中画功能,可以结合剪映实现各种复杂的效果。
下面是实现的核心源码:
import win.ui;
import dook;
import comm;
import fsys;
import fsys.config;
import inet;
import inet.downBox;
import inet.http;
import console;
import process;
import process.ffmpeg;
import process.popen
import win.taskScheduler;
import fsys.update.simpleMain;
import dookvideoapi;
/*DSG{
{*/
var winform = win.form(text="都客直播录屏1.0旗舰版 官方:www.dukey.cn ";right=1035;bottom=621;exmode="none")
winform.add(
btnadd={cls="button";text="添加链接";left=32;top=18;right=160;bottom=52;dl=1;dt=1;z=6};
button={cls="button";text="设置保存位置";left=424;top=21;right=526;bottom=46;dl=1;dt=1;z=2};
button2={cls="button";text="打开位置";left=547;top=21;right=631;bottom=45;dl=1;dt=1;z=3};
button3={cls="button";text="选目录";left=767;top=229;right=837;bottom=254;dr=1;dt=1;z=14};
button4={cls="button";text="Button";left=643;top=558;right=734;bottom=600;hide=1;z=15};
button6={cls="button";text="选文件";left=850;top=231;right=920;bottom=256;dr=1;dt=1;z=16};
button7={cls="button";text="选目录";left=766;top=330;right=836;bottom=355;dr=1;dt=1;z=18};
button8={cls="button";text="选文件";left=849;top=330;right=919;bottom=355;dr=1;dt=1;z=19};
checkbox={cls="checkbox";text="添加画中画";left=767;top=275;right=854;bottom=303;dr=1;dt=1;z=11};
checkbox10={cls="checkbox";text="抠黑色";left=946;top=449;right=1018;bottom=473;dr=1;dt=1;z=42};
checkbox11={cls="checkbox";text="抠其它";left=946;top=473;right=1018;bottom=497;dr=1;dt=1;z=43};
checkbox7={cls="checkbox";text="画中画静音";left=754;top=489;right=842;bottom=513;checked=1;dr=1;dt=1;z=34};
checkbox8={cls="checkbox";text="原视频静音";left=850;top=489;right=938;bottom=513;dr=1;dt=1;z=35};
checkbox9={cls="checkbox";text="抠绿幕";left=946;top=425;right=1018;bottom=449;dr=1;dt=1;z=41};
edit={cls="edit";left=770;top=126;right=931;bottom=155;border=1;dr=1;dt=1;multiline=1;z=10};
edit11={cls="edit";text="0";left=781;top=364;right=837;bottom=388;dr=1;dt=1;edge=1;z=21};
edit12={cls="edit";text="0";left=781;top=396;right=837;bottom=420;dr=1;dt=1;edge=1;z=23};
edit13={cls="edit";text="0";left=877;top=364;right=909;bottom=388;dr=1;dt=1;edge=1;z=25};
edit14={cls="edit";text="0";left=941;top=364;right=973;bottom=388;dr=1;dt=1;edge=1;z=27};
edit15={cls="edit";text="1";left=949;top=396;right=973;bottom=420;dr=1;dt=1;edge=1;z=29};
edit17={cls="edit";text="0";left=802;top=521;right=842;bottom=545;dr=1;dt=1;edge=1;z=36};
edit18={cls="edit";text="20";left=890;top=521;right=930;bottom=545;dr=1;dt=1;edge=1;z=37};
edit19={cls="edit";text="000000";left=946;top=495;right=1010;bottom=519;border=1;disabled=1;dr=1;dt=1;z=44};
groupbox={cls="groupbox";text="设置";left=745;top=69;right=1026;bottom=571;db=1;dr=1;dt=1;edge=1;z=8};
lbltips={cls="static";text="欢迎使用都客直播录屏!";left=28;top=573;right=678;bottom=596;color=255;db=1;dl=1;transparent=1;z=4};
lblver={cls="static";text="当前版本:";left=882;top=585;right=978;bottom=609;color=6710886;db=1;dr=1;transparent=1;z=5};
listcol={cls="listview";left=19;top=73;right=734;bottom=546;db=1;dl=1;dr=1;dt=1;edge=1;fullRow=1;gridLines=1;z=7};
radiobutton5={cls="radiobutton";text="按比例";left=754;top=425;right=818;bottom=449;checked=1;dr=1;dt=1;group=1;z=30};
radiobutton6={cls="radiobutton";text="拉伸";left=826;top=425;right=890;bottom=449;dr=1;dt=1;z=31};
radiobutton7={cls="radiobutton";text="随机模式";left=754;top=457;right=834;bottom=481;checked=1;dr=1;dt=1;group=1;z=32};
radiobutton8={cls="radiobutton";text="顺序模式";left=834;top=457;right=914;bottom=481;dr=1;dt=1;z=33};
static={cls="static";text="名称:";left=768;top=99;right=940;bottom=127;dr=1;dt=1;transparent=1;z=9};
static11={cls="static";text="左";left=757;top=364;right=781;bottom=388;dr=1;dt=1;transparent=1;z=20};
static12={cls="static";text="顶";left=757;top=396;right=781;bottom=420;dr=1;dt=1;transparent=1;z=22};
static13={cls="static";text="宽";left=853;top=364;right=869;bottom=388;dr=1;dt=1;transparent=1;z=24};
static14={cls="static";text="高";left=917;top=364;right=933;bottom=388;dr=1;dt=1;transparent=1;z=26};
static15={cls="static";text="透明度(0.01~1)";left=853;top=396;right=941;bottom=420;dr=1;dt=1;transparent=1;z=28};
static16={cls="static";text="到";left=858;top=521;right=874;bottom=537;dr=1;dt=1;transparent=1;z=38};
static17={cls="static";text="秒";left=938;top=521;right=962;bottom=545;dr=1;dt=1;transparent=1;z=39};
static18={cls="static";text="出现在";left=754;top=521;right=794;bottom=545;dr=1;dt=1;transparent=1;z=40};
static2={cls="static";text="封面目录:";left=766;top=176;right=820;bottom=200;dr=1;dt=1;transparent=1;z=13};
static3={cls="static";text="画中画模板关注抖音号: xiuxiulaoniu";left=765;top=22;right=992;bottom=51;color=16711680;dr=1;dt=1;font=LOGFONT(underline=1);transparent=1;z=45};
txtOutDir={cls="edit";text="d:\录屏\";left=201;top=21;right=408;bottom=47;dl=1;dt=1;edge=1;multiline=1;z=1};
txtcover={cls="edit";left=768;top=199;right=990;bottom=225;border=1;dr=1;dt=1;z=12};
txthzh={cls="edit";left=767;top=300;right=989;bottom=326;border=1;dr=1;dt=1;z=17}
)
/*}}*/
//更新检测程序----------------------------------------------------
if( fsys.update.simpleMain(
"都客直播录屏",
"http://www.dukey.cn/update/dlive/version.txt", /*网址也可以改用目录名,并使用服务端代码动态返回version.txt*/
"/download/update-files" /*绿色软件建议改为 io.appData("/软件厂商名/软件名字/update-files") */
)){
return 0; //必须退出 main.aardio 以启动更新
}
fsys.update.simpleMain.onStatusChanged(function(version,description,status){
/*注意此回调可捕获到调用前或调用后的更新状态变更*/
if(status=="ready")
{
fsys.update.simpleMain.checkUpdate(true);
//win.msgbox("发现新版本,下次启动将自动更新!","温馨提示");
}
elseif(status=="updated")
{
/*已更新到新版本并准备启动新版,可使用_ARGV.oldmain获得更新之前的主程序路径,_ARGV.main取得更新后主程序路径*/
}
elseif(status=="complete" or status=="failed")
{
/*当前已启动新版本主程序*/
//console.log(status)
//console.log(io._exedir+"\download\")
if(io.exist(io._exedir+"\download\"))
{
try
{
fsys.delete(io._exedir+"\download\");
}
}
}
})
//-----------------------------------------------------------------------------------
winform.listcol.insertColumn("平台",80);
winform.listcol.insertColumn("主播",180);
winform.listcol.insertColumn("状态",160);
winform.listcol.insertColumn("录制状态",80);
winform.listcol.insertColumn("循环检测",-1);
winform.listcol.insertColumn("",0.01);//6
winform.listcol.insertColumn("",0.01);//7
winform.listcol.insertColumn("",0.01);//8
winform.listcol.insertColumn("",0.01);//9
winform.listcol.insertColumn("",0.01);//10
winform.show();
var ischeckreg=false;
var wbjs="";
winform.getImg=function(url)
{
if(url)
{
import console;
if(string.startWith(url,"//",true))
url="http:"+url;
var http=..inet.whttp("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36");
http.setTimeouts(60000,60000,60000);
http.referer=url;
//console.log(url);
var s=http.get(url);
if(!s)
{
http.referer="";
s=http.get(url);
}
try
{
import zlib;
s = zlib.gzUncompress(s);
}
catch(e)
{}
http.close();
return s;
}
else
{
return null;
}
}
winform.rename=function(curdir,path,i)
{//重命名文件
if(io.exist(path))
{
path=(curdir+tostring(i));
i=i+1;
}
else
{
return path;
}
return winform.rename(curdir,path,i);
}
winform.rename2 = function(filePath) {
var fileInfo = io.splitpath(filePath);
var fileName = fileInfo.name;
var fileExt = fileInfo.ext;
var newFileName = fileName;
var counter = 1;
while (io.exist(filePath)) {
newFileName = fileName ++ counter ++ fileExt;
filePath = fileInfo.dir ++ newFileName;
counter++;
}
return filePath;
}
winform.button2.oncommand = function(id,event){
thread.invoke(
function(url){
import process;
process.execute(url);
},string.trim(winform.txtOutDir.text)
);
}
winform.button.oncommand = function(id,event){
import fsys.dlg;
var dir=fsys.dlg.opendir();
if(dir)
winform.txtOutDir.text=dir;
}
winform.getVersion = function(){//获取版本信息
import fsys.version;
var r = fsys.version.getInfo(io._exepath)
return r.productVersion;
//return string.join({r.productVersion.major; r.productVersion.minor; r.productVersion.build; r.productVersion.revision}, ".");
}
init=function()
{
winform.lblver.text="当前版本:"+tostring(winform.getVersion());
winform.setTimeout(function(){
if(ischeckreg==false)
{
checkReg();
ischeckreg=true;
}
//加载列表
comm.loadset();
comm.tblive=comm.myset.tblive;
for(k,v in comm.tblive)
{
winform.listcol.addItem({v.plat,v.name,v.islive,v.remark,v.ischeck,v.id,v.pid,v.url,v.coverdir,v.hzhdir});
}
}
,2000);
//---------------------------------------------------------------------
}
thread.set("init",init());
/*DSG{
{*/
checkReg=function()
{
var version="1.0.0.01";
import win;
console.log("fds")
//检查是否已经注册.如果没注册--------------------
import fsys.config;
import comm;
G_config=comm.initConfig();
var email=G_config.email;
var hasVideo=G_config.hasvideo;
if(hasVideo) winform.chkHasVideo.checked=true;
var isneedreg=dook.isneedreg();
if(isneedreg=="0")
return false;
elseif(isneedreg!="0" && isneedreg!="1")
{
//支持试用
var limittimes=tonumber(isneedreg);//限制使用次数
if(limittimes==null) limittimes=0;
var usetimes=G_config.usetimes;//使用次数
if(usetimes==null or usetimes<limittimes)
{
winform.linkLogin.hide=false;
return false;
}
}
if(#email==0)
{
isreg=false;
if(isneedreg!="0" && isneedreg!="1")
win.msgbox("你的试用次数已用完,如有需要请先注册!");
var child= winform.loadForm("\ui\RegFrm.aardio");
result = child.doModal(winform.hwnd);
if(!result || result!="ok")
{
winform.close();
return;
}
}
else//说明已经注册过.
{
var regkey=G_config.regkey;
var email=G_config.email;
var signkey=dook.GetSignKey();
var token=dook.GetToken(signkey,email,regkey,"210");
select(token)
{
case "expire"
{
if(email=="1902976602@qq.com")
{
var child= winform.loadForm("\ui\regfrm.aardio");
result = child.doModal(winform.hwnd);
if(!result || result!="ok")
{
win.quitMessage();
return;
}
}
else
{
win.msgbox("你的账号已经过期,请续费!");
//点此自助购买
var url="http://www.dukyun.com/plugins/dfpay/pay.aspx?signkey=%s";
url=string.format(url,signkey);
var frmChild = winform.loadForm("\dlg\view.aardio");
publish("url",url);
frmChild.doModal();
winform.close();
return;
}
}
case "nouser"
{
win.msgbox("无此账号,请先购买或者检查你的email是否正确!");
var child= winform.loadForm("\ui\regfrm.aardio");
result = child.doModal(winform.hwnd);
if(!result || result!="ok")
{
win.quitMessage();
return;
}
return ;
}
case "ok"
{
var tip=dook.GetExpireDate(email,version);
select(tip)
{
case "destroy"
{
import sys;
sys.restart();
}
case "needupdate"
{
win.msgbox("发现新版本,请升级后使用,官方:http://www.dukey.cn");
process.execute("http://www.dukey.cn/");
winform.close();
}
}
}
case "error"
{
win.quitMessage();
return;
}
else
{
isreg=false;
var child= winform.loadForm("\ui\regfrm.aardio");
result = child.doModal(winform.hwnd);
if(!result || result!="ok")
{
win.quitMessage();
return;
}
}
}
select(token) {
case "nologin" {
winform.text+=" [未登录]";
}
case "ok" {
winform.text+=" [已登录:"+G_config.email+"]";
}
case "expire"{
winform.text+=" [已登录:"+G_config.email+" 已过期]";
}
}
}
}
/*}}*/
winform.btnadd.oncommand = function(id,event){
var frmChild = winform.loadForm("\dlg\view.aardio");
frmChild.doModal();
}
winform.listcol.onnotify = function(id,code,ptr){
select(code) {
case 0xFFFFFFFB/*_NM_RCLICK*/ {
var x,y = win.getCursorPos();
winform.popmenu.popup(x,y,true);//弹出菜单
}
case 0xFFFFFFFE/*_NM_CLICK*/{
var dd= winform.listcol.getItem();
//console.dump(dd)
}
case 0xFFFFFFF4/*_NM_CUSTOMDRAW*/
{
var lvcd = winform.listcol.getNotifyCustomDraw(code,ptr);
if( lvcd.nmcd.dwDrawStage == 0x10001/*_CDDS_ITEMPREPAINT*/)
return 0x20/*_CDRF_NOTIFYSUBITEMDRAW*/
elseif( lvcd.nmcd.dwDrawStage == 1/*_CDDS_PREPAINT*/ ){
return 0x20/*_CDRF_NOTIFYITEMDRAW*/;
}
elseif( lvcd.nmcd.dwDrawStage == ( 0x10001/*_CDDS_ITEMPREPAINT*/ | 0x20000/*_CDDS_SUBITEM*/) ){
//注意这里 iSubItem 的索引自0开始( 其他函数通常自1开始 )
lvcd.clrText = lvcd.iSubItem ==3 ? gdi.RGB(255,0,0) : gdi.RGB(0,0,0);
lvcd.update()
return 0/*_CDRF_DODEFAULT*/
}
}
}
}