Giter VIP home page Giter VIP logo

yutto's Introduction

yutto2.0.0-beta

PyPI - Python Version pypi PyPI - Downloads LICENSE ruff Gitmoji discord chat

yutto,一个可爱且任性的 B 站下载器(CLI)

当前 yutto 尚处于 beta 阶段,有任何建议尽管在 Discussions 提出~~~

版本号为什么是 2.0

因为 yutto 是 bilili 的後輩呀~

从安装开始~

包管理器一键安装啦

目前 yutto 已经可以通过部分包管理器直接安装~

使用 Homebrew 的用户可以尝试下下面的命令:

brew tap siguremo/tap
brew install yutto

使用 paru(Arch 上的 AUR 包管理器)的用户可以尝试下这样的命令(感谢 @ouuan):

paru -S yutto

使用 Docker

你也可以尝试使用 docker 直接运行 yutto(具体如何运行需要参考下后面的内容~)

docker run --rm -it -v /path/to/download:/app siguremo/yutto <url> [options]

与直接运行 yutto 不同的是,这里的下载目标路径是通过 -v <path>:/app 指定的,也就是说 docker 里的 yutto 会将内容下载到 docker 里的 /app 目录下,与之相对应的挂载点 <path> 就是下载路径。你也可以直接挂载到 $(pwd),此时就和本机 yutto 的默认行为一致啦,也是下载到当前目录下~

pip/pipx/uv 安装

Tip

