Example #1
0
def get_download_url(s, t, user, song = "nothing"):
    print('[log]getting url:'+t+str(s))
    params = urllib.parse.urlencode({t: s})
    f = urllib.request.urlopen(download_api_url + "?%s" % params)
    url = f.read().decode('utf-8')
    send_dm('已启动下载'+t+str(s))
    try:
        filename = str(time.mktime(datetime.datetime.now().timetuple()))
        if(t == 'id'):
            urllib.request.urlretrieve(url, path+'/downloads/'+filename+'.mp3')
            if(song == "nothing"):
                ass_maker.make_ass(filename,'当前歌曲网易云id:'+str(s)+"\\N点播人:"+user,path)
                ass_maker.make_info(filename,'id:'+str(s)+",点播人:"+user,path)
            else:
                ass_maker.make_ass(filename,'当前网易云id:'+str(s)+"\\N点播关键词:"+song+"\\N点播人:"+user,path)
                ass_maker.make_info(filename,'id:'+str(s)+",点的:"+song+",点播人:"+user,path)
        elif(t == 'mv'):
            urllib.request.urlretrieve(url, path+'/downloads/'+filename+'.mp4')
            if(song == "nothing"):
                ass_maker.make_ass(filename,'当前MV网易云id:'+str(s)+"\\N点播人:"+user,path)
                ass_maker.make_info(filename,'MVid:'+str(s)+",点播人:"+user,path)
            else:
                ass_maker.make_ass(filename,'当前MV网易云id:'+str(s)+"\\NMV点播关键词:"+song+"\\N点播人:"+user,path)
                ass_maker.make_ass(filename,'MVid:'+str(s)+",MV:"+song+",点播人:"+user,path)
        send_dm('下载完成,已加入播放队列排队播放')
        print('[log]已添加排队项目:'+t+str(s))
    except:
        send_dm('出错了:下载出错,请换一首或重试')
        print('[log]下载文件出错:'+t+str(s)+',url:'+url)
        del_file(filename+'.mp3')
        del_file(filename+'.mp4')
    return url
Example #2
0
def download_av(video_url, user):
    global encode_lock
    if (clean_files()):
        send_dm_long('树莓存储空间已爆炸,请联系up')
        return
    try:
        v_format = 'flv'
        print('[log]downloading bilibili video:' + str(video_url))
        video_info = json.loads(
            os.popen('you-get ' + video_url + ' --json').read())
        video_title = video_info['title']
        send_dm_long('正在下载' + video_title)
        #send_dm('注意,视频下载十分费时,请耐心等待')
        filename = str(time.mktime(datetime.datetime.now().timetuple()))
        os.system('you-get ' + video_url + ' --format=flv -o ' + path +
                  '/downloads -O ' + filename + 'rendering1')
        print('you-get ' + video_url + ' --format=flv -o ' + path +
              '/downloads -O ' + filename + 'rendering1')
        if (os.path.isfile(path + '/downloads/' + filename +
                           'rendering1.flv') == False):
            os.system('you-get ' + video_url + ' --format=mp4 -o ' + path +
                      '/downloads -O ' + filename + 'rendering1')
            print('you-get ' + video_url + ' --format=mp4 -o ' + path +
                  '/downloads -O ' + filename + 'rendering1')
            v_format = 'mp4'
        if (os.path.isfile(path + '/downloads/' + filename + 'rendering1.' +
                           v_format) == False):
            send_dm_long('视频' + video_title + '下载失败,请重试')
            return
        ass_maker.make_ass(
            filename + 'ok',
            '点播人:' + user + "\\N视频:" + video_title + "\\N" + video_url, path)
        ass_maker.make_info(filename + 'ok',
                            '视频:' + video_title + ",点播人:" + user, path)
        send_dm_long('视频' + video_title + '下载完成,等待渲染')
        while (encode_lock):
            time.sleep(1)
        encode_lock = True
        send_dm_long('视频' + video_title + '正在渲染')
        os.system('ffmpeg -i "' + path + '/downloads/' + filename +
                  'rendering1.' + v_format +
                  '" -aspect 16:9 -vf "scale=1280:720, ass=' + path +
                  "/downloads/" + filename + 'ok.ass' +
                  '" -c:v libx264 -preset ultrafast -maxrate ' +
                  var_set.maxbitrate +
                  'k -tune fastdecode -acodec aac -b:a 192k "' + path +
                  '/downloads/' + filename + 'rendering.flv"')
        encode_lock = False
        del_file(filename + 'rendering1.' + v_format)
        os.rename(path + '/downloads/' + filename + 'rendering.flv',
                  path + '/downloads/' + filename + 'ok.flv')
        send_dm_long('视频' + video_title + '渲染完毕,已加入播放队列')
    except:
        send_dm_long('出错了:请检查命令或重试')
