video/webm
WebM sample video files for testing
Download verified VP9/Opus and silent WebM fixtures for playback, uploads, codec inspection, conversion, and Range tests.
Verified . EBML signature, VP9/Opus streams, duration, 30 fps metadata, poster, exact bytes, hash, and Range delivery are verified.
Identify WebM files
- Magic signature
1A 45 DF A3- Registered MIME
video/webm
WebM is an EBML container with constrained Matroska elements. Inspect TrackEntry data for codec and audio presence.
Choosing WebM
WebM is well supported in modern browsers; some native media and older Apple workflows prefer MP4 or MOV.
Use WebM for web-first and open-codec workflows.
Confirm VP9 and Opus support in both browser and server tools.
Common test cases
- VP9 and Opus playback
- Silent-track handling
- Cross-container conversion
Invalid and boundary cases
- Silent file with no audio track
- Unsupported VP9 profile
- Duration unavailable before metadata loads
WebM fixture matrix
| File | Dimensions | Duration | Codecs | Frame rate | Size |
|---|---|---|---|---|---|
| Sample 640x360 3s WebMsample-3s.webm | 640 × 360 | 2.999 s | vp9 / opus | 30 fps | 191 KB |
| Silent 640x360 3s WebMsilent-3s.webm | 640 × 360 | 2.968 s | vp9 / no audio | 30 fps | 144 KB |
| Tiny 320x240 2s WebMtiny-320p.webm | 320 × 240 | 1.991 s | vp9 / opus | 30 fps | 125 KB |
Verify the representative fixture
Each command downloads sample-3s.webm and uses its published URL. The Node.js and Python examples also verify the exact byte count and SHA-256 digest.
Download the published fixture and inspect its response headers before saving the exact bytes.
curl --fail --location --silent --show-error \
--output sample-3s.webm \
--write-out 'status=%{http_code}\ncontent_type=%{content_type}\nbytes=%{size_download}\n' \
'https://assets.testfiles.dev/video/sample-3s.webm'Save the stable fixture URL without changing the published byte stream.
wget --output-document='sample-3s.webm' 'https://assets.testfiles.dev/video/sample-3s.webm'Verify the downloaded byte count and SHA-256 digest in a Node.js workflow.
import assert from "node:assert/strict";
import { createHash } from "node:crypto";
const response = await fetch("https://assets.testfiles.dev/video/sample-3s.webm");
assert.equal(response.ok, true);
assert.match(response.headers.get("content-type") ?? "", /video\/webm/i);
const bytes = Buffer.from(await response.arrayBuffer());
assert.equal(bytes.length, 195147);
assert.equal(createHash("sha256").update(bytes).digest("hex"), "db93d14148c47a3753a335ba6ff18a51f069531b3b87c6fc9bf5939373ca963d");
console.log("Verified sample-3s.webm", bytes.length, "bytes");Verify the same fixture from a Python test or processing pipeline.
import hashlib
import requests
url = "https://assets.testfiles.dev/video/sample-3s.webm"
response = requests.get(url, timeout=30)
response.raise_for_status()
assert "video/webm" in response.headers.get("content-type", "")
assert len(response.content) == 195147
assert hashlib.sha256(response.content).hexdigest() == "db93d14148c47a3753a335ba6ff18a51f069531b3b87c6fc9bf5939373ca963d"
print("Verified sample-3s.webm", len(response.content), "bytes")