小白尝试在 Windows 用 you-get 批量下载 b 站下载有声小说的整个过程 - V2EX
爱意满满的作品展示区。
huntagain2008

小白尝试在 Windows 用 you-get 批量下载 b 站下载有声小说的整个过程

  •  
  •   huntagain2008 Jun 9, 2022 2473 views
    This topic created in 1438 days ago, the information mentioned may be changed or developed.
    t/803406
    小白一开始是 Win10-WSL-ubuntu 用 you-get 、BashShell 批量下载。太过重量级,网上搜的资料是

    > https://blog.csdn.net/u010378992/article/details/105180742
    使用 you-get 批量下载 B 站视频

    文章分类在 Python 爬虫。第一步安装 you-get 遇到问题,在 Windows 各种报错,小白什么都不懂
    > https://github.com/soimort/you-get/wiki/%E4%B8%AD%E6%96%87%E8%AF%B4%E6%98%8E
    you-get 中文说明

    > 选项 2: 使用预装包(仅供 Windows)
    exe (单独文件) 或 7z (包括所有依赖) 可从 https://github.com/soimort/you-get/releases/latest 下载.

    releases 没有 7z 或 exe , 在网上搜到 exe 文件,报 Http Error with code404, 是版本低了。看到 releases 有 you_get-0.4.1612-py3-none-any.whl ,可是我不认识它。 对其解压,看到了源代码,但是不知道如何使用。搜索 windows 安装 whl ,看到这个网页

    > https://www.lfd.uci.edu/~gohlke/pythonlibs/
    Unofficial Windows Binaries for Python Extension Packages

    https://www.pypy.org/download.html
    看上面的教程,尝试下载了 zip 文件 PyPy3.8 然后解压,在该目录 shift 右键菜单打开命令行

    > https://pip.pypa.io/en/latest/user_guide/#installing-from-wheels
    py -m pip install SomePackage-1.0-py2.py3-none-any.whl

    用 python3 -m pip install you_get-0.4.1612-py3-none-any.whl ,提示没有安装 pip ,用
    python3 -m ensurepip 安装 pip 。再次 py -m pip install you_get-0.4.1612-py3-none-any.whl ,终于 you-get 装好了。

    可是 you-get.exe 在哪里啊?我不知道,我只好写 python 脚本,然后 python3 zy_download.py 运行
    ```python
    import sys
    from you_get import common as you_get

    directory = 'D:\MyVideos'
    url = "https://www.bilibili.com/video/xxxx/xxxxx'
    sys.argv = ['you-get', 'l', '-o', directory, url]

    you_get.main()
    ```
    下载速度只有 12kb/s 。添加 --format=dash-flv360 下载变快,但是视频分成两段,依赖 ffmpeg 合并视频。于是下载 ffmpeg 的 zip 文件并设置环境变量。
    下载到 294 集忽然卡住了,被我终止了。最后在 PyPy3.8/Scripts/ 意外找到了 you-get.exe ,于是写批处理将剩下的 6 集也下载了
    ```msdos
    @echo off
    for /f "delims=," %%i in (url_list.txt) do (
    you-get -o D:\MyVideos %%i
    )
    pause
    ```

    最后用菲菲更名宝贝 FFRename Professional 批量重命名,用 ffmpeg 将 mp4 转为 aac 音轨,再通过 VLC 播放器的 WIFI 共享功能上传到手机。大功告成。
    12 replies    2022-07-19 09:26:40 +08:00
    linglin0924
        1
    linglin0924  
       Jun 9, 2022
    有声小说的地址发一下,看看怎么样
    jingfelix
        2
    jingfelix  
       Jun 10, 2022 via Android
    你可能需要这个?
    https://github.com/jingfelix/BiliFM
    可以下载指定 up 主全部视频的音频为 mp3 ,不需要 ffmpeg 。
    huntagain2008
        3
    huntagain2008  
    OP
       Jun 10, 2022
    @linglin0924 我只是把有声小说当听歌而已,完全是动漫流行什么我就听什么小说,《凡人修仙传》我听的大灰狼的,感觉韩立这个角色还是这个主播的声音比较合适,当然我没听过其他的主播。
    huntagain2008
        4
    huntagain2008  
    OP
       Jun 10, 2022   span class="small fade"> 1
    @jingfelix #2 在 kubuntu 用了 BilibiliAudioDownloader 下载正在听的一集,mp3 大小 5.3MB,aac 音频大小 5.6MB,aac 音频时长 21:44,mp3 时长 21:50 。批量下载多 P 视频结果只剩下一个视频。至于作者你的作品我还没试过,看了下代码好像没有有关视频中的某一 P 的音频下载。
    twofox
        5
    twofox  
       Jun 10, 2022
    you-get ?
    twofox
        6
    twofox  
       Jun 10, 2022
    和 youtube-dl 什么关系
    huntagain2008
        7
    huntagain2008  
    OP
       Jun 10, 2022
    @twofox #6 应该没关系。以前听播客倒是听到过嘉宾提 起 youtube-dl 下载速度更快
    jingfelix
        8
    jingfelix  
       Jun 10, 2022
    @huntagain2008 嗯,确实没有考虑分 p 的问题,下周改一下。
    刚刚看了看,https://github.com/yutto-dev/yutto 应该可以支持分 p 视频 + 只下载音频。
    zhandouji
        9
    zhandouji  
       Jun 12, 2022 via iPhone
    用 ubuntu 的 you-get 非常容易
    huntagain2008
        10
    huntagain2008  
    OP
       Jun 24, 2022
    BilibiliAudioDownloader 分 P 下载音频 文件名是同一个,所以最后下载的音频都被覆盖了。我改了一下代码
    BVList=['BV1t54y1r75y-1', 'BV1t54y1r75y-2', 'BV1t54y1r75y-3']
    这个 list 首先知道要下载视频的 BV 号也就是 BV1t54y1r75y ,后面加 分 P 号,也就是-1 。因为我要下载 100 个 P 的音频,所以我总不能一个个输入-1 ,-2 ,-3 。先用 Python 生成列表
    >>> l = []
    >>> BVList = []
    >>> for i in range(1, 201):
    ... BVList.append('BV1t54y1r75y-' + str(i))
    ...
    >>> BVList
    ['BV1t54y1r75y-1', 'BV1t54y1r75y-2', 'BV1t54y1r75y-3', ...]

    def getCidAndTitle(bvid,p=1):
    url='https://api.bilibili.com/x/web-interface/view?bvid='+bvid
    data=requests.get(url).json()['data']
    title=data['title'] + str(p)
    cid=data['pages'][p-1]['cid']
    return str(cid),title

    原代码 title=data['title']被我改为 title=data['title'] + str(p),加了分 P 。这样下载 100 个分 P 的视频就没问题了。
    huntagain2008
        11
    huntagain2008  
    OP
       Jun 24, 2022
    @huntagain2008 改下 for i in range(1,101):
    huntagain2008
        12
    huntagain2008  
    OP
       Jul 19, 2022
    @huntagain2008 #10 KDE 的 Konsole 打印的列表可以直接拷贝,但是在 Windows 的 cmd 命令行拷贝出来的列表有换行问题,代码会报错。可以用 > BVList 输出到文件再用记事本打开。而在 Python3 中的实现是

    #!/usr/bin/env python3
    # 根据 B 站 BV 号下载第 1501 到 1631 集,对应分 P 101 到 230 ,输出到文件 BV1501-1631.txt 。
    # 输出的文件内容如:['BV18a4y1s7Jx-101','BV18a4y1s7Jx-102', ...]
    #

    BVList = []

    for i in range(101, 231):
    缩进 BVList.append("BV18a4y1s7Jx-" + str(i))

    MyFile = open('BV1501-1631.txt', 'w')

    print(BVList, file=MyFile)

    MyFile.close()
    About     Help     Advertise     Blog     API     FAQ     Solana     884 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 213ms UTC 22:30 PVG 06:30 LAX 15:30 JFK 18:30
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86