aniGamerPlus

GitHub GitHub release GitHub Release Date GitHub Releases

巴哈姆特動畫瘋自動下載工具, 可隨著番劇更新自動下載, 適合部署在全天開機的伺服器或NAS上.

同時支援命令行, 也適用於需要大批量下載的使用者, 如: 下載整部番劇. 命令行模式支援顯示下載進度, 但要求 最大并發下載數 設置為 1 .

注意:warning:

本專案依賴ffmpeg, 請事先將ffmpeg放入系統PATH或者本程序目錄下!

ffmpeg 需要另外下載, 點擊這裡前往下載頁. 若不知道如何將 ffmpeg 放入 PATH 則直接將 ffmpeg.exe 放在和本程式同一個資料夾下即可.

ffmpeg的20200515版本存在問題,請避免使用20200515及其往後的版本! #44

EXE 檔案運行(對於不熟悉Python的使用者)

windows 使用者可以點擊這裡下載exe文件使用.

源碼運行

Python 版本 3 以上

使用前确认已安装好依赖

pip3 install requests beautifulsoup4 lxml termcolor chardet pysocks

下載源碼

git clone https://github.com/miyouzi/aniGamerPlus.git

升級

git pull https://github.com/miyouzi/aniGamerPlus.git

使用

python3 aniGamerPlus.py

鳴謝

本專案m3u8获取模塊參考自 BahamutAnimeDownloader

目錄

特性

任務列表

配置説明

config.json

config-sample.json为范例配置文件, 可以将其修改后改名为config.json.

若不存在config.json, 则程序在运行时将会使用默认配置创建.

{
    "bangumi_dir": "",  # 下載存放目錄, 動畫將會以番劇為單位分資料夾存放
    "temp_dir": "",  # 臨時目錄位置, v9.0 開始下載中文件將會放在這裏, 完成後再轉移至番劇目錄, 留空默認在程序所在目錄的 temp 資料夾下
    "classify_bangumi": true,  # 控制是否建立番劇資料夾
    "check_frequency": 5,  # 檢查更新頻率, 單位為分鐘
    "download_resolution": "1080",  # 下載選取清晰度, 若該清晰度不存在將會選取最近可用清晰度, 可選 360 480 540 576 720 1080
    "lock_resolution": false,  # 鎖定清晰度, 如果指定清晰度不存在, 則放棄下載
    "default_download_mode": "latest",  # 默認下載模式, 另一可選參數為 all 和 largest-sn. latest 為僅下載最後一集, all 下載番劇全部劇集, largest-sn 下載最近上傳的一集
    "use_copyfile_method": false,  # 轉移影片至番劇資料夾時使用複製方法, 適用於保存到 rclone 掛載盤的情況
    "multi-thread": 1,  # 最大并發下載數, 最高為 5, 超過將重置為 5
    "multi_upload": 3,  # 最大并發上傳數
    "segment_download_mode": true,  # 分段下載模式, 速度更快, 容錯率更高
    "segment_max_retry": 8,  # 在分段下載模式時有效, 每個分段最大重試次數, -1 為無限重試
    "multi_downloading_segment": 3,  # 每個影片最大并發下載分段數, 僅在 "segment_download_mode" 為 true 時有效, 最高為 5, 超過將重置為 5
    "add_bangumi_name_to_video_filename": true,  # 如果為 false, 則只有劇集名, 若劇集名為個位數字, 則補零
    "add_resolution_to_video_filename": true,  # 是否在影片檔名中添加清晰度, 格式舉例: [1080P]
    "customized_video_filename_prefix": "【動畫瘋】",  # 影片檔名前綴
    "customized_bangumi_name_suffix": "",  # 影片檔名中番劇名的后缀, 在劇集名之前
    "customized_video_filename_suffix": "",  # 影片檔名後綴
    "video_filename_extension": "mp4",  # 影片檔副檔名, ts, mov, mkv 經過測試可以使用, 但 flv 不支援, 非 mp4 副檔名 faststart_movflags 將强制為 false
    "zerofill": 1,  # 劇集名補零, 填寫補足位數, 例: 填寫 2 劇集名為 01, 填寫 3 劇集名為 001
    "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36",  #  請求UA, 需要和獲取cookie的瀏覽器相同
    "use_proxy": false,  # 代理開關
    "proxies": {
        "1": "socks5://127.0.0.1:1080",  # 代理配置
        "2": "http://user:passwd@example.com:1000"  # 支援鏈式代理
    },
    "upload_to_server": false,  # 上傳功能開關
    "ftp": {  # FTP配置
        "server": "",  # FTP Server IP
        "port": "",  # 端口
        "user": "",  # 使用者名
        "pwd": "",  # 密碼
        "tls": true,  # 是否是 FTP over TLS
        "cwd": "",  # 登陸後首先進入的目錄
        "show_error_detail": false,  # 是否顯示細節錯誤信息
        "max_retry_num": 15  # 最大重傳數, 支援續傳
    },
    "user_command": "shutdown -s -t 60"  # 命令行模式使用 -u 參數有效, 在命令行模式下完成所有任務后執行的命令
    "coolq_notify": false,  # 是否向酷Q推送下載完成訊息
    "coolq_settings": {
        "host": "127.0.0.1",  # 酷Q HTTP API 地址
        "port": "5700",  # 酷Q HTTP API Port
        "SSL": false,  # 是否是 https
        "api": "send_group_msg",  # 所使用的 API
        "query": {  # 使用 GET 方法, 這裏配置 query 字段
            "group_id": "123456789"
        }
    },
    "faststart_movflags": false,  # 是否將影片 metadata 前置, 啓用此功能時在綫觀看會更快播放, 僅在 video_filename_extension 為 mp4 時有效
    "audio_language": false,  # 是否添加音軌標簽
    "check_latest_version": true,  # 是否檢查更新
    "read_sn_list_when_checking_update": true,  # 是否在檢查更新時讀取sn_list.txt, 開啓後對sn_list.txt的更改將會在下次檢查更新時生效而不用重啓程序
    "read_config_when_checking_update": true,  # 是否在檢查更新時讀取配置文件, 開啓後對配置文件的更改將會在下次檢查時更新生效而不用重啓程序
    "save_logs": true,  # 是否記錄日志, 一天一個日志
    "quantity_of_logs": 7,  # 日志保留數量, 正整數值, 必須大於等於 1, 默認為 7
    "config_version": 11.0,  # 配置文件版本
    "database_version": 2.0  # 資料庫版本
}