def get_download_url(s, t, user, song="nothing"):
    print('[log]getting url:' + t + str(s))
    params = urllib.parse.urlencode({t: s})
    f = urllib.request.urlopen(download_api_url + "?%s" % params)
    url = f.read().decode('utf-8')
    send_dm('已启动下载' + t + str(s))
    try:
        filename = str(time.mktime(datetime.datetime.now().timetuple()))
        if (t == 'id'):
            urllib.request.urlretrieve(
                url, path + '/downloads/' + filename + '.mp3')
            lyric_get = urllib.parse.urlencode({'lyric': s})
            lyric_w = urllib.request.urlopen(download_api_url +
                                             "?%s" % lyric_get)
            lyric = lyric_w.read().decode('utf-8')
            if (song == "nothing"):
                ass_maker.make_ass(filename,
                                   '当前歌曲网易云id:' + str(s) + "\\N点播人:" + user,
                                   path, lyric)
                ass_maker.make_info(filename, 'id:' + str(s) + ",点播人:" + user,
                                    path)
            else:
                ass_maker.make_ass(
                    filename, '当前网易云id:' + str(s) + "\\N点播关键词:" + song +
                    "\\N点播人:" + user, path, lyric)
                ass_maker.make_info(
                    filename, 'id:' + str(s) + ",点的:" + song + ",点播人:" + user,
                    path)
        elif (t == 'mv'):
            urllib.request.urlretrieve(
                url, path + '/downloads/' + filename + '.mp4')
            if (song == "nothing"):
                ass_maker.make_ass(filename,
                                   '当前MV网易云id:' + str(s) + "\\N点播人:" + user,
                                   path)
                ass_maker.make_info(filename,
                                    'MVid:' + str(s) + ",点播人:" + user, path)
            else:
                ass_maker.make_ass(
                    filename, '当前MV网易云id:' + str(s) + "\\NMV点播关键词:" + song +
                    "\\N点播人:" + user, path)
                ass_maker.make_info(
                    filename,
                    'MVid:' + str(s) + ",MV:" + song + ",点播人:" + user, path)
        send_dm('下载完成,已加入播放队列排队播放')
        print('[log]已添加排队项目:' + t + str(s))
        try:
            log_file = open(path + '/songs.log', 'a')
            log_file.writelines(
                time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
                + ',' + user + ',' + t + str(s) + '\r\n')
            log_file.close()
        except:
            print('[error]log error')
    except:
        send_dm('出错了:下载出错,请换一首或重试')
        print('[log]下载文件出错:' + t + str(s) + ',url:' + url)
        del_file(filename + '.mp3')
        del_file(filename + '.mp4')
    return url
Example #4
0
def download_av(video_url,user):
    try:
        print('[log]downloading bilibili video:'+str(video_url))
        video_info = json.loads(os.popen('you-get '+video_url+' --json').read())
        video_title = video_info['title']
        send_dm_long('正在下载'+video_title)
        send_dm('注意,视频下载十分费时,请耐心等待')
        filename = str(time.mktime(datetime.datetime.now().timetuple()))
        os.system('you-get '+video_url+' --format=mp4 -o '+path+'/downloads -O '+filename+'.mp4')
        ass_maker.make_ass(filename,'视频:'+video_title+"\\N"+video_url+"\\N点播人:"+user,path)
        ass_maker.make_info(filename,'视频:'+video_title+",点播人:"+user,path)
        send_dm_long('视频'+video_title+'下载完成,已加入播放队列')
    except:
        send_dm('出错了:可能下载时炸了')
