mirror of
https://github.com/amtoaer/bili-sync.git
synced 2026-06-26 01:42:18 +08:00
fix: 移除无用文件,忽略文件名中的非法字符
This commit is contained in:
8
Makefile
8
Makefile
@@ -1,4 +1,4 @@
|
||||
.PHONY: install lint
|
||||
.PHONY: install fmt start-daemon start-once
|
||||
|
||||
install:
|
||||
@echo "Installing dependencies..."
|
||||
@@ -8,3 +8,9 @@ fmt:
|
||||
@echo "Formatting..."
|
||||
@poetry run black .
|
||||
@poetry run ruff --fix .
|
||||
|
||||
start-daemon:
|
||||
@poetry run python entry.py
|
||||
|
||||
start-once:
|
||||
@poetry run python entry.py --once
|
||||
7
entry.py
7
entry.py
@@ -1,6 +1,8 @@
|
||||
import asyncio
|
||||
import sys
|
||||
|
||||
from loguru import logger
|
||||
|
||||
from processor import process
|
||||
from settings import settings
|
||||
|
||||
@@ -8,11 +10,14 @@ from settings import settings
|
||||
async def entry() -> None:
|
||||
if any("once" in _ for _ in sys.argv):
|
||||
# 单次运行
|
||||
logger.info("Running once...")
|
||||
await process()
|
||||
return
|
||||
logger.info("Running daemon...")
|
||||
while True:
|
||||
await process()
|
||||
await asyncio.sleep(settings.interval * 60)
|
||||
|
||||
|
||||
def start() -> None:
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(entry())
|
||||
|
||||
15
processor.py
15
processor.py
@@ -81,16 +81,17 @@ async def process_favorite(favorite_id: int) -> None:
|
||||
|
||||
async def process_video(save_path: Path, media: dict) -> None:
|
||||
title = media["title"]
|
||||
safe_title = media["title"].replace("/", "_")
|
||||
logger.info("start to process video {}", title)
|
||||
if media["type"] != MediaType.VIDEO:
|
||||
logger.warning("Media {} is not a video, skipped.", title)
|
||||
return
|
||||
final_path = save_path / f"{title}.mp4"
|
||||
final_path = save_path / f"{safe_title}.mp4"
|
||||
if final_path.exists():
|
||||
logger.info(f"{final_path} already exists, skipped.")
|
||||
return
|
||||
# 写入 nfo
|
||||
nfo_path = save_path / f"{title}.nfo"
|
||||
nfo_path = save_path / f"{safe_title}.nfo"
|
||||
EpisodeInfo(
|
||||
title=title,
|
||||
plot=media["intro"],
|
||||
@@ -99,7 +100,7 @@ async def process_video(save_path: Path, media: dict) -> None:
|
||||
aired=datetime.datetime.fromtimestamp(media["ctime"]),
|
||||
).write_nfo(nfo_path)
|
||||
# 写入 poster
|
||||
cover_path = save_path / f"{title}-poster.jpg"
|
||||
cover_path = save_path / f"{safe_title}-poster.jpg"
|
||||
await download_content(media["cover"], cover_path)
|
||||
# 开始处理视频内容
|
||||
v = video.Video(media["bvid"], credential=credential)
|
||||
@@ -108,7 +109,7 @@ async def process_video(save_path: Path, media: dict) -> None:
|
||||
)
|
||||
streams = detector.detect_best_streams()
|
||||
if detector.check_flv_stream():
|
||||
tmp_path = save_path / f"{title}.flv"
|
||||
tmp_path = save_path / f"{safe_title}.flv"
|
||||
await download_content(streams[0].url, tmp_path)
|
||||
process = await create_subprocess_exec(
|
||||
FFMPEG_COMMAND,
|
||||
@@ -122,8 +123,8 @@ async def process_video(save_path: Path, media: dict) -> None:
|
||||
tmp_path.unlink()
|
||||
else:
|
||||
tmp_video_path, tmp_audio_path = (
|
||||
save_path / f"{title}_video.m4s",
|
||||
save_path / f"{title}_audio.m4s",
|
||||
save_path / f"{safe_title}_video.m4s",
|
||||
save_path / f"{safe_title}_audio.m4s",
|
||||
)
|
||||
await asyncio.gather(
|
||||
download_content(streams[0].url, tmp_video_path),
|
||||
@@ -144,4 +145,4 @@ async def process_video(save_path: Path, media: dict) -> None:
|
||||
await process.communicate()
|
||||
tmp_video_path.unlink()
|
||||
tmp_audio_path.unlink()
|
||||
logger.info(f"{final_path} downloaded successfully.")
|
||||
logger.info(f"{title} downloaded successfully.")
|
||||
|
||||
Reference in New Issue
Block a user