模式僅支援在 latest, all, largest-sn 三個中選一個, 錯詞及其他詞將會重置為latest模式

使用代理

aniGamerPlus本身支援使用單個httphttpssocks5(v12開始支援)代理.

無密碼驗證的代理使用以下格式:

http://example.com:1000

有密碼驗證的代理使用以下格式:

http://user:passwd@example.com:1000

使用socks5代理支援遠端DNS, 配置時使用socks5h代替socks5, 如:

socks5h://127.0.0.1:1483

如果想使用其他的代理協議或使用鏈式代理, 需要下載 Gost 放置在系統PATH, 或本程序目錄下, 並命名爲 gost, windows平臺為gost.exe

若想使用鏈式代理, 請使用整數作爲 key, 代理出口將會是 key 最大的代理服務器.

Gost 支援 Shadowsocks 協議, 其實現是基於shadowsocks-go, 目前僅支援這幾種加密方式: aes-128-cfb aes-192-cfb aes-256-cfb bf-cfb cast5-cfb des-cfb rc4-md5 rc4-md5-6 chacha20 salsa20 rc4 table

注意: read_config_when_checking_update 配置對代理配置無效

使用代理建議使用分段下載模式

如果代理網路不穩定, 建議multi-thread配置為1

下載模式説明

v8.0 影片下載模式新增分段下載, 其工作流程: 由 aniGamerPlus 讀取 m3u8 文件, 下載 key 及所有影片分段至臨時資料夾, 再使用 ffmpeg 解密合并.

分段下載模式特點:

舊下載模式, 即 ffmpeg 下載模式的工作流程: 直接將 m3u8 文件交給 ffmpeg, 下載解密合并全由 ffmpeg 完成.

ffmpeg下載模式特點:

除非你通往動畫瘋的網路足夠穩, 否則建議使用分段下載模式, 配置 segment_download_modetrue 開啓分段下載模式

儅開啓分段下載模式時, 配置 multi_downloading_segment 將有效, 這個值指定一個影片同時最多下載幾個分段, 一般設定在3左右速度就足夠快了

cookie.txt

  1. 使用者cookie文件, 將瀏覽器的cookie字段複製, 以cookie.txt為檔名保存在程序目錄下
  2. 將獲取cookie的瀏覽器UA, 写入config.jsonua項目