Example #5
0
def download_av(video_url,user):
    global encode_lock  #视频渲染锁,用来排队
    if(clean_files()):  #检查空间是否在设定值以内,并自动删除多余视频缓存
        send_dm_long('树莓存储空间已爆炸,请联系up')
        return
    if check_coin(user, 500) == False and var_set.use_gift_check:   #扣掉瓜子数
        send_dm_long('用户'+user+'赠送的瓜子不够点视频哦,还差'+str(500-get_coin(user))+'瓜子的礼物')
        return
    try:
        v_format = 'flv'
        print('[log]downloading bilibili video:'+str(video_url))
        video_info = json.loads(os.popen('you-get '+video_url+' --json').read())    #获取视频标题,标题错误则说明点播参数不对,跳到except
        video_title = video_info['title']   #获取标题
        send_dm_long('正在下载'+video_title)
        #send_dm('注意,视频下载十分费时,请耐心等待')
        filename = str(time.mktime(datetime.datetime.now().timetuple()))    #用时间戳设定文件名
        os.system('you-get '+video_url+' -o '+path+'/downloads -O '+filename+'rendering1')  #下载视频文件
        print('you-get '+video_url+' -o '+path+'/downloads -O '+filename+'rendering1')
        if(os.path.isfile(path+'/downloads/'+filename+'rendering1.flv')):   #判断视频格式
            v_format = 'flv'
        elif(os.path.isfile(path+'/downloads/'+filename+'rendering1.mp4')):
            v_format = 'mp4'
        else:
            send_dm_long('视频'+video_title+'下载失败,请重试')
            if var_set.use_gift_check:
                give_coin(user,500)
            return
        ass_maker.make_ass(filename+'ok','点播人:'+user+"\\N视频:"+video_title+"\\N"+video_url,path)  #生成字幕
        ass_maker.make_info(filename+'ok','视频:'+video_title+",点播人:"+user,path)   #生成介绍信息,用来查询
        send_dm_long('视频'+video_title+'下载完成,等待渲染')
        while (encode_lock):    #渲染锁,如果现在有渲染任务,则无限循环等待
            time.sleep(1)   #等待
        encode_lock = True  #进入渲染,加上渲染锁,防止其他视频一起渲染
        send_dm_long('视频'+video_title+'正在渲染')
        os.system('ffmpeg -threads 1 -i "'+path+'/downloads/'+filename+'rendering1.'+v_format+'" -aspect 16:9 -vf "scale=1280:720, ass='+path+"/downloads/"+filename+'ok.ass'+'" -c:v libx264 -preset ultrafast -maxrate '+var_set.maxbitrate+'k -tune fastdecode -acodec aac -b:a 192k "'+path+'/downloads/'+filename+'rendering.flv"')
        encode_lock = False #关闭渲染锁,以便其他任务继续渲染
        del_file(filename+'rendering1.'+v_format)   #删除渲染所用的原文件
        os.rename(path+'/downloads/'+filename+'rendering.flv',path+'/downloads/'+filename+'ok.flv') #重命名文件,标记为渲染完毕(ok)
        send_dm_long('视频'+video_title+'渲染完毕,已加入播放队列')
    except: #报错提示,一般只会出现在获取标题失败时出现,就是点播参数不对
        send_dm_long('出错了:请检查命令或重试')
        if var_set.use_gift_check:
            give_coin(user,500)
def download_av(video_url,user):
    global encode_lock  #视频渲染锁,用来排队
    if(clean_files()):  #检查空间是否在设定值以内,并自动删除多余视频缓存
        send_dm_long('树莓存储空间已爆炸,请联系up')
        return
    if check_coin(user, 500) == False and var_set.use_gift_check:   #扣掉瓜子数
        send_dm_long('用户'+user+'赠送的瓜子不够点视频哦,还差'+str(500-get_coin(user))+'瓜子的礼物')
        return
    try:
        v_format = 'flv'
        print('[log]downloading bilibili video:'+str(video_url))
        video_info = json.loads(os.popen('you-get '+video_url+' --json').read())    #获取视频标题,标题错误则说明点播参数不对,跳到except
        video_title = video_info['title']   #获取标题
        send_dm_long('正在下载'+video_title)
        #send_dm('注意,视频下载十分费时,请耐心等待')
        filename = str(time.mktime(datetime.datetime.now().timetuple()))    #用时间戳设定文件名
        os.system('you-get '+video_url+' -o '+path+'/downloads -O '+filename+'rendering1')  #下载视频文件
        print('you-get '+video_url+' -o '+path+'/downloads -O '+filename+'rendering1')
        if(os.path.isfile(path+'/downloads/'+filename+'rendering1.flv')):   #判断视频格式
            v_format = 'flv'
        elif(os.path.isfile(path+'/downloads/'+filename+'rendering1.mp4')):
            v_format = 'mp4'
        else:
            send_dm_long('视频'+video_title+'下载失败,请重试')
            if var_set.use_gift_check:
                give_coin(user,500)
            return
        ass_maker.make_ass(filename+'ok','点播人:'+user+"\\N视频:"+video_title+"\\N"+video_url,path)  #生成字幕
        ass_maker.make_info(filename+'ok','视频:'+video_title+",点播人:"+user,path)   #生成介绍信息,用来查询
        send_dm_long('视频'+video_title+'下载完成,等待渲染')
        while (encode_lock):    #渲染锁,如果现在有渲染任务,则无限循环等待
            time.sleep(1)   #等待
        encode_lock = True  #进入渲染,加上渲染锁,防止其他视频一起渲染
        send_dm_long('视频'+video_title+'正在渲染')
        os.system('ffmpeg -threads 1 -i "'+path+'/downloads/'+filename+'rendering1.'+v_format+'" -aspect 16:9 -vf "scale=1280:720, ass='+path+"/downloads/"+filename+'ok.ass'+'" -c:v libx264 -preset ultrafast -maxrate '+var_set.maxbitrate+'k -tune fastdecode -acodec aac -b:a 192k "'+path+'/downloads/'+filename+'rendering.flv"')
        encode_lock = False #关闭渲染锁,以便其他任务继续渲染
        del_file(filename+'rendering1.'+v_format)   #删除渲染所用的原文件
        os.rename(path+'/downloads/'+filename+'rendering.flv',path+'/downloads/'+filename+'ok.flv') #重命名文件,标记为渲染完毕(ok)
        send_dm_long('视频'+video_title+'渲染完毕,已加入播放队列')
    except: #报错提示,一般只会出现在获取标题失败时出现,就是点播参数不对
        send_dm_long('出错了:请检查命令或重试')
        if var_set.use_gift_check:
            give_coin(user,500)
