Bilibili Video Downloader
Pricing
from $3.12 / 1,000 video downloadeds
Bilibili Video Downloader
Resolve Bilibili (哔哩哔哩) video URLs or bvids into real DASH stream URLs, subtitles, and metadata (title, owner, duration, stats). One dataset row per video. Built on verified request-signing logic from the sibling bilibili-all-in-one-api actor.
Pricing
from $3.12 / 1,000 video downloadeds
Rating
0.0
(0)
Developer
Romy
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
0.75 hours
Issues response
8 days ago
Last modified
Categories
Share
Resolve Bilibili (哔哩哔哩) video URLs or bvids into the real DASH stream URLs (video/audio tracks, quality options), subtitles, and metadata (title, owner, duration, stats). One dataset row per video.
Why
Built on the already-verified WBI-signing logic from the sibling
bilibili-all-in-one-api actor (same account) — the request signing, host,
and quirks below aren't re-guessed here, they're copied from that actor's
live-tested client. See its README for the full research writeup.
playurlrequires WBI signing + abuvid3/buvid4device cookie — an unsigned call returns a disguised-blocked "success" with only av_voucherrisk-control challenge instead of real stream data.qn(quality) is clamped by Bilibili to what an anonymous, non-logged-in caller can access, often 480p-1080p depending on the video, never 4K/HDR.download.resolvedLabelsays what you actually got.- An empty
subtitleresult is real for videos that simply have no CC track, not an error. - Requests are sent sequentially, not in parallel — playurl is Bilibili's most protected endpoint, so this spaces out requests instead of firing a whole video list at once.
- A bad/removed bvid doesn't crash the run — that item gets an
{ input, error }row instead and the rest of the list still processes.
Input
| Field | Type | Default | Description |
|---|---|---|---|
videos | string[] | required | Bilibili video URLs or bare BVxxxxxxxxxx ids |
quality | number | 80 | Requested qn stream quality |
includeSubtitles | boolean | true | Fetch the CC/subtitle track list per video |
mergeToMp4 | boolean | false | Also build one playable MP4 (video + sound) and return it as download.mergedMp4Url. Videos over 250 MB keep the stream links only. Same price either way. |
Read this before opening a link
Bilibili serves video and audio as two separate files (.m4s), so a single
stream link is a silent clip that no player opens as-is. Also:
- The CDN answers HTTP 403 without
Referer: https://www.bilibili.com/on*.bilivideo.comhosts. Opening such a link in a browser fails.download.headershas the exact headers to send. - Links expire about two hours after the run (
download.expiresAt). - Some tracks are HEVC, which many browsers cannot play.
download.videois always the best H.264 track when one exists (download.playsEverywhere).
For a ready-to-play file turn on mergeToMp4: the actor downloads both
tracks, joins them with ffmpeg without re-encoding, stores BVxxxx.mp4 in the
run's Key-Value Store and returns the link in download.mergedMp4Url. If you
would rather do it yourself, download.ffmpegCommand shows how.
Output
One dataset row per resolved video:
{"bvid": "BV1FQtt6JEKs","title": "...","description": "...","durationSecs": 123,"thumbnail": "https://...","owner": { "mid": 14804670, "name": "...", "face": "https://..." },"stats": { "view": 0, "like": 0, "coin": 0, "favorite": 0, "share": 0, "reply": 0, "danmaku": 0 },"download": {"requestedQuality": 80, "resolvedQuality": 32, "resolvedLabel": "480p","qualityNote": "Requested 1080p but Bilibili only offers up to 480p for this video without a login.","video": { "qualityId": 32, "codecs": "avc1.640033", "width": 852, "height": 480, "url": "https://...", "backupUrls": [] },"audio": { "qualityId": 30280, "codecs": "mp4a.40.2", "url": "https://...", "backupUrls": [] },"playsEverywhere": true,"headers": { "Referer": "https://www.bilibili.com/", "User-Agent": "..." },"expiresAt": "2026-09-21T10:08:54.000Z","ffmpegCommand": "ffmpeg ...","mergedMp4Url": "https://api.apify.com/v2/key-value-stores/.../records/BVxxxx.mp4"},"playUrl": { "dash": { "video": [...], "audio": [...] }, "...": "..." },"subtitle": { "subtitles": [] }}
Pricing
Researched against live competitors in this exact niche (2026-09-03):
easyapi/bilibili-video-downloader at $0.00299/item (top performer, 1220
runs), apple_yang/bilibili-video-audio-downloader at $0.001/item. Priced
slightly above that baseline to reflect the bundled full metadata +
subtitles alongside the stream URLs, using this account's standard tiered
ladder (FREE/BRONZE/SILVER/GOLD/PLATINUM/DIAMOND =
100/92/85/78/72/68%): video-downloaded at $0.004 (FREE tier).
Getting started
$apify run