From d7753c03123e5743b5fd7428ec57f7dcce1288fe Mon Sep 17 00:00:00 2001 From: yzqzss Date: Sun, 11 Jun 2023 02:03:51 +0800 Subject: [PATCH] =?UTF-8?q?*=E5=A6=82=E6=9E=9C=20hevc=20dash=20=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E5=AE=9E=E9=99=85=E4=B8=8A=E4=B8=8D=E5=8F=AF=E7=94=A8?= =?UTF-8?q?=EF=BC=8Cfallback=20=E5=88=B0=20avc=20*=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E8=A7=86=E9=A2=91=E5=89=8D=E6=B8=85=E7=A9=BA=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E7=BC=93=E5=AD=98=E4=BB=A5=E9=98=B2=E6=84=8F?= =?UTF-8?q?=E5=A4=96=20*=E4=B8=8A=E4=BC=A0=20IA=20=E5=89=8D=E5=85=88?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E4=B8=80=E4=B8=8B=E6=9C=80=E9=87=8D=E8=A6=81?= =?UTF-8?q?=E7=9A=84=E8=A7=86=E9=A2=91=E6=96=87=E4=BB=B6=E5=AD=98=E4=B8=8D?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E2=80=A6=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bump 0.0.15 --- biliarchiver/_biliarchiver_upload_bvid.py | 5 ++-- biliarchiver/archive_bvid.py | 34 +++++++++++++++++++++++ biliarchiver/version.py | 2 +- pyproject.toml | 2 +- 4 files changed, 39 insertions(+), 4 deletions(-) diff --git a/biliarchiver/_biliarchiver_upload_bvid.py b/biliarchiver/_biliarchiver_upload_bvid.py index 3530fab..ae8e1f8 100644 --- a/biliarchiver/_biliarchiver_upload_bvid.py +++ b/biliarchiver/_biliarchiver_upload_bvid.py @@ -81,9 +81,10 @@ def _upload_bvid(bvid: str): if os.path.basename(file).startswith('_'): continue if not os.path.isfile(file): - continue + continue filedict[filename] = file - + + assert f'{file_basename}.mp4' in filedict # IA 去重 for file_in_item in item.files: diff --git a/biliarchiver/archive_bvid.py b/biliarchiver/archive_bvid.py index 1b8c975..eb67f74 100644 --- a/biliarchiver/archive_bvid.py +++ b/biliarchiver/archive_bvid.py @@ -73,6 +73,15 @@ async def archive_bvid(d: DownloaderBilibili, bvid: str, logined: bool=False): print(f'{file_basename}: 已经下载过了') continue + def delete_cache(reason: str = ''): + if not os.path.exists(video_basepath): + return + _files_in_video_basepath = os.listdir(video_basepath) + for _file in _files_in_video_basepath: + if _file.startswith(file_basename): + print(f'{file_basename}: {reason},删除缓存: {_file}') + os.remove(video_basepath / _file) + delete_cache('为防出错,清空上次未完成的下载缓存') video_info = await api.get_video_info(d.client, page.p_url) print(f'{file_basename}: {video_info.title}...') os.makedirs(video_basepath, exist_ok=True) @@ -127,6 +136,31 @@ async def archive_bvid(d: DownloaderBilibili, bvid: str, logined: bool=False): cor3 = download_bilibili_video_detail(d.client, bvid, f'{video_extrapath}/{file_basename}.info.json') await asyncio.gather(cor1, cor2, cor3) + if codec.startswith('hev') and not os.path.exists(video_basepath / f'{file_basename}.mp4'): + + # 如果有下载缓存文件(以 file_basename 开头的文件),说明这个 hevc 的 dash 资源存在,只是可能因为网络之类的原因下载中途失败了 + delete_cache('下载出错') + + # 下载缓存文件都不存在,应该是对应的 dash 资源根本就没有,一些老视频会出现这种情况。 + # 换 avc 编码 + print(f'{file_basename}: 视频文件没有被下载?也许是 hevc 对应的 dash 资源不存在,尝试 avc ……') + for media in video_info.dash.videos: + if media.codec.startswith('avc'): + codec = media.codec + print(f'{file_basename}: "{codec}" "{media.quality}" ...') + break + cor4 = d.get_video(page.p_url ,video_info=video_info, path=video_basepath, + quality=0, # 选择最高画质 + codec=codec, # 编码 + # 下载 ass 弹幕(bilix 会自动调用 danmukuC 将 pb 弹幕转为 ass)、封面、字幕 + # 弹幕、封面、字幕都会被放进 extra 子目录里,所以需要 d.hierarchy is True + dm=True, image=True, subtitle=True + ) + await asyncio.gather(cor4) + + + assert os.path.exists(video_basepath / f'{file_basename}.mp4') + # 还原为了自定义文件名而做的覆盖 video_info.pages[video_info.p].p_name = old_p_name video_info.h1_title = old_h1_title diff --git a/biliarchiver/version.py b/biliarchiver/version.py index 2f24f33..6843bc0 100644 --- a/biliarchiver/version.py +++ b/biliarchiver/version.py @@ -1 +1 @@ -BILI_ARCHIVER_VERSION = '0.0.14' \ No newline at end of file +BILI_ARCHIVER_VERSION = '0.0.15' \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 7f12f5b..82d55be 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "biliarchiver" -version = "0.0.14" +version = "0.0.15" description = "" authors = ["yzqzss "] readme = "README.md"