def download_bilibili(video_url, user):
    global encode_lock  #视频渲染锁,用来排队
    if (clean_files()):  #检查空间是否在设定值以内,并自动删除多余视频缓存
        send_dm_long('树莓存储空间已爆炸,请联系up')
        return
    try:
        print('[log]downloading bilibili video:' + str(video_url))
        video_info = json.loads(
            os.popen('you-get ' + video_url +
                     ' --json').read())  #获取视频标题,标题错误则说明点播参数不对,跳到except
        video_title = video_info['title']  #获取标题
        send_dm_long('正在下载' + video_title)
        #send_dm('注意,视频下载十分费时,请耐心等待')
        filename = str(time.mktime(
            datetime.datetime.now().timetuple()))  #用时间戳设定文件名
        os.system('you-get ' + video_url + ' --format=flv -o ' + path +
                  '/downloads -O ' + filename + 'rendering1')  #下载视频文件
        ass_maker.make_ass(filename + 'ok', "点播人:" + user + "\\N番剧:" +
                           video_title + "\\N" + video_url, path)  #生成字幕
        ass_maker.make_info(filename + 'ok',
                            '番剧:' + video_title + ",点播人:" + user,
                            path)  #生成介绍信息,用来查询
        send_dm_long('番剧' + video_title + '下载完成,等待渲染')
        while (encode_lock):  #渲染锁,如果现在有渲染任务,则无限循环等待
            time.sleep(1)  #等待
        encode_lock = True  #进入渲染,加上渲染锁,防止其他视频一起渲染
        send_dm_long('番剧' + video_title + '正在渲染')
        os.system('ffmpeg -i "' + path + '/downloads/' + filename +
                  'rendering1.flv" -aspect 16:9 -vf "scale=1280:720, ass=' +
                  path + "/downloads/" + filename + 'ok.ass' +
                  '" -c:v libx264 -preset ultrafast -maxrate ' +
                  var_set.maxbitrate +
                  'k -tune fastdecode -acodec aac -b:a 192k "' + path +
                  '/downloads/' + filename + 'rendering.flv"')
        encode_lock = False  #关闭渲染锁,以便其他任务继续渲染
        del_file(filename + 'rendering1.flv')  #删除渲染所用的原文件
        os.rename(path + '/downloads/' + filename + 'rendering.flv', path +
                  '/downloads/' + filename + 'ok.flv')  #重命名文件,标记为渲染完毕(ok)
        send_dm_long('番剧' + video_title + '渲染完毕,已加入播放队列')
    except:  #报错提示,一般只会出现在获取标题失败时出现,就是点播参数不对
        send_dm_long('出错了:请检查命令或重试')
     night_files = os.listdir(path+'/night') #获取所有缓存文件
     night_files.sort()    #排序文件
     night_ran = random.randint(0,len(night_files)-1)    #随机抽一个文件
     if(night_files[night_ran].find('.flv') != -1):  #如果为flv视频
         #直接暴力推流
         print('ffmpeg -threads 0 -re -i "'+path+"/night/"+night_files[night_ran]+'" -vcodec copy -acodec copy -f flv "'+rtmp+live_code+'"')
         os.system('ffmpeg -threads 0 -re -i "'+path+"/night/"+night_files[night_ran]+'" -vcodec copy -acodec copy -f flv "'+rtmp+live_code+'"')
     if(night_files[night_ran].find('.mp3') != -1):  #如果为mp3
         pic_files = os.listdir(path+'/default_pic') #获取准备的图片文件夹中的所有图片
         pic_files.sort()    #排序数组
         pic_ran = random.randint(0,len(pic_files)-1)    #随机选一张图片
         audio = MP3(path+'/night/'+night_files[night_ran])    #获取mp3文件信息
         seconds=audio.info.length   #获取时长
         print('mp3 long:'+convert_time(seconds))
         if not os.path.isfile(path+'/night/'+night_files[night_ran]+'.ass'):
             ass_maker.make_ass('../night/'+night_files[night_ran].replace('.mp3',''),'当前是晚间专属时间哦~时间范围:晚上23点-凌晨5点\\N大家晚安哦~做个好梦~\\N当前文件名:'+night_files[night_ran],path)
         print('ffmpeg -threads 0 -re -loop 1 -r 2 -t '+str(int(seconds))+' -f image2 -i "'+path+'/default_pic/'+pic_files[pic_ran]+'" -i "'+path+'/night/'+night_files[night_ran]+'" -vf ass="'+path+'/night/'+night_files[night_ran]+'.ass" -pix_fmt yuv420p -preset ultrafast -maxrate '+var_set.maxbitrate+'k -acodec copy -c:v h264_omx -f flv "'+rtmp+live_code+'"')
         os.system('ffmpeg -threads 0 -re -loop 1 -r 2 -t '+str(int(seconds))+' -f image2 -i "'+path+'/default_pic/'+pic_files[pic_ran]+'" -i "'+path+'/night/'+night_files[night_ran]+'" -vf ass="'+path+'/night/'+night_files[night_ran].replace('.mp3','')+'.ass" -pix_fmt yuv420p -preset ultrafast -maxrate '+var_set.maxbitrate+'k -acodec copy -c:v h264_omx -f flv "'+rtmp+live_code+'"')
     continue
 
 files = os.listdir(path+'/downloads')   #获取文件夹下全部文件
 files.sort()    #排序文件,按文件名(点播时间)排序
 count=0     #总共匹配到的点播文件统计
 for f in files:
     if((f.find('.mp3') != -1) and (f.find('.download') == -1)): #如果是mp3文件
         print(path+'/downloads/'+f)
         seconds = 600
         bitrate = 0
         try:
             audio = MP3(path+'/downloads/'+f)   #获取mp3文件信息
             seconds=audio.info.length   #获取时长
