Bilibili Video Downloader avatar

Bilibili Video Downloader

Pricing

from $3.12 / 1,000 video downloadeds

Go to Apify Store
Bilibili Video Downloader

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

Romy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

0.75 hours

Issues response

8 days ago

Last modified

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.

  • playurl requires WBI signing + a buvid3/buvid4 device cookie — an unsigned call returns a disguised-blocked "success" with only a v_voucher risk-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.resolvedLabel says what you actually got.
  • An empty subtitle result 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

FieldTypeDefaultDescription
videosstring[]requiredBilibili video URLs or bare BVxxxxxxxxxx ids
qualitynumber80Requested qn stream quality
includeSubtitlesbooleantrueFetch the CC/subtitle track list per video
mergeToMp4booleanfalseAlso 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.

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.com hosts. Opening such a link in a browser fails. download.headers has 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.video is 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