执剑问道 2023-08-22 11:54 采纳率: 33.3%
浏览 22
已结题

从B站获取的视频和音频,合并后没有声音,怎么解决

img


def get_bilibili_video_links(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
        "Referer": "https://www.bilibili.com/online.html",
        "Cookie": "buvid3=16B085E9-2336-D995-673F-B42F2F400FD137684infoc; b_nut=1690525437; _uuid=E44D17B4-67106-6B6C-3DD9-83E10C922735337558infoc; buvid_fp=a890e9cc95b0def2ca53d68e00d41bda; buvid4=E7CC7306-FA67-96D8-67BF-60D48D34392273951-023071214-RYZwLL8nRmXHGZtmr2QQ0Q%3D%3D; FEED_LIVE_VERSION=V8; header_theme_version=CLOSE; home_feed_column=5; browser_resolution=1493-751; CURRENT_FNVAL=4048; PVID=1; SESSDATA=956d8791%2C1708227771%2Cba8e4%2A8106NzQJ1UlfU9H7Yijf9qq27GtQLlpGUOEEf0pXCzHhGXr-KtG1x7rbYUWwRD8rIRpq8wkQAADQA; bili_jct=27f713f3596b44aa56609e7eef354704; DedeUserID=232442913; DedeUserID__ckMd5=7774e129371f2995; rpdid=|(J|~uullY)m0J'uYmu|Rm|mk; i-wanna-go-back=-1; b_ut=5; CURRENT_QUALITY=64; bp_video_offset_232442913=830044288713752627; is-2022-channel=1; fingerprint=a890e9cc95b0def2ca53d68e00d41bda; buvid_fp_plain=undefined; innersign=0; b_lsid=62FFC769_18A1B5684A0; bsource=search_bing; sid=npsnfjih" }
    data=requests.get(url,headers=headers)
    data.encoding='utf-8'
    data=data.text
    with open("bili.html","w",encoding='utf-8') as f:
        f.write(data)
    html=etree.HTML(data)
    n=1
    list=[]
    while True:
        try:
            path=f"/html/body/div[2]/div/main/div/div[2]/div/div[2]/div[{n}]/div[2]/div/div/h3/a/@href"
            url_list=html.xpath(path)[0].strip("//")[0:]
            url=f"https://{url_list}"
            list.append(url)
            print(url)
            n+=1
        except:
            print("没有更多视频了")
            break
    print(list)
    return list
# @app.route('/bili',methods=['GET','POST'])
def video_audio():
    url='https://www.bilibili.com/v/kichiku/?spm_id_from=333.1073.0.0'
    # url=request.args.get('url','')
    for i in get_bilibili_video_links(url):
        data=requests.get(i).text
        html= etree.HTML(data)

        title=html.xpath('/html/body/div[2]/div[2]/div[1]/div[1]/h1/@title')[0]
        print(title)
        # print(html)
        js=html.xpath('/html/head/script[3]')[0].text.split("window.__playinfo__=")[1]
        print(js)
        js=json.loads(js)
        print(js)
        video_url=js['data']['dash']['video'][0]['baseUrl']
        audio_url=js['data']['dash']['audio'][0]['baseUrl']
        print(video_url)
        print(audio_url)

        #合并音视频
        with open(f"{title}.mp4","wb") as f:
            f.write(requests.get(video_url).content)
        with open(f"{title}.mp3","wb") as f:
            f.write(requests.get(audio_url).content)
        print("下载完成")
        try:
            video = VideoFileClip(f'{title}.mp4')
            print(video.size)
            print(video.duration)
            audio = AudioFileClip(f'{title}.mp3')
            video.set_audio(audio)  #将音频写入到视频
            video.write_videofile(f'./images/{title}_1.mp4')  #保存新的视频

            time.sleep(1)
            # os.remove(f'{title}.mp3')
            # os.remove(f'{title}.mp4')
            print("合并完成")
            print("下载完成")
        except Exception as e:
            print(e)
            print("合并失败")
            # os.remove(f'{title}.mp3')
            # os.remove(f'{title}.mp4')
            pass
  • 写回答

13条回答 默认 最新

  • 五路拖拉慢 2023-08-22 12:41
    关注

    你可以用网址提取视频https://www.fodownloader.com/
    或者看知乎的这篇文章:如何将b站缓存的视频m4s文件转换成MP4或MP3,并合成一个完整的视频https://zhuanlan.zhihu.com/p/606556747?utm_id=0

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 8月30日
  • 创建了问题 8月22日