Example #9
0
#coding:utf-8
#电脑上用的视频渲染工具
#用于夜间文件的预渲染工作
#请自行用pip装好相应模块
#还有个imageio.plugins.ffmpeg.download()记得运行
#文件夹请自行更改
#本工具仅用于生成ass字幕文件,渲染请去用小丸工具箱~
import os
import ass_maker

path = 'C:\\Users\\liucx\\Desktop'
#ffmpeg_path = 'C:\\Program Files (x86)\\MarukoToolbox\\tools\\ffmpeg.exe'
maxbitrate = '1800'
files = os.listdir(path+'\\downloads') #获取所有缓存文件

for i in files:
    if i.find('.flv') != -1 or i.find('.mp4') != -1:
        print('find file:'+i)
        ass_maker.make_ass(i.replace('.flv','').replace('.mp4',''),'当前是晚间专属时间哦~时间范围:晚上23点-凌晨5点\\N大家晚安哦~做个好梦~\\N当前文件名:'+i,path)
        print('ffmpeg -threads 0 -i "'+path+'/downloads/'+i+'" -aspect 16:9 -vf "scale=1280:720, ass='+path+"/downloads/"+i.replace(".mp4",'').replace(".flv",'')+'.ass'+'" -c:v libx264 -preset ultrafast -maxrate '+maxbitrate+'k -tune fastdecode -acodec aac -b:a 192k "'+path+'/downloads/'+i+'rendering.flv"')

def get_download_url(s, t, user, song="nothing"):
    global encode_lock  #视频渲染锁,用来排队
    if (clean_files()):  #检查空间是否在设定值以内,并自动删除多余视频缓存
        send_dm_long('树莓存储空间已爆炸,请联系up')
        return
    send_dm_long('正在下载' + t + str(s))
    print('[log]getting url:' + t + str(s))
    params = urllib.parse.urlencode({t: s})  #格式化参数
    f = urllib.request.urlopen(download_api_url + "?%s" % params)  #设定获取的网址
    url = f.read().decode('utf-8')  #读取结果
    try:
        filename = str(time.mktime(
            datetime.datetime.now().timetuple()))  #获取时间戳,用来当作文件名
        if (t == 'id'):  #当参数为歌曲时
            urllib.request.urlretrieve(url, path + '/downloads/' + filename +
                                       '.mp3')  #下载歌曲
            lyric_get = urllib.parse.urlencode({'lyric': s})  #格式化参数
            lyric_w = urllib.request.urlopen(download_api_url +
                                             "?%s" % lyric_get)  #设定获取歌词的网址
            lyric = lyric_w.read().decode('utf-8')  #获取歌词文件

            tlyric_get = urllib.parse.urlencode({'tlyric': s})  #格式化参数
            tlyric_w = urllib.request.urlopen(download_api_url +
                                              "?%s" % tlyric_get)  #设定获取歌词的网址
            tlyric = tlyric_w.read().decode('utf-8')  #获取歌词文件

            if (song == "nothing"):  #当直接用id点歌时
                ass_maker.make_ass(filename,
                                   '当前歌曲网易云id:' + str(s) + "\\N点播人:" + user,
                                   path, lyric, tlyric)  #生成字幕
                ass_maker.make_info(filename, 'id:' + str(s) + ",点播人:" + user,
                                    path)  #生成介绍信息,用来查询
            else:  #当用关键字搜索点歌时
                ass_maker.make_ass(filename, '当前网易云id:' + str(s) +
                                   "\\N点播关键词:" + song + "\\N点播人:" + user, path,
                                   lyric, tlyric)  #生成字幕
                ass_maker.make_info(filename, 'id:' + str(s) + ",关键词:" + song +
                                    ",点播人:" + user, path)  #生成介绍信息,用来查询
            send_dm_long(t + str(s) + '下载完成,已加入播放队列')
            print('[log]已添加排队项目:' + t + str(s))
        elif (t == 'mv'):  #当参数为mv时
            urllib.request.urlretrieve(url, path + '/downloads/' + filename +
                                       '.mp4')  #下载mv
            if (song == "nothing"):  #当直接用id点mv时
                ass_maker.make_ass(filename + 'ok',
                                   '当前MV网易云id:' + str(s) + "\\N点播人:" + user,
                                   path)  #生成字幕
                ass_maker.make_info(filename + 'ok',
                                    'MVid:' + str(s) + ",点播人:" + user,
                                    path)  #生成介绍信息,用来查询
            else:  #当用关键字搜索点mv时
                ass_maker.make_ass(filename + 'ok', '当前MV网易云id:' + str(s) +
                                   "\\NMV点播关键词:" + song + "\\N点播人:" + user,
                                   path)  #生成字幕
                ass_maker.make_info(filename + 'ok', 'MVid:' + str(s) +
                                    ",关键词:" + song + ",点播人:" + user,
                                    path)  #生成介绍信息,用来查询
            send_dm_long(t + str(s) + '下载完成,等待渲染')
            while (encode_lock):  #渲染锁,如果现在有渲染任务,则无限循环等待
                time.sleep(1)  #等待
            encode_lock = True  #进入渲染,加上渲染锁,防止其他视频一起渲染
            send_dm_long(t + str(s) + '正在渲染')
            os.system('ffmpeg -i "' + path + '/downloads/' + filename +
                      '.mp4" -aspect 16:9 -vf "scale=1280:720, ass=' + path +
                      "/downloads/" + filename + 'ok.ass' +
                      '" -c:v libx264 -preset ultrafast -maxrate ' +
                      var_set.maxbitrate +
                      'k -tune fastdecode -acodec aac -b:a 192k "' + path +
                      '/downloads/' + filename + 'rendering.flv"')
            encode_lock = False  #关闭渲染锁,以便其他任务继续渲染
            del_file(filename + '.mp4')  #删除渲染所用的原文件
            os.rename(path + '/downloads/' + filename + 'rendering.flv', path +
                      '/downloads/' + filename + 'ok.flv')  #重命名文件,标记为渲染完毕(ok)
            send_dm_long(t + str(s) + '渲染完毕,已加入播放队列')
        try:  #记录日志,已接近废弃
            log_file = open(path + '/songs.log', 'a')
            log_file.writelines(
                time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
                + ',' + user + ',' + t + str(s) + '\r\n')
            log_file.close()
        except:
            print('[error]log error')
    except:  #下载出错
        send_dm_long('出错了:请检查命令或重试')
        print('[log]下载文件出错:' + t + str(s) + ',url:' + url)
        del_file(filename + '.mp3')
        del_file(filename + '.mp4')
        del_file(filename + '.flv')
    return url