v6.0版本開始支援自動刷新cookie, 爲了不與正常使用的cookie衝突, 請從使用瀏覽器的無痕模式取得僅供aniGamerPlus使用的cookie

取得cookie后, 登陸狀態會顯示在 https://home.gamer.com.tw/login_devices.php , 你可以從這裏點擊退出來失效你的cookie, 其顯示的信息來自與你取得cookie的瀏覽器(UA)

使用cookie后所抓取的影片記錄會記錄在你的觀看紀錄

:warning: 登陸時請勾選"保持登入狀態"

使用Chrome舉例如何獲取 Cookie:

使用Chrome舉例如何獲取 UA:

sn_list.txt

需要自動下載的番劇列表,一個番劇中選任一sn填入即可

可以對個別番劇配置下載模式, 未配置下載模式將會使用config.json定義的默認下載模式

支援注釋 # 後面的所有字符程序均不會讀取, 可以標記番劇名

模式僅支援在 latest, all, largest-sn 三個中選一個, 錯詞及其他詞將會重置為config.json中定義的默認下載模式

格式:

sn碼 下載模式(可空) #注釋(可空)

範例:

10147 all # 前進吧!登山少女 第三季 [1]
11285 # 關於我轉生變成史萊姆這檔事
11390 all #笑容的代價 01
11388 # BanG Dream!第二季
11317 lastest # SSSS.GRIDMAN

自v6.0開始, 新增對番劇進行分類功能, 在一排番劇列表的上方 @ 開頭後面的字符將會作爲番劇的分類名, 番劇會歸類在此分類名的資料夾下

若單獨 @ 表示不分類

範例:

@2019一月番
11433 # ENDRO!
11392 # 笨拙之極的上野
@2019十月番
11354 latest # 刀劍神域 Alicization
@
11468 # 動物朋友

上面表示將會把ENDRO上野放在2019一月番資料夾裏, 將刀劍放在2019十月番資料夾裏, 動物朋友 不分類, 直接放在番劇目錄下

自 v9.0 開始, 支援重命名番劇, 在注釋之前, 模式之後, 用 <> 將自定義的番劇名框起來, 下載時將會使用這個名字作爲番劇目錄名

PS: 連續多個空格將會被替換爲單個空格, 和模式需要間隔一個空格

範例:

11415 <魔法少女特殊战明日香> # 魔法少女特殊戰明日香
11433 <えんどろ~!> # ENDRO!
11354 latest <刀剑神域3> # 刀劍神域 Alicization
11398 # 粉彩回憶

aniGamer.db

sqlite3資料庫, 可以使用 SQLite Expert 等工具打開編輯

記錄視頻下載狀態等相關信息, 一般無需改動

欄位設計:

截图:

命令行使用

支援命令行使用, 文件默認將保存在config.json中指定的目錄下

配置文件中的代理配置同樣適用於命令行模式!

除了使用 list 模式的情況, 命令行模式將不會和資料庫進行交互, 將會無視數據庫中下載狀態標記强制下載

參數:

>python3 aniGamerPlus.py -h
當前aniGamerPlus版本: v18
usage: aniGamerPlus.py [-h] [--sn SN]
                       [--resolution {360,480,540,576,720,1080}]
                       [--download_mode {single,latest,largest-sn,multi,all,range,list,sn-list}]
                       [--thread_limit THREAD_LIMIT] [--current_path]
                       [--episodes EPISODES] [--no_classify]
                       [--information_only] [--user_command]

optional arguments:
  -h, --help            show this help message and exit
  --sn SN, -s SN        視頻sn碼(數字)
  --resolution {360,480,540,576,720,1080}, -r {360,480,540,576,720,1080}
                        指定下載清晰度(數字)
  --download_mode {single,latest,largest-sn,multi,all,range,list,sn-list}, -m {single,latest,largest-sn,multi,all,range,list,sn-list}
                        下載模式
  --thread_limit THREAD_LIMIT, -t THREAD_LIMIT
                        最高并發下載數(數字)
  --current_path, -c    下載到當前工作目錄
  --episodes EPISODES, -e EPISODES
                        僅下載指定劇集
  --no_classify, -n     不建立番劇資料夾
  --information_only, -i
                        僅查詢資訊
  --user_command, -u    所有下載完成后執行用戶命令