在此之前请确保安装 Python3.9 及以上版本,并配置好 FFmpeg(参照 bilili 文档

pip install --pre yutto

当然,你也可以通过 pipx/uv 来安装 yutto(当然,前提是你要自己先安装它)

pipx install yutto      # 使用 pipx
uv tool install yutto   # 或者使用 uv

pipx/uv 会类似 Homebrew 无感地为 yutto 创建一个虚拟环境,与其余环境隔离开,避免污染 pip 的环境,因此相对于 pip,pipx/uv 是更推荐的安装方式(uv 会比 pipx 更快些~)。

体验 main 分支最新特性

Tip

这同样要求你自行配置 Python 和 FFmpeg 环境

有些时候有一些在 main 分支还没有发布的新特性或者 bugfix,你可以尝试直接安装 main 分支的代码,最快的方式仍然是通过 pip 安装,只不过需要使用 git 描述符

pip install git+https://github.com/yutto-dev/yutto@main                 # 通过 pip
pipx install git+https://github.com/yutto-dev/yutto@main                # 通过 pipx
uv tool install git+https://github.com/yutto-dev/yutto.git@main         # 通过 uv

主要功能

已支持的下载类型

类型 是否支持选集 示例链接 默认路径模板
投稿视频 - https://www.bilibili.com/video/BV1vZ4y1M7mQ
https://www.bilibili.com/video/av371660125
https://www.bilibili.com/video/BV1vZ4y1M7mQ?p=1
av371660125
BV1vZ4y1M7mQ
{title}
投稿视频 批量 https://www.bilibili.com/video/BV1vZ4y1M7mQ
https://www.bilibili.com/video/av371660125
av371660125
BV1vZ4y1M7mQ
{title}/{name}
番剧 - https://www.bilibili.com/bangumi/play/ep395211
ep395211
{name}
番剧 批量 https://www.bilibili.com/bangumi/play/ep395211
https://www.bilibili.com/bangumi/play/ss38221
https://www.bilibili.com/bangumi/media/md28233903
ep395211
ss38221
md28233903
{title}/{name}
课程 - https://www.bilibili.com/cheese/play/ep6902 {name}
课程 批量 https://www.bilibili.com/cheese/play/ep6902
https://www.bilibili.com/cheese/play/ss298
{title}/{name}
用户指定收藏夹 批量 https://space.bilibili.com/100969474/favlist?fid=1306978874&ftype=create {username}的收藏夹/{series_title}/{title}/{name}
当前用户稍后再看 批量 https://www.bilibili.com/watchlater 稍后再看/{title}/{name}
用户全部收藏夹 批量 https://space.bilibili.com/100969474/favlist {username}的收藏夹/{series_title}/{title}/{name}
UP 主个人空间 批量 https://space.bilibili.com/100969474/video {username}的全部投稿视频/{title}/{name}
合集 批量 https://space.bilibili.com/361469957/channel/collectiondetail?sid=23195
https://www.bilibili.com/medialist/play/361469957?business=space_collection&business_id=23195
{series_title}/{title}
视频列表 批量 https://space.bilibili.com/100969474/channel/seriesdetail?sid=1947439
https://www.bilibili.com/medialist/play/100969474?business=space_series&business_id=1947439
https://space.bilibili.com/100969474/favlist?fid=270359&ftype=collect
{series_title}/{title}/{name}

Note

标记「批量」的视频都必须通过 -b/--batch 参数来下载,否则会按照单个视频来解析下载

基本命令

yutto 的基本命令如下:

yutto <url>

你可以通过 yutto -h 查看详细命令参数。

如果你需要下载单个视频,只需要使用 yutto 加上这个视频的地址即可。它支持 av/BV 号以及相应带 p=n 参数的投稿视频页面,也支持 ep 号(episode_id)的番剧页面。

比如只需要这样你就可以下载《転スラ日記》第一话:

yutto https://www.bilibili.com/bangumi/play/ep395211

yutto 还支持直接使用能够唯一定位资源的 id 来作为 <url>,刚刚的功能与下面的简化后的命令功能是完全一样的

yutto ep395211

不过有时你可能想要批量下载很多剧集,因此 yutto 提供了用于批量下载的参数 -b/--batch,它不仅支持前面所说的单个视频所在页面地址(会解析该单个视频所在的系列视频),还支持一些明确用于表示系列视频的地址,比如 md 页面(media_id)、ss 页面(season_id)。

比如像下面这样就可以下载《転スラ日記》所有已更新的剧集:

yutto --batch https://www.bilibili.com/bangumi/play/ep395211

基础参数

yutto 支持一些基础参数,无论是批量下载还是单视频下载都适用。

点击展开详细参数

最大并行 worker 数量

  • 参数 -n--num-workers
  • 默认值 8

与 bilili 不同的是,yutto 并不是使用多线程实现并行下载,而是使用协程实现的,本参数限制的是最大的并行 Worker 数量。

指定视频清晰度等级

  • 参数 -q--video-quality
  • 可选值 127 | 126 | 125 | 120 | 116 | 112 | 80 | 74 | 64 | 32 | 16
  • 默认值 127

清晰度对应关系如下

code 清晰度
127 8K 超高清
126 杜比视界
125 HDR 真彩
120 4K 超清
116 1080P 60帧
112 1080P 高码率
80 1080P 高清
74 720P 60帧
64 720P 高清
32 480P 清晰
16 360P 流畅

并不是说指定某个清晰度就一定会下载该清晰度的视频,yutto 只会尽可能满足你的要求,如果不存在指定的清晰度,yutto 就会按照默认的清晰度搜索机制进行调节,比如指定清晰度为 80首先会依次降清晰度搜索 74643216,如果依然找不到合适的则继续升清晰度搜索 112116120125126127

值得注意的是,目前杜比视界视频只能简单下载音视频流并合并,合并后并不能达到在线观看的效果。

指定音频码率等级

  • 参数 -aq--audio-quality
  • 可选值 30251 | 30255 | 30250 | 30280 | 30232 | 30216
  • 默认值 30251

码率对应关系如下

code 码率
30251 - (Hi-Res)
30255 - (杜比音效)
30250 - (杜比全景声)
30280 320kbps
30232 128kbps
30216 64kbps

码率自动调节机制与视频清晰度一致,也采用先降后升的匹配机制。

指定视频编码

  • 参数 --vcodec
  • 下载编码可选值 "av1" | "hevc" | "avc"
  • 保存编码可选值 FFmpeg 所有可用的视频编码器
  • 默认值 "avc:copy"

该参数略微复杂,前半部分表示在下载时优先选择哪一种编码的视频流,后半部分则表示在合并时如何编码视频流,两者使用 : 分隔。

值得注意的是,前半的下载编码只是优先下载的编码而已,如果不存在该编码,则会根据 --download-vcodec-priority 自动选择其余编码,如未设置 --download-vcodec-priority,则会类似视频清晰度调节机制先降序后升序的方式来选择。

而后半部分的参数如果设置成非 copy 的值则可以确保在下载完成后对其进行重新编码,而且不止支持 av1hevcavc,只要你的 FFmpeg 支持的视频编码器,它都可以完成。

指定音频编码

  • 参数 --acodec
  • 下载编码可选值 "mp4a"
  • 保存编码可选值 FFmpeg 所有可用的音频编码器
  • 默认值 "mp4a:copy"

详情同视频编码。

指定视频下载编码优先级

  • 参数 --download-vcodec-priority
  • 默认值 "auto"
  • 可选值 "auto" 或者使用 , 分隔的下载编码列表,如 "hevc,avc,av1"

当使用默认值 "auto" 时,yutto 会类似视频清晰度调节机制先降序后升序的方式来选择。

当使用自定义下载编码列表时,yutto 会严格按照列表中的顺序进行选择,如果不存在则会认为该视频无视频流。

Warning

如若设置本参数,请总是将 --download-vcode-priority 首选编码作为 --vcodec 的前半部分,否则可能会导致下载失败。

指定输出格式

  • 参数 --output-format
  • 可选值 "infer" | "mp4" | "mkv" | "mov"
  • 默认值 "infer"

在至少包含视频流时所使用的输出格式,默认选值 "infer" 表示自动根据情况进行推导以保证输出的可用,推导规则如下:

  • 如果输出包含音频流且音频流编码为 "fLaC",则输出格式为 "mkv",因为 "mp4" 尚不支持 "fLaC" 编码
  • 否则为 "mp4"

指定在仅包含音频流时的输出格式

  • 参数 --output-format-audio-only
  • 可选值 "infer" | "aac" | "mp3" | "flac" | "mp4" | "mkv" | "mov"
  • 默认值 "infer"

在仅包含音频流时所使用的输出格式,默认选值 "infer" 表示自动根据情况进行推导以保证输出的可用,推导规则如下:

  • 如果音频流编码为 "fLaC",则输出格式为 "flac"
  • 否则为 "aac"

Note

并不是仅仅在指定 --audio-only 时才会仅仅包含视频流,有些视频是仅包含音频流的,此时即便不指定 --audio-only 选项也会按照本选项的格式进行输出。

弹幕格式选择

  • 参数 -df--danmaku-format
  • 可选值 "ass" | "xml" | "protobuf"
  • 默认值 "ass"

B 站提供了 xmlprotobuf 两种弹幕数据接口,yutto 会自动下载 xml 格式弹幕并转换为 ass 格式,如果你不喜欢 yutto 自动转换的效果,可以选择输出格式为 xmlprotobuf,手动通过一些工具进行转换,比如 yutto 和 bilili 所使用的 biliass,或者使用 us-danmaku 进行在线转换。

如果你不想下载弹幕,只需要使用参数 --no-danmaku 即可。

下载块大小

  • 参数 -bs--block-size
  • 默认值 0.5

以 MiB 为单位,为分块下载时各块大小,不建议更改。

强制覆盖已下载文件

  • 参数 -w--overwrite
  • 默认值 False

代理设置

  • 参数 -x--proxy
  • 可选值 "auto" | "no" | <https?://url/to/proxy/server>
  • 默认值 "auto"

设置代理服务器,默认是从环境变量读取,no 则为不设置代理,设置其它 http/https url 则将其作为代理服务器。

存放根目录

  • 参数 -d--dir
  • 默认值 "./"

临时文件目录

  • 参数 --tmp-dir
  • 默认值是“存放根目录”即 -d, --dir 的值

Cookies 设置

  • 参数 -c--sessdata
  • 默认值 ""

设置 Cookies 后你才可以下载更高清晰度以及更多的剧集,当你传入你的大会员 SESSDATA 时(当然前提是你是大会员),你就可以下载大会员可访问的资源咯。

SESSDATA 获取方式

这里用 Chrome 作为示例,其它浏览器请尝试类似方法。

首先,用你的帐号登录 B 站,然后随便打开一个 B 站网页,比如首页

按 F12 打开开发者工具,切换到 Network 栏,刷新页面,此时第一个加载的资源应该就是当前页面的 html,选中该资源,在右侧 「Request Headers」 中找到 「cookie」,在其中找到类似于 SESSDATA=d8bc7493%2C2843925707%2C08c3e*81; 的一串字符串,复制这里的 d8bc7493%2C2843925707%2C08c3e*81,这就是你需要的 SESSDATA

另外,由于 SESSDATA 中可能有特殊符号,所以传入时你可能需要使用双引号来包裹

yutto <url> -c "d8bc7493%2C2843925707%2C08c3e*81"

当然,示例里的 SESSDATA 是无效的,请使用自己的 SESSDATA。

存放子路径模板

  • 参数 -tp--subpath-template
  • 可选参数变量 title | id | name | username | series_title | pubdate | download_date | owner_uid (以后可能会有更多)
  • 默认值 "{auto}"

通过配置子路径模板可以灵活地控制视频存放位置。

默认情况是由 yutto 自动控制存放位置的。比如下载单个视频时默认就是直接存放在设定的根目录,不会创建一层容器目录,此时自动选择了 {name} 作为模板;而批量下载时则会根据视频层级生成多级目录,比如番剧会是 {title}/{name},首先会在设定根目录里生成一个番剧名的目录,其内才会存放各个番剧剧集视频,这样方便了多个不同番剧的管理。当然,如果你仍希望将番剧直接存放在设定根目录下的话,可以修改该参数值为 {name}即可。

另外,该功能语法由 Python format 函数模板语法提供,所以也支持一些高级的用法,比如 {id:0>3}{name},此外还专门为时间变量 🕛 增加了自定义时间模板的语法 {pubdate@%Y-%m-%d %H:%M:%S},默认时间模板为 %Y-%m-%d

值得注意的是,并不是所有变量在各种场合下都会提供,比如 username, owner_uid 变量当前仅在 UP 主全部投稿视频/收藏夹/稍后再看才提供,在其它情况下不应使用它。各变量详细作用域描述见下表:

Variable Description Scope
title 系列视频总标题(番剧名/投稿视频标题) 全部
id 系列视频单 p 顺序标号 全部
name 系列视频单 p 标题 全部
username UP 主用户名 个人空间、收藏夹、稍后再看、合集、视频列表下载
series_title 合集标题 收藏夹、视频合集、视频列表下载
pubdate🕛 投稿日期 仅投稿视频
download_date🕛 下载日期 全部
owner_uid UP 主UID 个人空间、收藏夹、稍后再看、合集、视频列表下载

Note

未来可能会对路径变量及默认路径模板进行调整

url 别名文件路径

  • 参数 -af--alias-file
  • 默认值 None

指定别名文件路径,别名文件中存放一个别名与其对应的 url,使用空格或者 = 分隔,示例如下:

tensura1=https://www.bilibili.com/bangumi/play/ss25739/
tensura2=https://www.bilibili.com/bangumi/play/ss36170/
tensura-nikki=https://www.bilibili.com/bangumi/play/ss38221/

比如将上述内容存储到 ~/.yutto_alias,则通过以下命令即可解析该文件:

yutto tensura1 --batch --alias-file='~/.yutto_alias'

当参数值为 - 时,会从标准输入中读取:

cat ~/.yutto_alias | yutto tensura-nikki --batch --alias-file -

仅下载视频流

  • 参数 --video-only
  • 默认值 False

Note

这里「仅下载视频流」是指视频中音视频流仅选择视频流,而不是仅仅下载视频而不下载弹幕字幕等资源,如果需要取消字幕等资源下载,请额外使用 --no-danmaku 等参数。

「仅下载音频流」也是同样的。

仅下载音频流

  • 参数 --audio-only
  • 默认值 False

仅下载其中的音频流,保存为 .aac 文件。

不生成弹幕文件

  • 参数 --no-danmaku
  • 默认值 False

不生成章节信息

  • 参数 --no-chapter-info
  • 默认值 False

不生成章节信息,包含 MetaData 和嵌入视频流的章节信息。

仅生成弹幕文件

  • 参数 --danmaku-only
  • 默认值 False

不生成字幕文件

  • 参数 --no-subtitle
  • 默认值 False

仅生成字幕文件

  • 参数 --subtitle-only
  • 默认值 False

生成媒体元数据文件

  • 参数 --with-metadata
  • 默认值 False

目前媒体元数据生成尚在试验阶段,可能提取出的信息并不完整。

仅生成媒体元数据文件

  • 参数 --metadata-only
  • 默认值 False

不生成视频封面

  • 参数 --no-cover
  • 默认值 False

[!NOTE]

当前仅支持为包含视频流的视频生成封面。

指定媒体元数据值的格式

当前仅支持 premiered

  • 参数 --metadata-format-premiered
  • 默认值 "%Y-%m-%d"
  • 常用值 "%Y-%m-%d %H:%M:%S"

严格校验大会员状态有效

  • 参数 --vip-strict
  • 默认值 False

严格校验登录状态有效

  • 参数 --login-strict
  • 默认值 False

设置下载间隔

  • 参数 --download-interval
  • 默认值 0

设置两话之间的下载间隔(单位为秒),避免短时间內下载大量视频导致账号被封禁

禁用下载镜像

  • 参数 --banned-mirrors-pattern
  • 默认值 None

使用正则禁用特定镜像,比如 --banned-mirrors-pattern "mirrorali" 将禁用 url 中包含 mirrorali 的镜像

不显示颜色

  • 参数 --no-color
  • 默认值 False

不显示进度条

  • 参数 --no-progress
  • 默认值 False

启用 Debug 模式

  • 参数 --debug
  • 默认值 False

批量参数

有些参数是只有批量下载时才可以使用的

点击展开详细参数

启用批量下载

  • 参数 -b--batch
  • 默认值 False

只需要 yutto --batch <url> 即可启用批量下载功能。

选集

  • 参数 -p--episodes
  • 默认值 1~-1(也即全选)

也就是选集咯,其语法是这样的

  • <p1> 单独下某一剧集
    • 支持负数来选择倒数第几话
    • 此外还可以使用 $ 来代表 -1
  • <p_start>~<p_end> 使用 ~ 可以连续选取(如果起始为 1,或者终止为 -1 则可以省略)
  • <p1>,<p2>,<p3>,...,<pn> 使用 , 可以不连续选取

emmm,直接看的话大概并不能知道我在说什么,所以我们通过几个小例子来了解其语法

# 假设要下载一个具有 24 话的番剧
# 如果我们只想下载第 3 话,只需要这样
yutto <url> -b -p 3
# 那如果我想下载第 5 话到第 7 话呢,使用 `~` 可以连续选中
yutto <url> -b -p 5~7
# 那我想下载第 12 话和第 17 话又要怎么办?此时只需要 `,` 就可以将多个不连续的选集一起选中
yutto <url> -b -p 12,17
# 那我突然又想将刚才那些都选中了呢?还是使用 `,` 呀,将它们连在一起即可
yutto <url> -b -p 3,5~7,12,17
# 嗯,你已经把基本用法都了解过了,很简单吧~
# 下面是一些语法糖,不了解也完全不会影响任何功能哒~
# 那如果我只知道我想下载倒数第 3 话,而不想算倒数第三话是第几话应该怎么办?
# 此时可以用负数哒~不过要注意的是,这种参数以 `-` 开头参数需要使用 `=` 来连接选项和参数
yutto <url> -b -p=-3
# 那么如果想下载最后一话你可能会想到 `-p=-1` 对吧?不过我内置了符号 $ 用于代表最后一话
# 像下面这样就可以直接下载最后一话啦~
yutto <url> -b -p $
# 为了进一步方便表示一个范围选取,在从第一话开始选取或者以最后一话为终止时可以省略它们
# 这样就是前三话啦(这里与以 `-` 开头类似,以 `~` 开头可能被识别为 $HOME,因此最好也用等号,或者使用引号包裹)
yutto <url> -b -p=~3
# 这样就是后四话啦
yutto <url> -b -p=-4~
# 所有语法都了解完啦,我们看一个稍微复杂的例子
yutto <url> -b -p "~3,10,12~14,16,-4~"
# 很明显,上面的例子就是下载前 3 话、第 10 话、第 12 到 14 话、第 16 话以及后 4 话

下面是一些要注意的问题

  1. 这里使用的序号是视频的顺序序号,而不是番剧所标注的第 n 话,因为有可能会出现 第 x.5 话 等等的特殊情况,此时一定要按照顺序自行计数。
  2. 参数值里一定不要加空格
  3. 参数值开头为特殊符号时最好使用 = 来连接选项和参数,或者尝试使用引号包裹参数
  4. 个人空间、视频列表、收藏夹等批量下载暂不支持选集操作

同时下载附加剧集

  • 参数 -s--with-section
  • 默认值 False

指定稿件发布时间范围

  • 参数 --batch-filter-start-time--batch-filter-end-time 分别表示开始结束时间,该区间左闭右开

  • 默认 不限制

  • 支持的格式

    • %Y-%m-%d
    • %Y-%m-%d %H:%M:%S

    例如仅下载 2020 年投稿的视频,可以这样:

    --batch-filter-start-time=2020-01-01 --batch-filter-end-time=2021-01-01

从 bilili1.x 迁移

取消的功能

  • - bilibili 目录的生成
  • 播放列表生成
  • 源格式修改功能(不再支持 flv 源视频下载,如果仍有视频不支持 dash 源,请继续使用 bilili)
  • 对 Python3.8 的支持,最低支持 Python3.9
  • 下载前询问
  • 弃用选集语法糖开始符号 ^,直接使用明确的剧集号 1 即可

默认行为的修改

  • 使用协程而非多线程进行下载
  • 默认生成弹幕为 ASS
  • 默认启用从多镜像源下载的特性
  • 不仅可以控制是否使用系统代理,还能配置特定的代理服务器

新增的特性

  • 单视频下载与批量下载命令分离(bilili 命令与 yutto --batch 相类似)
  • 音频/视频编码选择
  • 可选仅下载音频/视频
  • 存放子路径的自由定制
  • 支持 url 别名
  • 支持文件列表
  • 更多的批下载支持(现已支持 UP 主全部投稿视频、视频合集、收藏夹等)
  • 更加完善的 warning 与 error 提示
  • 支持仅输入 id 即可下载(aid、bvid、episode_id 等)
  • 支持描述文件生成
  • 将链接解析延迟到下载前一刻,避免短时间大量请求导致 IP 被封的问题

小技巧

作为 log 输出到文件

虽说 yutto 不像 bilili 那样会全屏刷新,但进度条还是会一直刷新占据多行,可能影响 log 的阅读,另外颜色码也是难以阅读的,因此我们可以通过选项禁用他们:

yutto --no-color --no-progress <url> > log

使用 url alias

yutto 新增的 url alias 可以让你下载正在追的番剧时不必每次都打开浏览器复制 url,只需要将追番列表存储在一个文件中,并为这些 url 起一个别名即可

tensura-nikki=https://www.bilibili.com/bangumi/play/ss38221/

之后下载最新话只需要

yutto --batch tensura-nikki --alias-file=/path/to/alias-file

使用任务列表

现在 url 不仅支持 http/https 链接与裸 id,还支持使用文件路径与 file scheme 来用于表示文件列表,文件列表以行分隔,每行写一次命令的参数,该参数会覆盖掉主程序中所使用的参数,示例如下:

首先将下面的文件存储到一个地方

https://www.bilibili.com/bangumi/play/ss38221/ --batch -p $
https://www.bilibili.com/bangumi/play/ss38260/ --batch -p $

然后运行

yutto file:///path/to/list

即可分别下载这两个番剧的最新一话

或者直接使用相对或者绝对路径也是可以的

yutto ./path/to/list

值得注意的是,在文件列表各项里的参数优先级是高于命令里的优先级的,比如文件中使用:

tensura1 --batch -p $ --no-danmaku --vcodec="hevc:copy"
tensura2 --batch -p $

而命令中则使用

yutto file:///path/to/list --vcodec="avc:copy"

最终下载的 tensura1 会是 "hevc:copy",而 tensura2 则会是 "avc:copy"

另外,文件列表也是支持 alias 的,你完全可以为该列表起一个别名,一个比较特别的用例是将你所有追番的内容放在一个文件里,然后为该文件起一个别名(比如 subscription),这样只需要 yutto subscription --alias-file path/to/alias/file 就可以达到追番效果啦~

最后,列表也是支持嵌套的哦(虽然没什么用 2333)

自定义命令别名

如果你不习惯于 yutto 的默认参数,那么可能每次运行都需要在后面加上长长一串参数,为了避免这一点,我是这样做的:

~/.zshrc / ~/.bashrc 中自定义一条 alias,像这样

alias ytt='yutto -d ~/Movies/yutto/ -c `cat ~/.sessdata` -n 16 --vcodec="av1:copy"'

这样我每次只需要 ytt <url> 就可以直接使用这些参数进行下载啦~

由于我提前在 ~/.sessdata 存储了我的 SESSDATA,所以避免每次都要手动输入 cookie 的问题。

FAQ

名字的由来

《転スラ日記》第一话 00:24

何谓「任性」?

yutto 添加任何特性都需要以保证可维护性为前提,因此 yutto 不会添加过于复杂的特性,只需要满足够用即可。

yutto 会替代 bilili 吗

yutto 自诞生以来已经过去三年多了,功能上基本可以替代 bilili 了,因此 bilili 将会在 yutto 正式版发布后正式停止维护~(咳,正式版早着呢,我现在都懒得 RC,一直 beta 下去挺好的 ξ( ✿ > ◡❛))

其他应用

你也可以通过这些应用来使用 yutto

  • KubeSpider: 一个多功能全局资源编排下载系统,支持下载、订阅各类资源网站~

Roadmap

2.0.0-beta

  • feat: 支持 bare name (bare id, bare path)
  • refactor: url 列表能够预线性展开
  • feat: 添加各种 return code
  • test: 编写单元测试

2.0.0-rc

  • feat: 投稿视频描述文件支持
  • refactor: 整理路径变量名
  • feat: 视频合集选集支持(合集貌似有取代分 p 的趋势,需要对其进行合适的处理)
  • refactor: 针对视频合集优化路径变量
  • refactor: 优化杜比视界/音效/全景声选取逻辑(Discussing in #62
  • docs: 可爱的静态文档(WIP in #86

future

  • feat: 增加参数 --reverse 以允许逆序下载(不清楚是否有必要诶……可能只是我个人的需求)
  • feat: 字幕、弹幕嵌入视频支持(也许?)
  • feat: 封面下载支持(也许?)
  • refactor: 以插件形式支持更多音视频处理方面的功能,比如类似 autosub 的工具(也许?)
  • refactor: 直接使用 rich 替代内置的终端显示模块
  • feat: 更多批下载支持
  • feat: 以及更加可爱~

参考

参与贡献

请阅读 CONTRIBUTING.md

yutto's People

Contributors

aheadlead avatar cjc7373 avatar dependabot[bot] avatar dydhyhwu avatar frankhb avatar hui-shao avatar jeasonkim avatar lc4t avatar miremid avatar muffeter avatar ouuan avatar renovate[bot] avatar siguremo avatar symant233 avatar yllhwa avatar zjns avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

yutto's Issues

✨是否可以增加作为包调用的 api?

特性描述

增加作为包调用的 api?比如

from yutto import yutto_api

output = yutto_api(url, c='******************', danmaku='xml') # 等价于 yutto <url> -c '******************' --danmaku xml

print(output.log) # 用命令行下载时输出在屏幕上的内容
print(output.danmaku) # xml

建议解决方案

No response

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 本 issue 在 issuesdiscussion 中并没有重复问题

🐛 未捕捉到的连接错误:ServerDisconnectedError

调用方式

yutto -q 125 --vcodec hevc:hevc --no-danmaku -c <hidden> -n 8 -d <download_dir> https://www.bilibili.com/video/BV1RB4y1K7WS

环境信息

  • OS: 操作系统类型及其版本号 Ubuntu 20.04.2 LTS
  • Python: Python 版本号 (python --versionPython 3.9.5
  • yutto: yutto 版本号(yutto -vyutto 2.0.0-beta.2
  • FFmpeg: FFmpeg 版本号(ffmpeg -version
ffmpeg version 4.2.4-1ubuntu0.1 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 9 (Ubuntu 9.3.0-10ubuntu2)
configuration: --prefix=/usr --extra-version=1ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-nvenc --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil      56. 31.100 / 56. 31.100
libavcodec     58. 54.100 / 58. 54.100
libavformat    58. 29.100 / 58. 29.100
libavdevice    58.  8.100 / 58.  8.100
libavfilter     7. 57.100 /  7. 57.100
libavresample   4.  0.  0 /  4.  0.  0
libswscale      5.  5.100 /  5.  5.100
libswresample   3.  5.100 /  3.  5.100
libpostproc    55.  5.100 / 55.  5.100
  • 如果是显示相关问题
    • Shell: Shell 类型 (echo $SHELL)
    • Terminal: 终端类型
  • Others: 其它信息

问题简述

下载成视频和音频的m4s文件,然后报错

INFO  成功使用 uvloop 加速协程
 大会员  成功以大会员身份登录~
 投稿视频  王刚美食游记:时隔多年再赴湖南永州,学习传统湘菜“血鸭”做法
 INFO  开始处理视频 王刚美食游记:时隔多年再赴湖南永州,学习传统湘菜“血鸭”做法
 INFO  共包含以下 12 个视频流:
 INFO    0 [AVC ] [3840x2160] < 4K 超清  > #1
 INFO  * 1 [HEVC] [3840x2160] < 4K 超清  > #1
 INFO    2 [AVC ] [1920x1080] <1080P 60帧> #1
 INFO    3 [HEVC] [1920x1080] <1080P 60帧> #1
 INFO    4 [AVC ] [1920x1080] <1080P 高清> #1
 INFO    5 [HEVC] [1920x1080] <1080P 高清> #1
 INFO    6 [AVC ] [1280x720 ] <720P 高清 > #1
 INFO    7 [HEVC] [1280x720 ] <720P 高清 > #1
 INFO    8 [AVC ] [ 852x480 ] <480P 清晰 > #1
 INFO    9 [HEVC] [ 852x480 ] <480P 清晰 > #1
 INFO   10 [HEVC] [ 640x360 ] <360P 流畅 > #1
 INFO   11 [AVC ] [ 640x360 ] <360P 流畅 > #1
 INFO  共包含以下 3 个音频流:
 INFO  * 0 [MP4A] <320kbps >
 INFO    1 [MP4A] < 64kbps >
 INFO    2 [MP4A] <128kbps >
 INFO  开始下载……
Traceback (most recent call last):━━━━━━━━━━━━━━━━ 462.17 MiB/463.97 MiB 4.90 MiB/s    
  File "/home/al/.local/bin/yutto", line 8, in <module>
    sys.exit(main())
  File "/home/al/.local/lib/python3.9/site-packages/yutto/__main__.py", line 80, in main
    get.run(args)
  File "/home/al/.local/lib/python3.9/site-packages/yutto/utils/functiontools/sync.py", line 31, in sync_func
    return asyncio.run(async_func(*args, **kwargs))
  File "/usr/lib/python3.9/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "uvloop/loop.pyx", line 1494, in uvloop.loop.Loop.run_until_complete
  File "/home/al/.local/lib/python3.9/site-packages/yutto/cli/get.py", line 168, in run
    await process_video_download(
  File "/home/al/.local/lib/python3.9/site-packages/yutto/processor/downloader.py", line 246, in process_video_download
    await download_video_and_audio(session, video, video_path, audio, audio_path, options)
  File "/home/al/.local/lib/python3.9/site-packages/yutto/processor/downloader.py", line 146, in download_video_and_audio
    await task
  File "/home/al/.local/lib/python3.9/site-packages/yutto/utils/asynclib.py", line 39, in worker
    await task
  File "/home/al/.local/lib/python3.9/site-packages/yutto/utils/fetcher.py", line 122, in download_file_with_offset
    async with session.get(
  File "/home/al/.local/lib/python3.9/site-packages/aiohttp/client.py", line 1117, in __aenter__
    self._resp = await self._coro
  File "/home/al/.local/lib/python3.9/site-packages/aiohttp/client.py", line 544, in _request
    await resp.start(conn)
  File "/home/al/.local/lib/python3.9/site-packages/aiohttp/client_reqrep.py", line 890, in start
    message, payload = await self._protocol.read()  # type: ignore
  File "/home/al/.local/lib/python3.9/site-packages/aiohttp/streams.py", line 604, in read
    await self._waiter
aiohttp.client_exceptions.ServerDisconnectedError: Server disconnected

预期行为

顺利下载成hevc的4K视频

额外信息

是否愿意为此贡献代码

🐛 群晖下载指定收藏夹大部分情况失败报错json.decoder.JSONDecodeError: Extra data

问题简述

在群晖nas上定时任务运行(每小时运行一次),下载指定收藏夹,相同的命令大部分情况下是失败,偶尔会成功,求解

报错如下:

Traceback (most recent call last):
File "/usr/bin/yutto", line 8, in <module>
sys.exit(main())
File "/usr/lib/python3.10/site-packages/yutto/main.py", line 54, in main

�[94m INFO �[0m 未提供 SESSDATA,无法下载会员专享剧集哟~

( ´・ω・)

( ´・ω)

(  ´・)

(   ´)
run(args_list)
File "/usr/lib/python3.10/site-packages/yutto/utils/funcutils/as_sync.py", line 34, in sync_func
return asyncio.run(async_func(*args, **kwargs))
File "/usr/lib/python3.10/asyncio/runners.py", line 44, in run
return loop.run_until_complete(main)
File "/usr/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
return future.result()
File "/usr/lib/python3.10/site-packages/yutto/main.py", line 239, in run
download_list = await extractor(session, args)
File "/usr/lib/python3.10/site-packages/yutto/extractor/_abc.py", line 49, in call
return await self.extract(session, args)
File "/usr/lib/python3.10/site-packages/yutto/extractor/favourites.py", line 40, in extract
username, favourite_info = await asyncio.gather(
File "/usr/lib/python3.10/site-packages/yutto/api/space.py", line 36, in get_user_name
user_info = await Fetcher.fetch_json(session, space_info_url)
File "/usr/lib/python3.10/site-packages/yutto/utils/fetcher.py", line 35, in connect_n_times
return await connect_once(*args, **kwargs)
File "/usr/lib/python3.10/site-packages/yutto/utils/fetcher.py", line 113, in fetch_json
return await resp.json()
File "/usr/lib/python3.10/site-packages/aiohttp/client_reqrep.py", line 1120, in json
return loads(stripped.decode(encoding))
File "/usr/lib/python3.10/json/init.py", line 346, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.10/json/decoder.py", line 340, in decode
raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 1 column 47 (char 46)

复现方式

命令如下:
docker run --rm -i -v /volume1/docker/yutto/download:/app siguremo/yutto "https://space.bilibili.com/xxxxxxxxx/favlist?fid=xxxxxx&ftype=create" -b

大部分情况是失败的,偶尔成功,未发现规律。

环境信息

  • OS: DSM 7.1-42661
  • 使用docker 2.0.0-beta.23

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 如果是网络问题,已经检查网络连接、设置是否正常,并经过充分测试认为这是 yutto 本身的问题
  • 本 issue 在 issuesdiscussion 中并没有重复问题

🐛 ZeroDivisionError: division by zero

问题简述

只在 P178 出问题

[178/215]  6.【讲义50】【洛伦兹力】概念
 INFO  开始处理视频 6.【讲义50】【洛伦兹力】概念
 INFO  共包含以下 12 个视频流:
 INFO  * 0 [AVC ] [1920x1080] <1080P 高清> #3
 INFO    1 [HEVC] [1920x1080] <1080P 高清> #3
 INFO    2 [AV1 ] [1920x1080] <1080P 高清> #3
 INFO    3 [AVC ] [1280x720 ] <720P 高清 > #3
 INFO    4 [HEVC] [1280x720 ] <720P 高清 > #3
 INFO    5 [AV1 ] [1280x720 ] <720P 高清 > #3
 INFO    6 [AVC ] [ 852x480 ] <480P 清晰 > #3
 INFO    7 [HEVC] [ 852x480 ] <480P 清晰 > #3
 INFO    8 [AV1 ] [ 852x480 ] <480P 清晰 > #3
 INFO    9 [HEVC] [ 640x360 ] <360P 流畅 > #3
 INFO   10 [AVC ] [ 640x360 ] <360P 流畅 > #3
 INFO   11 [AV1 ] [ 640x360 ] <360P 流畅 > #3
 INFO  共包含以下 3 个音频流:
 INFO  * 0 [MP4A] <320kbps >
 INFO    1 [MP4A] < 64kbps >
 INFO    2 [MP4A] <128kbps >
 弹幕  ASS 弹幕已生成
 INFO  开始下载……
 DEBUG  Start download (offset 0) https://cn-sxty-cm-02-02.bilivideo.com/upgcxcode/29/85/314338529/314338529_nb2-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1666188276&gen=playurlv2&os=bcache&oi=3084308406&trid=0000b81cb7583ae84816bb42b740c95333eau&mid=0&platform=pc&upsig=2b37900b66fb12c3b02b3042ba7138ff&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&cdnid=6501&bvc=vod&nettype=0&orderid=0,3&agrr=0&bw=29385&logo=80000000
 DEBUG  Start download (offset 0) https://cn-sxty-cm-02-02.bilivideo.com/upgcxcode/29/85/314338529/314338529_nb2-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1666188276&gen=playurlv2&os=bcache&oi=3084308406&trid=0000b81cb7583ae84816bb42b740c95333eau&mid=0&platform=pc&upsig=e0ba01f9260c924f39e59093072eb9f7&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&cdnid=6501&bvc=vod&nettype=0&orderid=0,3&agrr=0&bw=16297&logo=80000000
Traceback (most recent call last):
  File "C:\Users\ZhouXiaokang\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\ZhouXiaokang\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Users\ZhouXiaokang\AppData\Local\Programs\Python\Python310\Scripts\yutto.exe\__main__.py", line 7, in <module>
  File "C:\Users\ZhouXiaokang\AppData\Local\Programs\Python\Python310\lib\site-packages\yutto\__main__.py", line 46, in main
    run(args_list)
  File "C:\Users\ZhouXiaokang\AppData\Local\Programs\Python\Python310\lib\site-packages\yutto\utils\funcutils\as_sync.py", line 33, in sync_func
    return asyncio.run(async_func(*args, **kwargs))
  File "C:\Users\ZhouXiaokang\AppData\Local\Programs\Python\Python310\lib\asyncio\runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "C:\Users\ZhouXiaokang\AppData\Local\Programs\Python\Python310\lib\asyncio\base_events.py", line 646, in run_until_complete
    return future.result()
  File "C:\Users\ZhouXiaokang\AppData\Local\Programs\Python\Python310\lib\site-packages\yutto\__main__.py", line 195, in run
    await start_downloader(
  File "C:\Users\ZhouXiaokang\AppData\Local\Programs\Python\Python310\lib\site-packages\yutto\processor\downloader.py", line 243, in start_downloader
    await download_video_and_audio(session, video, video_path, audio, audio_path, options)
  File "C:\Users\ZhouXiaokang\AppData\Local\Programs\Python\Python310\lib\site-packages\yutto\processor\downloader.py", line 129, in download_video_and_audio
    await asyncio.gather(*coroutines)
  File "C:\Users\ZhouXiaokang\AppData\Local\Programs\Python\Python310\lib\site-packages\yutto\processor\progressbar.py", line 81, in show_progress
    size_now / total_size,
ZeroDivisionError: division by zero
sys:1: RuntimeWarning: coroutine 'extract_ugc_video_data' was never awaited
PS E:\>

复现方式

yutto -b "https://space.bilibili.com/23630128/channel/seriesdetail?sid=340933" -x=no --debug

环境信息

  • OS: Win11 22H2
  • Python: 3.10.5
  • yutto: 2.0.0-beta.15
  • FFmpeg:
ffmpeg version N-91814-gc4cda4eb87 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 8.2.1 (GCC) 20180813
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
libavutil      56. 19.100 / 56. 19.100
libavcodec     58. 27.101 / 58. 27.101
libavformat    58. 18.100 / 58. 18.100
libavdevice    58.  4.101 / 58.  4.101
libavfilter     7. 27.100 /  7. 27.100
libswscale      5.  2.100 /  5.  2.100
libswresample   3.  2.100 /  3.  2.100
libpostproc    55.  2.100 / 55.  2.100
  • 如果是显示相关问题
    • Shell: Powershell
    • Terminal: Windows Terminal
  • Others: 其它信息

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 如果是网络问题,已经检查网络连接、设置是否正常,并经过充分测试认为这是 yutto 本身的问题
  • 本 issue 在 issuesdiscussion 中并没有重复问题

✨ 可以把FFmpeg加入编译好的文件夹里

特性描述

可以把FFmpeg加入编译好的文件夹里,这样就可以不需要下载FFmpeg也能下载视频、番剧.....

建议解决方案

编译好Yutto之后,将FFmpeg的EXE可执行文件和Yutto的可执行文件放到一个目录,然后打包成压缩包文件,之后再上传Github

额外信息

No response

🐛 弹幕解析似乎有点问题

问题简述

yutto https://www.bilibili.com/video/BV14A411c78B 报错

Traceback (most recent call last):
  File "C:\Users\{username}\anaconda3\envs\py395\lib\runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\{username}\anaconda3\envs\py395\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\Users\{username}\anaconda3\envs\py395\Scripts\yutto.exe\__main__.py", line 7, in <module>
  File "C:\Users\{username}\anaconda3\envs\py395\lib\site-packages\yutto\__main__.py", line 52, in main
    run(args_list)
  File "C:\Users\{username}\anaconda3\envs\py395\lib\site-packages\yutto\utils\funcutils\as_sync.py", line 33, in sync_func
    return asyncio.run(async_func(*args, **kwargs))
  File "C:\Users\{username}\anaconda3\envs\py395\lib\asyncio\runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "C:\Users\{username}\anaconda3\envs\py395\lib\asyncio\base_events.py", line 647, in run_until_complete
    return future.result()
  File "C:\Users\{username}\anaconda3\envs\py395\lib\site-packages\yutto\__main__.py", line 250, in run
    episode_data = await episode_data_coro
  File "C:\Users\{username}\anaconda3\envs\py395\lib\site-packages\yutto\extractor\common.py", line 95, in extract_ugc_video_data
    danmaku = await get_danmaku(session, cid, args.danmaku_format) if args.require_danmaku else EmptyDanmakuData
  File "C:\Users\{username}\anaconda3\envs\py395\lib\site-packages\yutto\api\danmaku.py", line 39, in get_danmaku
    danmaku_data["data"].append(await get_xml_danmaku(session, cid))
  File "C:\Users\{username}\anaconda3\envs\py395\lib\site-packages\yutto\api\danmaku.py", line 13, in get_xml_danmaku
    assert results is not None
AssertionError

不下载弹幕或采用 protobuf 格式就可以正常下载视频
yutto https://www.bilibili.com/video/BV14A411c78B --no-danmaku 没有问题
yutto https://www.bilibili.com/video/BV14A411c78B --danmaku-format protobuf 没有问题

debug 信息为

DEBUG  Windows 平台,单独设置 EventLoopPolicy
 INFO  未提供 SESSDATA,无法下载会员专享剧集哟~
 DEBUG  ffmpeg -codecs
 DEBUG  ffmpeg -encoders
 DEBUG  ffmpeg -codecs
 DEBUG  ffmpeg -encoders
 DEBUG  Get redircted url: https://www.bilibili.com/video/BV14A411c78B -> https://www.bilibili.com/video/BV14A411c78B/
 DEBUG  Fetch json: http://api.bilibili.com/x/web-interface/view?aid=&bvid=BV14A411c78B
 DEBUG  Fetch json: https://api.bilibili.com/x/player/pagelist?aid=&bvid=BV14A411c78B&jsonp=jsonp
 投稿视频  我的世界 爆炸弓 数据包乱做视频
 DEBUG  Fetch json: https://api.bilibili.com/x/player/playurl?avid=&bvid=BV14A411c78B&cid=396628236&qn=127&type=&otype=json&fnver=0&fnval=4048&fourk=1
 DEBUG  Fetch text: https://api.bilibili.com/x/player.so?aid=&bvid=BV14A411c78B&id=cid:396628236
 DEBUG  Fetch text: http://comment.bilibili.com/396628236.xml
Traceback (most recent call last):
  File "C:\Users\{username}\anaconda3\envs\py395\lib\runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\{username}\anaconda3\envs\py395\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\Users\{username}\anaconda3\envs\py395\Scripts\yutto.exe\__main__.py", line 7, in <module>
  File "C:\Users\{username}\anaconda3\envs\py395\lib\site-packages\yutto\__main__.py", line 52, in main
    run(args_list)
  File "C:\Users\{username}\anaconda3\envs\py395\lib\site-packages\yutto\utils\funcutils\as_sync.py", line 33, in sync_func
    return asyncio.run(async_func(*args, **kwargs))
  File "C:\Users\{username}\anaconda3\envs\py395\lib\asyncio\runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "C:\Users\{username}\anaconda3\envs\py395\lib\asyncio\base_events.py", line 647, in run_until_complete
    return future.result()
  File "C:\Users\{username}\anaconda3\envs\py395\lib\site-packages\yutto\__main__.py", line 250, in run
    episode_data = await episode_data_coro
  File "C:\Users\{username}\anaconda3\envs\py395\lib\site-packages\yutto\extractor\common.py", line 95, in extract_ugc_video_data
    danmaku = await get_danmaku(session, cid, args.danmaku_format) if args.require_danmaku else EmptyDanmakuData
  File "C:\Users\{username}\anaconda3\envs\py395\lib\site-packages\yutto\api\danmaku.py", line 39, in get_danmaku
    danmaku_data["data"].append(await get_xml_danmaku(session, cid))
  File "C:\Users\{username}\anaconda3\envs\py395\lib\site-packages\yutto\api\danmaku.py", line 13, in get_xml_danmaku
    assert results is not None
AssertionError

看起来是因为 http://comment.bilibili.com/396628236.xml 这个链接下不到弹幕了

复现方式

yutto https://www.bilibili.com/video/BV14A411c78B 或其他任意视频

环境信息

  • OS: win11 22000.1455
  • Python: Python 3.9.15
  • yutto: yutto 2.0.0-beta.20
  • FFmpeg: ffmpeg version N-81989-g7845c13

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 如果是网络问题,已经检查网络连接、设置是否正常,并经过充分测试认为这是 yutto 本身的问题
  • 本 issue 在 issuesdiscussion 中并没有重复问题

✨ 增加解除区域限制

特性描述

你好,在本地试用了yutto,发现非常好用,然后放到服务器上跑发现有区域限制
经过查找发现有个相对方便的处理方式,用Nginx反代获取视频地址
如有时间可以看看,感谢~

建议解决方案

相关项目地址

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 本 issue 在 issuesdiscussion 中并没有重复问题

✨ UI支持

特性描述

添加UI的支持,便于操作:

  • 添加跨平台桌面应用的支持,更利于用户上手操作
  • 提供web api / rpc api, 单独对外提供扩展UI的能力,包括但不限于(下载、解析、下载metadata,下载封面、弹幕等)

建议解决方案

  1. 类似Electron的方案,添加前端界面支持。
  2. 或者做一套web 应用 (`・ω・´)

额外信息

有点疑问, 下载那部分如果单独出来的话。下载进度怎么回传/通知给外部,这里有点小疑问。

🐛 元数据时间精度

问题简述

元数据中 premiered 字段应有精确时间而不只是投稿日期。

至少从这个讨论看之前应该是正常的。

看来是 b42ff9f 改掉的,但没找到相关文档描述。是因为有些类型的资源无法取得时间所以去掉了?如果是类似的原因,可能添加新字段保存不同精度的时间更好一点?

复现方式

任何带有元数据的下载,即带有 --with-metadata--metadata-only 的调用。

当然因为 #138 ,现在重现不了……

环境信息

  • OS: Win10 Pro 19045.2965 WSL1 Arch Linux
  • Python: 3.11.3
  • yutto: yutto 2.0.0-beta.25
  • FFmpeg: FFmpeg 版本号 ffmpeg version n6.0

额外信息

Proposed fix in local patch, not tested:

From 8faa926fa8d4b98dc49178553029cbf484a0ff17 Mon Sep 17 00:00:00 2001
From: FrankHB <[email protected]>
Date: Wed, 24 May 2023 00:06:08 +0800
Subject: [PATCH] Fixed tampstamps.

This was broken since b42ff9ffd0a4c544f8d8f4cfe6575dc87781e801.

Signed-off-by: FrankHB <[email protected]>
---
 yutto/api/bangumi.py   | 2 +-
 yutto/api/cheese.py    | 2 +-
 yutto/api/ugc_video.py | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/yutto/api/bangumi.py b/yutto/api/bangumi.py
index c32b939..42cc157 100644
--- a/yutto/api/bangumi.py
+++ b/yutto/api/bangumi.py
@@ -165,7 +165,7 @@ def _parse_bangumi_metadata(item: dict[str, Any]) -> MetaData:
         show_title=item["share_copy"],
         plot=item["share_copy"],
         thumb=item["cover"],
-        premiered=get_time_str_by_stamp(item["pub_time"], "%Y-%m-%d"),
+        premiered=get_time_str_by_stamp(item["pub_time"]),
         dateadded=get_time_str_by_now(),
         source="",  # TODO
         actor=[],  # TODO
diff --git a/yutto/api/cheese.py b/yutto/api/cheese.py
index 5ea6041..623275a 100644
--- a/yutto/api/cheese.py
+++ b/yutto/api/cheese.py
@@ -138,7 +138,7 @@ def _parse_cheese_metadata(item: dict[str, Any]) -> MetaData:
         show_title=item["title"],  # 无此字段,用 title 代替
         plot=item["title"],  # 无此字段,用 title 代替
         thumb=item["cover"],
-        premiered=get_time_str_by_stamp(item["release_date"], "%Y-%m-%d"),
+        premiered=get_time_str_by_stamp(item["release_date"]),
         dateadded=get_time_str_by_now(),
         source="",  # TODO
         actor=[],  # TODO
diff --git a/yutto/api/ugc_video.py b/yutto/api/ugc_video.py
index 9915fa0..a31b54f 100644
--- a/yutto/api/ugc_video.py
+++ b/yutto/api/ugc_video.py
@@ -271,7 +271,7 @@ def _parse_ugc_video_metadata(
         show_title=page_info["part"],
         plot=video_info["description"],
         thumb=page_info["first_frame"] if page_info["first_frame"] is not None else video_info["picture"],
-        premiered=get_time_str_by_stamp(video_info["pubdate"], "%Y-%m-%d"),
+        premiered=get_time_str_by_stamp(video_info["pubdate"]),
         dateadded=get_time_str_by_now(),
         actor=video_info["actor"],
         genre=video_info["genre"],
-- 
2.41.0.rc1.windows.1

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 如果是网络问题,已经检查网络连接、设置是否正常,并经过充分测试认为这是 yutto 本身的问题
  • 本 issue 在 issuesdiscussion 中并没有重复问题

🐛 RuntimeWarning: coroutine 'extract_ugc_video_data' was never awaited

问题简述

使用podman运行时出现的问题,完整错误如下

 INFO  成功使用 uvloop 加速协程
 INFO  未提供 SESSDATA,无法下载会员专享剧集哟~
 UP 主投稿视频  吃了个迟x
 [1/105]  在逃公主的高跟鞋!
 INFO  开始处理视频 在逃公主的高跟鞋!
 INFO  共包含以下 6 个视频流:
 INFO  * 0 [AVC ] [ 852x480 ] <480P 清晰 > #3
 INFO    1 [HEVC] [ 852x480 ] <480P 清晰 > #3
 INFO    2 [AV1 ] [ 852x480 ] <480P 清晰 > #3
 INFO    3 [HEVC] [ 640x360 ] <360P 流畅 > #3
 INFO    4 [AVC ] [ 640x360 ] <360P 流畅 > #3
 INFO    5 [AV1 ] [ 640x360 ] <360P 流畅 > #3
 INFO  共包含以下 3 个音频流:
 INFO  * 0 [MP4A] <320kbps >
 INFO    1 [MP4A] < 64kbps >
 INFO    2 [MP4A] <128kbps >
Traceback (most recent call last):
  File "/usr/bin/yutto", line 8, in <module>
    sys.exit(main())
  File "/usr/lib/python3.10/site-packages/yutto/__main__.py", line 52, in main
    run(args_list)
  File "/usr/lib/python3.10/site-packages/yutto/utils/funcutils/as_sync.py", line 33, in sync_func
    return asyncio.run(async_func(*args, **kwargs))
  File "/usr/lib/python3.10/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "uvloop/loop.pyx", line 1517, in uvloop.loop.Loop.run_until_complete
  File "/usr/lib/python3.10/site-packages/yutto/__main__.py", line 258, in run
    await start_downloader(
  File "/usr/lib/python3.10/site-packages/yutto/processor/downloader.py", line 249, in start_downloader
    write_danmaku(
  File "/usr/lib/python3.10/site-packages/yutto/utils/danmaku.py", line 78, in write_danmaku
    write_ass_danmaku(xml_danmaku, "xml", file_path, height, width)
  File "/usr/lib/python3.10/site-packages/yutto/utils/danmaku.py", line 42, in write_ass_danmaku
    with open(
PermissionError: [Errno 13] Permission denied: '/app/吃了个迟x/在逃公主的高跟鞋!_2023-03-04/在逃公主的高跟鞋!.ass'
sys:1: RuntimeWarning: coroutine 'extract_ugc_video_data' was never awaited

复现方式

参数如下

DOCKER_ARGS="--rm -v"
ARGS="-b -tp {username}/{name}_{pubdate}/{name}"

function download_v(){
        podman run $DOCKER_ARGS $(pwd):/app siguremo/yutto https://space.bilibili.com/$1/video $ARGS
}

必然出现问题

环境信息

  • 系统
    RockyLinux9.1
  • uname -a
    Linux nuc11 5.14.0-162.18.1.el9_1.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Mar 1 22:02:24 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 如果是网络问题,已经检查网络连接、设置是否正常,并经过充分测试认为这是 yutto 本身的问题
  • 本 issue 在 issuesdiscussion 中并没有重复问题

🐛 下载阶段的并行貌似有问题

问题简述

貌似目前的限制性并行并无法做到真正的并行?当我改用 asyncio.gather 尝试简化并行下载时,发现下载速度会快很多……

但改进后下载过程中会遇到在前面的块未下载完成导致的迟迟无法从缓存写入文件的问题,这可能导致内存占用过大,所以如果修改的话就必须要考虑下这个问题……

复现方式

环境信息

  • OS: 操作系统类型及其版本号
  • Python: Python 版本号 (python --version)
  • yutto: yutto 版本号 (yutto -v)
  • FFmpeg: FFmpeg 版本号 (ffmpeg -version)
  • 如果是显示相关问题
    • Shell: Shell 类型 (echo $SHELL)
    • Terminal: 终端类型
  • Others: 其它信息

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 如果是网络问题,已经检查网络连接、设置是否正常,并经过充分测试认为这是 yutto 本身的问题
  • 本 issue 在 issuesdiscussion 中并没有重复问题

✨ 多音轨合并

特性描述

有些番剧有多语种配音,如柯南(国配+日配)
考虑是否可以将合并音轨的功能进行实现(我好像咕咕咕了一个UI了)

建议解决方案

理论上应该在合并时存在多音轨即可?

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 本 issue 在 issuesdiscussion 中并没有重复问题

✨ 自定义临时文件目录

特性描述

现在临时文件(_video.m4s 等)是和输出的视频放在同一个目录的。希望这些临时文件的存放位置能够自定义。

建议解决方案

加一个 --tmp-dir 参数,用来放临时文件。

额外信息

实际遇到的问题:和云盘进行同步时有时候会把临时文件同步上去..

🐛最近是不是cookies过期了,还是怎么回事,只能下载到480P的视频

问题简述

最近是不是cookies过期了,还是怎么回事,只能下载到480P的视频,期待大佬回复

复现方式

/

环境信息

  • OS: windows10 1909
  • Python: Python 3.11.0
  • yutto: v2.0.0-beta.17
  • FFmpeg: ffmpeg version N-108766-geb9153b4a7-20221020
  • 如果是显示相关问题
    • Shell: Shell 类型 (echo $SHELL)
    • Terminal: 终端类型
  • Others: 其它信息

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 如果是网络问题,已经检查网络连接、设置是否正常,并经过充分测试认为这是 yutto 本身的问题
  • 本 issue 在 issuesdiscussion 中并没有重复问题

✨ 请问可以添加去除水印功能吗?

特性描述

请问可以添加去除水印功能吗?
有时候需要采集一下素材,但是带有水印有点不好用

建议解决方案

No response

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 本 issue 在 issuesdiscussion 中并没有重复问题

🐛 访问权限不足

问题简述

yutto/api/space.py", line 38, in get_user_name
return user_info["data"]["name"]
KeyError: 'data'

{'code': -403, 'message': '访问权限不足', 'ttl': 1}

请问这是代理的问题吗?

复现方式

yutto https://space.bilibili.com/100969474/video -d videos/bili_0518

环境信息

  • OS: ubuntu
  • Python: 3.9
  • yutto: 2.0.0-beta.25
  • FFmpeg: version 5.1.2

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 如果是网络问题,已经检查网络连接、设置是否正常,并经过充分测试认为这是 yutto 本身的问题
  • 本 issue 在 issuesdiscussion 中并没有重复问题

🐛 WARN 未安装 uvloop,无法使用其加速协程

问题简述

下载时提示,未安装uvloop,无法使用加速协程

pip install uvloop:
Requirement already satisfied: uvloop in /usr/local/lib/python3.9/site-packages (0.16.0)

pip --version:
22.0.4

复现方式

yutto -d /path -c "sdafghgdfsfgghg" -b ss3365

环境信息

  • OS: macOS 12.2.1
  • Python: 3.9.10 / 3.10.2
  • yutto: 2.0.0-beta.11
  • FFmpeg: 5.0
  • 如果是显示相关问题
    • Shell: zsh 5.8
    • Terminal: iTerm2 3.4.15
  • Others: 其它信息

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 如果是网络问题,已经检查网络连接、设置是否正常,并经过充分测试认为这是 yutto 本身的问题
  • 本 issue 在 issuesdiscussion 中并没有重复问题

🐛 下载视频到末尾零点几Mib时出现零速度或负速度显示

问题简述

下载视频(包括单独视频、番剧等)到末尾零点几Mib时出现零速度或负速度显示

复现方式

yutto --no-danmaku -c "***************" -b XXX
(XXX代表URL)

环境信息

  • OS: Windows 10.0.22000
  • Python: Python 3.10.2
  • yutto: yutto 2.0.0-beta.12
  • FFmpeg: ffmpeg version n5.0-4-g911d7f167c-20220209

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 如果是网络问题,已经检查网络连接、设置是否正常,并经过充分测试认为这是 yutto 本身的问题
  • 本 issue 在 issuesdiscussion 中并没有重复问题

✨ 增加繁中字幕翻译功能

特性描述

主要是自己有下载港澳台地区番剧观看的需求,但B站只有较近的番剧有字幕且一般只有繁体,所以想着加一个自动翻译繁中字幕,并生成简中字幕的功能。

建议解决方案

我fork的分支已经基于繁化姬粗略的做了一版,但我觉得要做的话,可以完善翻译这个功能,比如说**朋友下载了B站仅带有简中CC字幕的视频,他想繁化。所以可以加一个类似--sub_prefer_lang的选项,比如是zh-Hant,就检查源本是是否有繁体CC字幕,如果没有,再检查是否有简体CC字幕,如果有,就调用三方API或者OpenCC翻译一份繁体字幕。

额外信息

其实我觉得字幕内嵌(烧录)的意义不大,不灵活,而且B站也只有CC字幕,没有带有样式的ASS字幕,但可以把字幕打包进视频,我fork的分支采用mkv容器,这样我可以把源本身的字幕和翻译的字幕一同打包进视频,并选定简体中文作为默认字幕。

另外调试的时候发现downloader.py#178行有个小错误,audio写成了video。

🐛 Connection reset by peer

问题简述

aiohttp.client_exceptions.ClientOSError: [Errno 54] Connection reset by peer

复现方式

$ yutto --batch https://www.bilibili.com/video/BV1av411r7yB\?from\=search\&seid\=4202061868728123298\&spm_id_from\=333.337.0.0 [23:17:24]
INFO 成功使用 uvloop 加速协程
INFO 未提供 SESSDATA,无法下载会员专享剧集
投稿视频 一天学完 PostgreSQL
INFO 全 26 话
INFO 已选择第 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 话
Traceback (most recent call last):
File "/Users/xxxxx/opt/anaconda3/envs/python3_9_7/bin/yutto", line 8, in
sys.exit(main())
File "/Users/xxxxx/opt/anaconda3/envs/python3_9_7/lib/python3.9/site-packages/yutto/main.py", line 87, in main
batch_get.run(args)
File "/Users/xxxxx/opt/anaconda3/envs/python3_9_7/lib/python3.9/site-packages/yutto/utils/functiontools/sync.py", line 31, in sync_func
return asyncio.run(async_func(*args, **kwargs))
File "/Users/xxxxx/opt/anaconda3/envs/python3_9_7/lib/python3.9/asyncio/runners.py", line 44, in run
return loop.run_until_complete(main)
File "uvloop/loop.pyx", line 1501, in uvloop.loop.Loop.run_until_complete
File "/Users/xxxxx/opt/anaconda3/envs/python3_9_7/lib/python3.9/site-packages/yutto/cli/batch_get.py", line 100, in run
episode_data = await fetch_acg_video_data(
File "/Users/xxxxx/opt/anaconda3/envs/python3_9_7/lib/python3.9/site-packages/yutto/cli/get.py", line 100, in fetch_acg_video_data
danmaku = await get_danmaku(session, cid, args.danmaku_format) if not args.no_danmaku else EmptyDanmakuData
File "/Users/xxxxx/opt/anaconda3/envs/python3_9_7/lib/python3.9/site-packages/yutto/api/danmaku.py", line 33, in get_danmaku
danmaku_data["data"].append(await get_xml_danmaku(session, cid))
File "/Users/xxxxx/opt/anaconda3/envs/python3_9_7/lib/python3.9/site-packages/yutto/api/danmaku.py", line 10, in get_xml_danmaku
return await Fetcher.fetch_text(session, danmaku_api.format(cid=cid), encoding="utf-8")
File "/Users/xxxxx/opt/anaconda3/envs/python3_9_7/lib/python3.9/site-packages/yutto/utils/fetcher.py", line 25, in connect_n_times
return await connect_once(*args, **kwargs)
File "/Users/xxxxx/opt/anaconda3/envs/python3_9_7/lib/python3.9/site-packages/yutto/utils/fetcher.py", line 65, in fetch_text
async with session.get(url, proxy=Fetcher.proxy) as resp:
File "/Users/xxxxx/opt/anaconda3/envs/python3_9_7/lib/python3.9/site-packages/aiohttp/client.py", line 1138, in aenter
self._resp = await self._coro
File "/Users/xxxxx/opt/anaconda3/envs/python3_9_7/lib/python3.9/site-packages/aiohttp/client.py", line 559, in _request
await resp.start(conn)
File "/Users/xxxxx/opt/anaconda3/envs/python3_9_7/lib/python3.9/site-packages/aiohttp/client_reqrep.py", line 898, in start
message, payload = await protocol.read() # type: ignore[union-attr]
File "/Users/xxxxx/opt/anaconda3/envs/python3_9_7/lib/python3.9/site-packages/aiohttp/streams.py", line 616, in read
await self._waiter
aiohttp.client_exceptions.ClientOSError: [Errno 54] Connection reset by peer

环境信息

  • OS: macOS 12.1
  • Python: Python 3.9.7
  • yutto: yutto 2.0.0-beta.7
  • FFmpeg: ffmpeg version 4.4.1

额外信息

No response

🐛 windows 10下出现OSError: [WinError 123]报错

问题简述

运行报错,Linux下正常运行,windows运行报错信息如下:

C:\Users\xxx>yutto 'https://www.bilibili.com/video/BV1Fm4y1z7nJ/' -c "xxxx"
 大会员  成功以大会员身份登录~
Traceback (most recent call last):
  File "C:\Users\xxx\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\xxx\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\Users\xxx\AppData\Local\Programs\Python\Python39\Scripts\yutto.exe\__main__.py", line 7, in <module>
  File "C:\Users\xxx\AppData\Local\Programs\Python\Python39\lib\site-packages\yutto\__main__.py", line 50, in main
    args_list = flatten_args(args, parser)
  File "C:\Users\xxx\AppData\Local\Programs\Python\Python39\lib\site-packages\yutto\__main__.py", line 291, in flatten_args
    if re.match(r"file://", args.url) or Path(args.url).is_file():
  File "C:\Users\xxx\AppData\Local\Programs\Python\Python39\lib\pathlib.py", line 1439, in is_file
    return S_ISREG(self.stat().st_mode)
  File "C:\Users\xxx\AppData\Local\Programs\Python\Python39\lib\pathlib.py", line 1221, in stat
    return self._accessor.stat(self)
OSError: [WinError 123] 文件名、目录名或卷标语法不正确。: "'https:\\www.bilibili.com\\video\\BV1Fm4y1z7nJ\\'"

复现方式

yutto 'https://www.bilibili.com/video/BV1Fm4y1z7nJ/' -c "xxxx"

环境信息

  • OS: windows 10 19045.2728
  • Python: 3.9.4
  • yutto: 2.0.0-beta.21
  • FFmpeg: N-94813-g85386c36e3
  • 如果是显示相关问题
    • Shell: Shell 类型 (echo $SHELL)
    • Terminal: 终端类型
  • Others: 其它信息

额外信息

定位原因是__main.py__ 291行的Path(args.url).is_file()
将源代码修改为os.path.isfile(args.url)后正常运行,应该是依赖的兼容性问题

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 如果是网络问题,已经检查网络连接、设置是否正常,并经过充分测试认为这是 yutto 本身的问题
  • 本 issue 在 issuesdiscussion 中并没有重复问题

✨ 增加仅下载字幕选项

特性描述

B站部分视频有CC字幕,有时候想单独下载,不想和音频或者视频一起下载。

建议解决方案

增加仅下载字幕选项,例如--only-subtitle, 如果视频没有CC字幕,则提示该视频无字幕即可。

额外信息

No response

🐛 下载视频列表时无法下载整个列表

问题简述

使用 docker 方式运行

docker run --rm -it -v /mnt/nas-1/Data/bilivideo/:/app siguremo/yutto "https://space.bilibili.com/477306079/channel/seriesdetail?sid=61367" -b -n 24 -q 16 -x no --tmp-dir /mnt/0/tmp/

视频列表进行下载,运行得到

INFO 成功使用 uvloop 加速协程
WARN 以非大会员身份登录,注意无法下载会员专享剧集喔~
视频列表 直播回放
[1/20] 【直播回放】谢下昨天的礼物 2022年3月21日20点场
……

下载得到最近20个视频,程序结束。且在20个视频下载完成后不再继续下载(实际上该列表中有60多个视频)

同样地,对有39个视频的 https://space.bilibili.com/434773406/channel/seriesdetail?sid=414531 进行下载,得到了最近20个视频的22个分P。

而使用类似

docker run --rm -it -v /mnt/nas-1/Data/bilivideo/:/app siguremo/yutto "https://space.bilibili.com/400230277/channel/collectiondetail?sid=507" -b -n 24 -q 16 -x no --tmp-dir /mnt/0/tmp/

的指令,下载UP主自己创建的合集则符合预期,会将所有的视频全部下载下来。

(因服务器环境问题还未使用过非docker的方式运行,视频)

复现方式

docker run --rm -it -v /mnt/nas-1/Data/bilivideo/:/app siguremo/yutto "https://space.bilibili.com/477306079/channel/seriesdetail?sid=61367" -b -n 24 -q 16 -x no --tmp-dir /mnt/0/tmp/

环境信息

  • OS: Ubuntu 18.04.5 LTS
  • Python: docker 镜像提供
  • yutto: docker 镜像提供
  • FFmpeg: docker 镜像提供

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 如果是网络问题,已经检查网络连接、设置是否正常,并经过充分测试认为这是 yutto 本身的问题
  • 本 issue 在 issuesdiscussion 中并没有重复问题

🐛 macOS brew 安装报错

问题简述

Mac M1 pro 上使用brew安装报错

$brew tap siguremo/tap
$brew install yutto

……
==> Installing yutto from siguremo/tap
==> python3.10 -m venv --system-site-packages /opt/homebrew/Cellar/yutto/2.0.0b14/libexec
==> /opt/homebrew/Cellar/yutto/2.0.0b14/libexec/bin/pip install -v --no-deps --no-binary :all: --ignore-installed /private/tmp/yutto--aiofiles-20220615-45882-18pu2rt/aiofiles-0.8.0
==> /opt/homebrew/Cellar/yutto/2.0.0b14/libexec/bin/pip install -v --no-deps --no-binary :all: --ignore-installed /private/tmp/yutto--aiohttp-20220615-45882-isweuq/aiohttp-3.8.1
==> /opt/homebrew/Cellar/yutto/2.0.0b14/libexec/bin/pip install -v --no-deps --no-binary :all: --ignore-installed /private/tmp/yutto--aiosignal-20220615-45882-18hwxfw/aiosignal-1.2.0
==> /opt/homebrew/Cellar/yutto/2.0.0b14/libexec/bin/pip install -v --no-deps --no-binary :all: --ignore-installed /private/tmp/yutto--async-timeout-20220615-45882-a45cpa/async-timeout-4.0.2
==> /opt/homebrew/Cellar/yutto/2.0.0b14/libexec/bin/pip install -v --no-deps --no-binary :all: --ignore-installed /private/tmp/yutto--attrs-20220615-45882-1ede57r/attrs-21.4.0
==> /opt/homebrew/Cellar/yutto/2.0.0b14/libexec/bin/pip install -v --no-deps --no-binary :all: --ignore-installed /private/tmp/yutto--biliass-20220615-45882-n9adjl/biliass-1.3.5
Last 15 lines from /Users/goodryb/Library/Logs/Homebrew/yutto/07.pip:
setup_py_code = "from setuptools import setup; setup()"

exec(compile(setup_py_code, filename, "exec"))
'"'"''"'"''"'"' % ('"'"'/private/tmp/yutto--biliass-20220615-45882-n9adjl/biliass-1.3.5/setup.py'"'"',), "", "exec"))' egg_info --egg-base /private/tmp/pip-pip-egg-info-r4tc4bcx
cwd: /private/tmp/yutto--biliass-20220615-45882-n9adjl/biliass-1.3.5/
Preparing metadata (setup.py): finished with status 'error'
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
WARNING: You are using pip version 22.0.4; however, version 22.1.2 is available.
You should consider upgrading via the '/opt/homebrew/Cellar/yutto/2.0.0b14/libexec/bin/python3.10 -m pip install --upgrade pip' command.

If reporting this issue please do so at (not Homebrew/brew or Homebrew/core):
https://github.com/siguremo/homebrew-tap/issues

复现方式

$brew install yutto

环境信息

  • OS: 操作系统类型及其版本号 macOS 12.4
  • Python: Python 版本号 (python --version) Python 3.9.13
  • yutto: yutto 版本号 (yutto -v) 无
  • FFmpeg: FFmpeg 版本号 (ffmpeg -version) 无
  • 如果是显示相关问题
    • Shell: Shell 类型 (echo $SHELL) zsh
    • Terminal: 终端类型 iterm2
  • Others: 其它信息

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 如果是网络问题,已经检查网络连接、设置是否正常,并经过充分测试认为这是 yutto 本身的问题
  • 本 issue 在 issuesdiscussion 中并没有重复问题

✨ 投稿视频尚未支持 metadata 生成

问题简述

通过源码编译安装的 yutto 添加生成元数据文件的参数后报错,python 3.9 和 3.10 都不能正常运行。

复现方式

$ yutto --with-metadata https://www.bilibili.com/video/BV1BW411u7GY --debug
大会员 成功以大会员身份登录~
DEBUG ffmpeg -codecs
DEBUG ffmpeg -encoders
DEBUG ffmpeg -codecs
DEBUG ffmpeg -encoders
投稿视频 柴可夫斯基第一钢琴协奏曲 郎朗 巴黎交响乐团 Piavo Jarvi
INFO [<class 'type'>]正在生成【柴可夫斯基第一钢琴协奏曲 郎朗 巴黎交响乐团 Piavo Jarvi】媒体描述文件
Traceback (most recent call last):
File "/Users/pierce/Library/Python/3.10/bin/yutto", line 8, in
sys.exit(main())
File "/Users/pierce/Library/Python/3.10/lib/python/site-packages/yutto/main.py", line 83, in main
get.run(args)
File "/Users/pierce/Library/Python/3.10/lib/python/site-packages/yutto/utils/functiontools/sync.py", line 31, in sync_func
return asyncio.run(async_func(*args, **kwargs))
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/runners.py", line 44, in run
return loop.run_until_complete(main)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/base_events.py", line 641, in run_until_complete
return future.result()
File "/Users/pierce/Library/Python/3.10/lib/python/site-packages/yutto/cli/get.py", line 174, in run
save_episode_metadata_file(episode_data, metadata_type)
File "/Users/pierce/Library/Python/3.10/lib/python/site-packages/yutto/utils/metadata.py", line 20, in save_episode_metadata_file
metadata = episode_data["metadata"]
KeyError: 'metadata'

环境信息

  • OS: macOS Monterey 12.0.1
  • Python: 3.10.0 & 3.9.7
  • yutto: yutto 2.0.0-beta.5 (通过源码编译安装)
  • FFmpeg: 4.4.1

额外信息

No response

✨ 是否可以添加仅下载弹幕功能?

特性描述

由于部分番剧和谐、删减情况比较严重,有时只想下载弹幕文件配合其他来源的资源食用。

建议解决方案

提供一个--danmaku-only选项表示仅下载弹幕。

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 本 issue 在 issuesdiscussion 中并没有重复问题

🐛 当下载具有特定视频的收藏夹时, 出现抓取超时

问题简述

当下载收藏夹的时候, stdout 出现大规模的

 WARN  抓取超时,正在重试,剩余 2 次

并且最终重试失败,程序退出.

而对收藏夹内视频单独进行下载时, 没有问题出现

复现方式

收藏夹有3个视频

  1. https://www.bilibili.com/video/BV1Xt411f7Pc
  2. https://www.bilibili.com/video/BV1FU4y177Cs
  3. https://www.bilibili.com/video/BV1Gx411w7wU

合计大约有 774 p 视频

yutto -b <收藏夹url> -n 16 --proxy "no"  -c "cookies非大会员" --no-danmaku

环境信息

  • OS: 版本 Windows 11 教育版 21H2 22000.526
  • Python: 3.10.2
  • yutto: 2.0.0-beta.10
  • FFmpeg: 5.0-full_build-www.gyan.dev
  • 如果是显示相关问题
    • Shell: Shell 类型 (echo $SHELL)
    • Terminal: 终端类型
  • Others: 其它信息

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 如果是网络问题,已经检查网络连接、设置是否正常,并经过充分测试认为这是 yutto 本身的问题
  • 本 issue 在 issuesdiscussion 中并没有重复问题

✨ 抓取失败/超时时显示失败/超时的 url

特性描述

抓取失败/超时时显示失败/超时的 url。目前仅仅显示抓取失败/超时,并不知道是哪一个 url 出现了失败/超时,很难排查问题。

建议解决方案

抓取失败/超时时显示失败/超时的 url

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 本 issue 在 issuesdiscussion 中并没有重复问题

🐛 投稿视频 meta nfo 数据出问题

Discussed in #67

Originally posted by carr0t2 March 5, 2022
url https://www.bilibili.com/video/BV1Fa41127LF
命令大约为 fr"""yutto "{BV}" -tp "{BV}" -q 80 --with-metadata -c "xxxx" --no-danmaku
控制台输出
image
nfo数据

<?xml version="1.0" ?>
<episodedetails>
	<title>1643775239905.mp4</title>
	<show_title>1643775239905.mp4</show_title>
	<plot>-</plot>
	<thumb>http://i0.hdslb.com/bfs/storyff/n220202qn37tzl4ma81uwe27whja74z7_firsti.jpg</thumb>
	<premiered>2022-02-02 12:22:12</premiered>
	<dataadded>2022-03-05 02:36:37</dataadded>
	<source/>
	<original_filename/>
</episodedetails>

明显是解析上出现了一些问题

✨ 视频合并问题

特性描述

当前视频只能合并为mp4,希望能支持别的容器比如mov。
另外HEVC视频合并后,在macOS中无法显示封面图片,也不能使用「预览.app」查看,ffmpeg需要加上-tag:v hvc1标签才能更好兼容macOS。可参见

建议解决方案

No response

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 本 issue 在 issuesdiscussion 中并没有重复问题

✨ 批量下载封面

特性描述

因为想导入到Jellyfin,有封面的话便于查看,是否有添加此功能的计划呢

建议解决方案

No response

额外信息

No response

✨ 保存配置文件

特性描述

将cookie等信息保存到一个配置文件里,就不用每次使用都要再获取一遍cookie了

建议解决方案

在当前用户的目录(类似于C:\Users\Administrator)下创建.yutto目录,在这个目录里创建yutto.data文件,保存cookie等信息,初次使用需要保存,后续就从yutto.data文件里读取cookie等信息使用,若信息失效,要求用户重新设置即可。

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 本 issue 在 issuesdiscussion 中并没有重复问题

✨ 并行优化链接解析阶段

特性描述

唔,链接解析有时还是太慢了呀,当时居然没把这里并行了……唔,这次把这里也尝试并行一下吧,顺便完善下异步控制相关的~~~

建议解决方案

唔,等我探索探索……

额外信息

什么也木有呀~

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 本 issue 在 issuesdiscussion 中并没有重复问题

🐛 使用 yutto 下载时,下载可能会突然停止或下载速度变为负数

问题简述

使用 yutto 下载时,可能会出现下载突然停止,必须重新执行下载指令 或 下载速度变为负数,但稍等一会就能恢复正常 (这个"一会"可能只有5s,也可能长达5min) 的情况

复现方式

yutto (-b) --no-danmaku -c "**********" XXXXXX

  • ********为SESSDAT,XXXXXX为视频/番剧/电影等的编号或链接
  • () 表示可选,不影响复现

环境信息

  • OS: Windows 11 专业版 Insider Preview 22H2 25217.1010
  • Python: Python 3.11.3
  • yutto: yutto 2.0.0-beta.22
  • FFmpeg: ffmpeg version N-108625-g28ac2279ad-20221012
  • 执行环境: Windows Terminal.Powershell
  • 使用的用户权限: Administrator

额外信息

可能与程序版本无关

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 如果是网络问题,已经检查网络连接、设置是否正常,并经过充分测试认为这是 yutto 本身的问题
  • 本 issue 在 issuesdiscussion 中并没有重复问题

🐛 循环时退出run函数会导致 RuntimeWarning

问题简述

 [876/1256]  ...
 ERROR  启用了严格校验大会员模式,请检查SESSDATA或大会员状态!
/Users/lc4t/miniforge3/lib/python3.9/asyncio/events.py:80: RuntimeWarning: coroutine 'extract_ugc_video_data' was never awaited
  self._context.run(self._callback, *self._args)
RuntimeWarning: Enable tracemalloc to get the object allocation traceback

# 然后就退出了

复现方式

  1. 首先找到一个很长的列表去批量下载,需要使用大会员SESSDATA
  2. 在下载几个之后,注销用户登录以让SESSDATA失效
  3. 下载下一个视频时报Warning然后退出

环境信息

  • yutto: v2.0.0-beta.25

额外信息

似乎只要中断run就会触发,并不是一定要大会员失效

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 如果是网络问题,已经检查网络连接、设置是否正常,并经过充分测试认为这是 yutto 本身的问题
  • 本 issue 在 issuesdiscussion 中并没有重复问题

🐛 Docker 最新版本 `siguremo/yutto:2.0.0-beta.26` 版本实际运行的是 `2.0.0-beta.25` 版本

问题简述

Docker 最新版本 siguremo/yutto:2.0.0-beta.26 版本实际运行的是 2.0.0-beta.25 版本

影响是 space api 依然无法使用

复现方式

docker pull siguremo/yutto:2.0.0-beta.26
docker run --rm siguremo/yutto:2.0.0-beta.26 -v

输出 yutto 2.0.0-beta.25

环境信息

  • OS: 操作系统类型及其版本号
  • Python: Python 版本号 (python --version)
  • yutto: yutto 版本号 (yutto -v)
  • FFmpeg: FFmpeg 版本号 (ffmpeg -version)
  • 如果是显示相关问题
    • Shell: Shell 类型 (echo $SHELL)
    • Terminal: 终端类型
  • Others: 其它信息

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 如果是网络问题,已经检查网络连接、设置是否正常,并经过充分测试认为这是 yutto 本身的问题
  • 本 issue 在 issuesdiscussion 中并没有重复问题

☑️ Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Awaiting Schedule

These updates are awaiting their schedule. Click on a checkbox to get an update now.

  • ⬆️ deps: Update dependencies (non-major) (pyright, pytest, ruff)

Detected dependencies

dockerfile
Dockerfile
  • alpine 3.20
github-actions
.github/workflows/e2e-test.yml
  • actions/checkout v4
  • actions/setup-python v5
  • extractions/setup-just v2
.github/workflows/latest-release-test.yml
  • actions/setup-python v5
.github/workflows/lint-and-fmt.yml
  • actions/checkout v4
  • actions/setup-python v5
  • extractions/setup-just v2
.github/workflows/release.yml
  • actions/checkout v4
  • actions/setup-python v5
  • extractions/setup-just v2
  • actions/upload-artifact v4
  • actions/download-artifact v4
  • actions/download-artifact v4
  • softprops/action-gh-release v2
.github/workflows/unit-test.yml
  • actions/checkout v4
  • actions/setup-python v5
  • extractions/setup-just v2
pep621
pyproject.toml
  • poetry_core >=1.3.0
poetry
pyproject.toml
  • python ^3.9.0
  • aiofiles ^24.0.0
  • biliass 1.3.11
  • colorama ^0.4.6
  • typing-extensions ^4.12.0
  • dict2xml 1.7.5
  • httpx ^0.27.0
  • pytest ^8.2.1
  • pyright 1.1.371
  • pytest-rerunfailures ^14.0
  • ruff ^0.5.0
  • typos ^1.22.0

  • Check this box to trigger a request for Renovate to run again on this repository

✨ 是否在参数tp添加以下载时间命名

特性描述

因为我将此项目放置个人服务器并使用IOS快捷指令调用,我希望可以在tp参数中添加下载时间,将下载的视频文件自定义命名位下载时间,以此来达成全自动下载保存效果

建议解决方案

No response

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 本 issue 在 issuesdiscussion 中并没有重复问题

✨ 批量下载使用场景和期望的解决方式

特性描述

使用场景A:批量下载某个列表(用户投稿、收藏...)
问题1:列表中视频很多(>500),(拉取视频基本信息的)等待时间内没有进度提示
问题2:大规模/分时下载高清视频,大会员会在中途失效

使用场景B:增量拉取某个列表(用户投稿、收藏...)视频
问题1:cookie失效不会触发自动更新
问题2:不能指定从某个节点(时间、视频、页码...)开始/后拉取视频,也就是说每次都是全量拉一遍列表信息再判断

建议解决方案

A1:

  • 先给出总数,再逐步拉取;
  • 具有-b参数时,拉取视频基本信息给进度条

A2:

  • 给出一个可选参数,允许用户设定无大会员时中止

B1:

  • 这个需求可能本来就不该yutto解决,这是cookie更新问题。可选的方案是处理set-cookie以更新cookie
  • 或者用户自行寻找外部更新cookie的办法

B2:

  • 增加一个可选参数,可以让用户给定起始页码、ID、发布时间

额外信息

总的来说需要一个自动同步b站特定部分视频并且放到emby刮削。

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 本 issue 在 issuesdiscussion 中并没有重复问题

✨ Windows cmd 颜色显示优化

特性描述

目前阶段,使用 cmd 运行 yutto 时,颜色无法正常显示。

现有的方案是使用 Windows Terminal 或者 使用 no color 参数。

建议添加 cmd 颜色显示的相关支持~

应该还是有办法实现哒,我在自己的某个 python 项目中引用了一个叫做 avalon 的模块,能够正确显示出颜色。(如图)

2022-02-11_165343

建议解决方案

关于 avalon 模块的实现,可以戳这里:avalon.py

额外信息

上述的 avalon.py 我也是引用别人的,具体实现方式并不了解...emm

希望能给作者一点点帮助~

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 本 issue 在 issuesdiscussion 中并没有重复问题

🐛当title或name 以 “...” 结尾时,会出现不能继续下载的情况

问题简述

BUG1、当文件夹名(title) 或 文件名(name) 以 “...” 结尾,即文件名结尾含多个点时,会出现不能继续下载文件的情况。
用以下视频下载时可复现:
https://www.bilibili.com/video/BV1mW41197jh?from=search&seid=16535887961016164275&spm_id_from=333.337.0.0

BUG2、SESSDATA错误时建议直接挂起或拒绝继续下载。
SESSDATA容易过期,如果含SESSDATA且失效,建议直接拒绝下载,因为部分资源现在清晰度不够或是资源下载不全。
(我习惯作为脚本爬取资源,如果SESSDATA失效建议直接挂起,便于维护)

复现方式

----BUG1----
复现方式:yutto “https://www.bilibili.com/video/BV1mW41197jh?from=search&seid=16535887961016164275&spm_id_from=333.337.0.0”

环境信息

  • OS: win10
  • Python: Python 3.9.5
  • yutto: yutto 2.0.0-beta.4

额外信息

No response

🐛 下载撞车视频,报 KeyError: 'cid'

问题简述

➜  tmp yutto BV12m4y1F7FP --debug
 INFO  未提供 SESSDATA,无法下载会员专享剧集哟~
 DEBUG  ffmpeg -codecs
 DEBUG  ffmpeg -encoders
 DEBUG  ffmpeg -codecs
 DEBUG  ffmpeg -encoders
 DEBUG  Get redircted url: https://www.bilibili.com/video/BV12m4y1F7FP?p=1 -> https://www.bilibili.com/video/BV12m4y1F7FP/?p=1
 DEBUG  Fetch json: http://api.bilibili.com/x/web-interface/view?aid=&bvid=BV12m4y1F7FP
Traceback (most recent call last):
  File "/opt/homebrew/bin/yutto", line 8, in <module>
    sys.exit(main())
  File "/opt/homebrew/lib/python3.10/site-packages/yutto/__main__.py", line 36, in main
    run(args_list)
  File "/opt/homebrew/lib/python3.10/site-packages/yutto/utils/functools/as_sync.py", line 30, in sync_func
    return asyncio.run(async_func(*args, **kwargs))
  File "/opt/homebrew/Cellar/[email protected]/3.10.6_1/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/opt/homebrew/Cellar/[email protected]/3.10.6_1/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete
    return future.result()
  File "/opt/homebrew/lib/python3.10/site-packages/yutto/__main__.py", line 159, in run
    download_list = await extractor(session, args)
  File "/opt/homebrew/lib/python3.10/site-packages/yutto/extractor/_abc.py", line 30, in __call__
    return [await self.extract(session, args)]
  File "/opt/homebrew/lib/python3.10/site-packages/yutto/extractor/acg_video.py", line 61, in extract
    acg_video_list = await get_acg_video_list(session, self.avid)
  File "/opt/homebrew/lib/python3.10/site-packages/yutto/api/acg_video.py", line 32, in get_acg_video_list
    video_info = await get_video_info(session, avid)
  File "/opt/homebrew/lib/python3.10/site-packages/yutto/api/info.py", line 51, in get_video_info
    "cid": CId(str(res_json_data["cid"])),
KeyError: 'cid'

复现方式

yutto BV12m4y1F7FP --debug

环境信息

  • OS: macOS Ventura Version 13.1 Beta (22C5033e)
  • Python: 3.10.6
  • yutto: 2.0.0-beta.11
  • FFmpeg:
    ffmpeg version 5.1 Copyright (c) 2000-2022 the FFmpeg developers
    built with Apple clang version 13.1.6 (clang-1316.0.21.2.5)
    configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/5.1 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-neon
    libavutil 57. 28.100 / 57. 28.100
    libavcodec 59. 37.100 / 59. 37.100
    libavformat 59. 27.100 / 59. 27.100
    libavdevice 59. 7.100 / 59. 7.100
    libavfilter 8. 44.100 / 8. 44.100
    libswscale 6. 7.100 / 6. 7.100
    libswresample 4. 7.100 / 4. 7.100
    libpostproc 56. 6.100 / 56. 6.100
  • 如果是显示相关问题
    • Shell: Shell 类型 (echo $SHELL)
    • Terminal: 终端类型
  • Others: 其它信息

额外信息

B 站网页端好像最近加了一个撞车视频自动跳转至原视频的功能,应该是因此报错。

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 如果是网络问题,已经检查网络连接、设置是否正常,并经过充分测试认为这是 yutto 本身的问题
  • 本 issue 在 issuesdiscussion 中并没有重复问题

🐛 --audio-only 参数的处理逻辑

问题简述

在添加 --audio-only 参数后,仍提示 “ERROR 不下载视频无法生成 ASS 弹幕”

2022-10-01_161334

复现方式

例如:

 yutto https://www.bilibili.com/video/BV1xW41197cE?p=2 --audio-only

环境信息

  • OS: Win10 21H2
  • Python: Python 3.9.13
  • yutto: yutto 2.0.0-beta.15
  • FFmpeg: ffmpeg version N-104375-g77970abb71-20211017 Copyright (c) 2000-2021 the FFmpeg developers
    built with gcc 10-win32 (GCC) 20210408

额外信息

应该是处理流程的问题吧,检查到含有 --audio-only 的选项就不要进行生成 ASS 弹幕的流程啦。

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 如果是网络问题,已经检查网络连接、设置是否正常,并经过充分测试认为这是 yutto 本身的问题
  • 本 issue 在 issuesdiscussion 中并没有重复问题

🐛 频繁出现SSL证书验证失败

问题简述

aiohttp.client_exceptions.ClientConnectorCertificateError: Cannot connect to host upos-sz-mirrorkodoo1.bilivideo.com:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)')]
能否改为ssl=False,来防止ssl报错

复现方式

Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/yutto/utils/asynclib.py", line 39, in worker
await task
File "/usr/local/lib/python3.9/site-packages/yutto/utils/fetcher.py", line 118, in download_file_with_offset
async with session.get(
File "/usr/local/lib/python3.9/site-packages/aiohttp/client.py", line 1117, in aenter
self._resp = await self._coro
File "/usr/local/lib/python3.9/site-packages/aiohttp/client.py", line 520, in _request
conn = await self._connector.connect(
File "/usr/local/lib/python3.9/site-packages/aiohttp/connector.py", line 535, in connect
proto = await self._create_connection(req, traces, timeout)
File "/usr/local/lib/python3.9/site-packages/aiohttp/connector.py", line 892, in _create_connection
_, proto = await self._create_direct_connection(req, traces, timeout)
File "/usr/local/lib/python3.9/site-packages/aiohttp/connector.py", line 1051, in _create_direct_connection
raise last_exc
File "/usr/local/lib/python3.9/site-packages/aiohttp/connector.py", line 1020, in _create_direct_connection
transp, proto = await self._wrap_create_connection(
File "/usr/local/lib/python3.9/site-packages/aiohttp/connector.py", line 971, in _wrap_create_connection
raise ClientConnectorCertificateError(req.connection_key, exc) from exc
aiohttp.client_exceptions.ClientConnectorCertificateError: Cannot connect to host upos-sz-mirrorkodoo1.bilivideo.com:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)')]

环境信息

  • OS: docker, debian-slim
  • Python: 3.9.7
  • yutto: 2.0.0-beta.4
  • FFmpeg: 4.4

额外信息

No response

✨购买的课程视频会支持吗

特性描述

购买的课程目前不支持下载,不知道后续有没有计划

建议解决方案

如果接受pull requests我可以开发一下后续推上来哈哈

额外信息

No response

一点点的自我检查

  • 充分阅读 README.md,特别是与本 issue 相关的部分
  • 本 issue 在 issuesdiscussion 中并没有重复问题

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.