Example #11
0
def get_download_url(s, t, user, song = "nothing"):
    global encode_lock  #视频渲染锁,用来排队
    if(clean_files()):  #检查空间是否在设定值以内,并自动删除多余视频缓存
        send_dm_long('树莓存储空间已爆炸,请联系up')
        return
    if t == 'id' and var_set.use_gift_check:   #检查送过的礼物数量
        if check_coin(user, 100) == False:
            send_dm_long('用户'+user+'赠送的瓜子不够点歌哦,还差'+str(100-get_coin(user))+'瓜子的礼物')
            return
    elif t == 'mv' and var_set.use_gift_check:
        if check_coin(user, 500) == False:
            send_dm_long('用户'+user+'赠送的瓜子不够点mv哦,还差'+str(500-get_coin(user))+'瓜子的礼物')
            return
    send_dm_long('正在下载'+t+str(s))
    print('[log]getting url:'+t+str(s))
    try:
        filename = str(time.mktime(datetime.datetime.now().timetuple()))    #获取时间戳,用来当作文件名
        if(t == 'id'):  #当参数为歌曲时
            #伪装浏览器,防止屏蔽
            opener=urllib.request.build_opener()
            opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1941.0 Safari/537.36')]
            urllib.request.install_opener(opener)

            urllib.request.urlretrieve("http://music.163.com/song/media/outer/url?id="+str(s), path+'/downloads/'+filename+'.mp3') #下载歌曲

            lyric_get = urllib.parse.urlencode({'lyric': s})    #格式化参数
            lyric_w = urllib.request.urlopen(download_api_url + "?%s" % lyric_get,timeout=5)  #设定获取歌词的网址
            lyric = lyric_w.read().decode('utf-8')  #获取歌词文件

            tlyric_get = urllib.parse.urlencode({'tlyric': s})    #格式化参数
            tlyric_w = urllib.request.urlopen(download_api_url + "?%s" % tlyric_get,timeout=5)  #设定获取歌词的网址
            tlyric = tlyric_w.read().decode('utf-8')  #获取歌词文件

            (song_temp,pic_url) = get_song_info.get_song_info(s)#获取歌曲信息
            if song_temp != "":
                song = "歌名:"+song_temp
            else:
                song = "关键词:"+song
            if pic_url != "":
                try:
                    #伪装浏览器,防止屏蔽
                    opener=urllib.request.build_opener()
                    opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1941.0 Safari/537.36')]
                    urllib.request.install_opener(opener)
                    urllib.request.urlretrieve(pic_url+"?param=200y200", path+'/downloads/'+filename+'.jpg') #下载封面
                except Exception as e: #下载出错
                    print('[log]下载封面出错:'+pic_url)
                    print(e)
                    del_file(filename+'.jpg')

            ass_maker.make_ass(filename,'当前网易云id:'+str(s)+"\\N"+song+"\\N点播人:"+user,path,lyric,tlyric)   #生成字幕
            ass_maker.make_info(filename,'id:'+str(s)+","+song+",点播人:"+user,path)    #生成介绍信息,用来查询
            send_dm_long(t+str(s)+'下载完成,已加入播放队列')
            print('[log]已添加排队项目:'+t+str(s))
        elif(t == 'mv'):    #当参数为mv时
            params = urllib.parse.urlencode({t: s}) #格式化参数
            f = urllib.request.urlopen(download_api_url + "?%s" % params,timeout=5)   #设定获取的网址
            url = f.read().decode('utf-8')  #读取结果
            print('[log]获取'+t+str(s)+'网址:'+url)

            #伪装浏览器,防止屏蔽
            opener=urllib.request.build_opener()
            opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1941.0 Safari/537.36')]
            urllib.request.install_opener(opener)

            urllib.request.urlretrieve(url, path+'/downloads/'+filename+'.mp4') #下载mv
            print('[log]'+t+str(s)+'下载完成')
            if(song == "nothing"):  #当直接用id点mv时
                ass_maker.make_ass(filename+'ok','当前MV网易云id:'+str(s)+"\\N点播人:"+user,path)#生成字幕
                ass_maker.make_info(filename+'ok','MVid:'+str(s)+",点播人:"+user,path)#生成介绍信息,用来查询
            else:   #当用关键字搜索点mv时
                ass_maker.make_ass(filename+'ok','当前MV网易云id:'+str(s)+"\\NMV点播关键词:"+song+"\\N点播人:"+user,path)#生成字幕
                ass_maker.make_info(filename+'ok','MVid:'+str(s)+",关键词:"+song+",点播人:"+user,path)#生成介绍信息,用来查询
            send_dm_long(t+str(s)+'下载完成,等待渲染')
            print('[log]获取'+t+str(s)+'下载完成,等待渲染')
            while (encode_lock):    #渲染锁,如果现在有渲染任务,则无限循环等待
                time.sleep(1)   #等待
            encode_lock = True  #进入渲染,加上渲染锁,防止其他视频一起渲染
            send_dm_long(t+str(s)+'正在渲染')
            print('[log]获取'+t+str(s)+'正在渲染')
            os.system('ffmpeg -threads 1 -i "'+path+'/downloads/'+filename+'.mp4" -aspect 16:9 -vf "scale=1280:720, ass='+path+"/downloads/"+filename+'ok.ass'+'" -c:v libx264 -preset ultrafast -maxrate '+var_set.maxbitrate+'k -tune fastdecode -acodec aac -b:a 192k "'+path+'/downloads/'+filename+'rendering.flv"')
            encode_lock = False #关闭渲染锁,以便其他任务继续渲染
            del_file(filename+'.mp4')   #删除渲染所用的原文件
            os.rename(path+'/downloads/'+filename+'rendering.flv',path+'/downloads/'+filename+'ok.flv') #重命名文件,标记为渲染完毕(ok)
            send_dm_long(t+str(s)+'渲染完毕,已加入播放队列')
            print('[log]获取'+t+str(s)+'渲染完毕,已加入播放队列')
        try:    #记录日志,已接近废弃
            log_file = open(path+'/songs.log', 'a')
            log_file.writelines(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) + ','+user+','+t+str(s)+'\r\n')
            log_file.close()
        except:
            print('[error]log error')
    except Exception as e: #下载出错
        send_dm_long('出错了:请检查命令或重试')
        if t == 'id' and var_set.use_gift_check:   #归还用掉的瓜子
            give_coin(user,100)
        elif t == 'mv' and var_set.use_gift_check:
            give_coin(user,500)
        print('[log]下载文件出错:'+t+str(s))
        print(e)
        del_file(filename+'.mp3')
        del_file(filename+'.mp4')
        del_file(filename+'.flv')
