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

FileDimensionsDurationCodecsFrame rateSize
Sample 640x360 3s WebMsample-3s.webm640 × 3602.999 svp9 / opus30 fps191 KB
Silent 640x360 3s WebMsilent-3s.webm640 × 3602.968 svp9 / no audio30 fps144 KB
Tiny 320x240 2s WebMtiny-320p.webm320 × 2401.991 svp9 / opus30 fps125 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.

curl

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'
wget

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'
Node.js

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");
Python Requests

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")

Continue testing

Related formats

Copied