def get_download_url(s, t, user, song = "nothing"):
    global encode_lock  #视频渲染锁,用来排队
    if(clean_files()):  #检查空间是否在设定值以内,并自动删除多余视频缓存
        send_dm_long('树莓存储空间已爆炸,请联系up')
        return
    if t == 'id' and var_set.use_gift_check:   #检查送过的礼物数量
        if check_coin(user, 100) == False:
            send_dm_long('用户'+user+'赠送的瓜子不够点歌哦,还差'+str(100-get_coin(user))+'瓜子的礼物')
            return
    elif t == 'mv' and var_set.use_gift_check:
        if check_coin(user, 500) == False:
            send_dm_long('用户'+user+'赠送的瓜子不够点mv哦,还差'+str(500-get_coin(user))+'瓜子的礼物')
            return
    send_dm_long('正在下载'+t+str(s))
    print('[log]getting url:'+t+str(s))
    try:
        filename = str(time.mktime(datetime.datetime.now().timetuple()))    #获取时间戳,用来当作文件名
        if(t == 'id'):  #当参数为歌曲时
            urllib.request.urlretrieve("http://music.163.com/song/media/outer/url?id="+str(s)+".mp3", path+'/downloads/'+filename+'.mp3') #下载歌曲
            lyric_get = urllib.parse.urlencode({'lyric': s})    #格式化参数
            lyric_w = urllib.request.urlopen(download_api_url + "?%s" % lyric_get,timeout=5)  #设定获取歌词的网址
            lyric = lyric_w.read().decode('utf-8')  #获取歌词文件

            tlyric_get = urllib.parse.urlencode({'tlyric': s})    #格式化参数
            tlyric_w = urllib.request.urlopen(download_api_url + "?%s" % tlyric_get,timeout=5)  #设定获取歌词的网址
            tlyric = tlyric_w.read().decode('utf-8')  #获取歌词文件

            if(song == "nothing"):  #当直接用id点歌时
                ass_maker.make_ass(filename,'当前歌曲网易云id:'+str(s)+"\\N点播人:"+user,path,lyric,tlyric)  #生成字幕
                ass_maker.make_info(filename,'id:'+str(s)+",点播人:"+user,path)    #生成介绍信息,用来查询
            else:   #当用关键字搜索点歌时
                ass_maker.make_ass(filename,'当前网易云id:'+str(s)+"\\N点播关键词:"+song+"\\N点播人:"+user,path,lyric,tlyric)   #生成字幕
                ass_maker.make_info(filename,'id:'+str(s)+",关键词:"+song+",点播人:"+user,path)    #生成介绍信息,用来查询
            send_dm_long(t+str(s)+'下载完成,已加入播放队列')
            print('[log]已添加排队项目:'+t+str(s))
        elif(t == 'mv'):    #当参数为mv时
            params = urllib.parse.urlencode({t: s}) #格式化参数
            f = urllib.request.urlopen(download_api_url + "?%s" % params,timeout=5)   #设定获取的网址
            url = f.read().decode('utf-8')  #读取结果
            urllib.request.urlretrieve(url, path+'/downloads/'+filename+'.mp4') #下载mv
            if(song == "nothing"):  #当直接用id点mv时
                ass_maker.make_ass(filename+'ok','当前MV网易云id:'+str(s)+"\\N点播人:"+user,path)#生成字幕
                ass_maker.make_info(filename+'ok','MVid:'+str(s)+",点播人:"+user,path)#生成介绍信息,用来查询
            else:   #当用关键字搜索点mv时
                ass_maker.make_ass(filename+'ok','当前MV网易云id:'+str(s)+"\\NMV点播关键词:"+song+"\\N点播人:"+user,path)#生成字幕
                ass_maker.make_info(filename+'ok','MVid:'+str(s)+",关键词:"+song+",点播人:"+user,path)#生成介绍信息,用来查询
            send_dm_long(t+str(s)+'下载完成,等待渲染')
            while (encode_lock):    #渲染锁,如果现在有渲染任务,则无限循环等待
                time.sleep(1)   #等待
            encode_lock = True  #进入渲染,加上渲染锁,防止其他视频一起渲染
            send_dm_long(t+str(s)+'正在渲染')
            os.system('ffmpeg -threads 1 -i "'+path+'/downloads/'+filename+'.mp4" -aspect 16:9 -vf "scale=1280:720, ass='+path+"/downloads/"+filename+'ok.ass'+'" -c:v libx264 -preset ultrafast -maxrate '+var_set.maxbitrate+'k -tune fastdecode -acodec aac -b:a 192k "'+path+'/downloads/'+filename+'rendering.flv"')
            encode_lock = False #关闭渲染锁,以便其他任务继续渲染
            del_file(filename+'.mp4')   #删除渲染所用的原文件
            os.rename(path+'/downloads/'+filename+'rendering.flv',path+'/downloads/'+filename+'ok.flv') #重命名文件,标记为渲染完毕(ok)
            send_dm_long(t+str(s)+'渲染完毕,已加入播放队列')
        try:    #记录日志,已接近废弃
            log_file = open(path+'/songs.log', 'a')
            log_file.writelines(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) + ','+user+','+t+str(s)+'\r\n')
            log_file.close()
        except:
            print('[error]log error')
    except: #下载出错
        send_dm_long('出错了:请检查命令或重试')
        if t == 'id' and var_set.use_gift_check:   #归还用掉的瓜子
            give_coin(user,100)
        elif t == 'mv' and var_set.use_gift_check:
            give_coin(user,500)
        print('[log]下载文件出错:'+t+str(s))
        del_file(filename+'.mp3')
        del_file(filename+'.mp4')
        del_file(filename+'.flv')