mirror of
https://codeberg.org/armin/tcd.git
synced 2026-09-01 05:50:46 +02:00
fix README formatting
This commit is contained in:
parent
f5f7d416c2
commit
2bb51c6058
1 changed files with 26 additions and 26 deletions
52
README.md
52
README.md
|
|
@ -65,7 +65,7 @@ energy. Everything above this point is silence or noise.
|
||||||
**The Nyquist ceiling:** Digital audio is made of snapshots (samples). For CD
|
**The Nyquist ceiling:** Digital audio is made of snapshots (samples). For CD
|
||||||
quality (44100 snapshots per second), there is a hard limit: you cannot store
|
quality (44100 snapshots per second), there is a hard limit: you cannot store
|
||||||
a frequency higher than half the snapshot rate = **22050 Hz**. This is called
|
a frequency higher than half the snapshot rate = **22050 Hz**. This is called
|
||||||
the *Nyquist frequency*. It is a physical ceiling — higher frequencies simply
|
the *Nyquist frequency*. It is a physical ceiling - higher frequencies simply
|
||||||
cannot exist.
|
cannot exist.
|
||||||
|
|
||||||
**How lossy encoding changes it:** MP3 and other lossy codecs deliberately cut
|
**How lossy encoding changes it:** MP3 and other lossy codecs deliberately cut
|
||||||
|
|
@ -84,7 +84,7 @@ off high frequencies to save space. The cutoff gets lower as the bitrate drops:
|
||||||
close to the theoretical maximum. This is what we expect from a 320 kbps
|
close to the theoretical maximum. This is what we expect from a 320 kbps
|
||||||
encode. If this same file showed 54% (~12000 Hz), it would mean the treble
|
encode. If this same file showed 54% (~12000 Hz), it would mean the treble
|
||||||
was chopped off by an aggressive low-bitrate encoder, and someone just
|
was chopped off by an aggressive low-bitrate encoder, and someone just
|
||||||
re-encoded it at 320 kbps — the cutoff is permanent and cannot be restored.
|
re-encoded it at 320 kbps - the cutoff is permanent and cannot be restored.
|
||||||
That would be an **UPSCALED** file.
|
That would be an **UPSCALED** file.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -96,9 +96,9 @@ tcd measures this as the frequency gap between the −20 dB point (still loud)
|
||||||
and the −60 dB cutoff (essentially silent). A narrow gap = a sharp drop.
|
and the −60 dB cutoff (essentially silent). A narrow gap = a sharp drop.
|
||||||
|
|
||||||
**The analogy:** Imagine the frequency graph as a mountain ridge. A lossless
|
**The analogy:** Imagine the frequency graph as a mountain ridge. A lossless
|
||||||
recording rolls off like a natural hillside — gradual, smooth, taking
|
recording rolls off like a natural hillside - gradual, smooth, taking
|
||||||
thousands of Hz to go from loud to silent. A lossy encoder's lowpass filter
|
thousands of Hz to go from loud to silent. A lossy encoder's lowpass filter
|
||||||
creates a cliff — a near-vertical drop from audible signal to nothing.
|
creates a cliff - a near-vertical drop from audible signal to nothing.
|
||||||
|
|
||||||
**What the number means:** Steepness is the width (in Hz) of that drop zone.
|
**What the number means:** Steepness is the width (in Hz) of that drop zone.
|
||||||
The smaller the number, the sharper the cliff:
|
The smaller the number, the sharper the cliff:
|
||||||
|
|
@ -111,11 +111,11 @@ The smaller the number, the sharper the cliff:
|
||||||
| >5000 Hz | Gentle slope | Natural acoustic roll-off (lossless) |
|
| >5000 Hz | Gentle slope | Natural acoustic roll-off (lossless) |
|
||||||
|
|
||||||
To understand steepness, imagine a guitar string being plucked. The sound
|
To understand steepness, imagine a guitar string being plucked. The sound
|
||||||
naturally fades across many frequencies — the harmonics near the top end of
|
naturally fades across many frequencies - the harmonics near the top end of
|
||||||
your hearing get quieter and quieter over a broad range. This is a gentle
|
your hearing get quieter and quieter over a broad range. This is a gentle
|
||||||
slope. Now imagine someone put a pair of scissors on the frequency spectrum
|
slope. Now imagine someone put a pair of scissors on the frequency spectrum
|
||||||
and cut everything above a certain note. That sharp edge — the difference
|
and cut everything above a certain note. That sharp edge - the difference
|
||||||
between "still audible" and "completely gone" in just a few hundred Hz — is
|
between "still audible" and "completely gone" in just a few hundred Hz - is
|
||||||
what lossy compression does. The steepness number tells you how sharp that
|
what lossy compression does. The steepness number tells you how sharp that
|
||||||
scissor cut was.
|
scissor cut was.
|
||||||
|
|
||||||
|
|
@ -126,7 +126,7 @@ scissor cut was.
|
||||||
**What it measures:** How "bumpy" or "irregular" the spectrum looks just
|
**What it measures:** How "bumpy" or "irregular" the spectrum looks just
|
||||||
before the cutoff point.
|
before the cutoff point.
|
||||||
|
|
||||||
**The analogy:** Lossy encoding introduces quantization noise — tiny
|
**The analogy:** Lossy encoding introduces quantization noise - tiny
|
||||||
rounding errors that are unevenly distributed across frequencies. In the
|
rounding errors that are unevenly distributed across frequencies. In the
|
||||||
frequency graph, this looks like a jagged, bumpy line instead of a smooth
|
frequency graph, this looks like a jagged, bumpy line instead of a smooth
|
||||||
one. Think of it like a dirt road vs a paved highway: lossless audio is
|
one. Think of it like a dirt road vs a paved highway: lossless audio is
|
||||||
|
|
@ -161,10 +161,10 @@ is severe.
|
||||||
|
|
||||||
| Band ratio | What it means |
|
| Band ratio | What it means |
|
||||||
|------------|---------------|
|
|------------|---------------|
|
||||||
| >0.85 | Healthy high end — likely native lossless |
|
| >0.85 | Healthy high end - likely native lossless |
|
||||||
| 0.70–0.85 | Mild roll-off — could be lossy or natural |
|
| 0.70–0.85 | Mild roll-off - could be lossy or natural |
|
||||||
| 0.50–0.70 | Significant high-end loss — likely lossy |
|
| 0.50–0.70 | Significant high-end loss - likely lossy |
|
||||||
| <0.50 | Severe high-end loss — almost certainly lossy or transcoded |
|
| <0.50 | Severe high-end loss - almost certainly lossy or transcoded |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -173,8 +173,8 @@ is severe.
|
||||||
**What it measures:** The average noise level in the highest quarter of the
|
**What it measures:** The average noise level in the highest quarter of the
|
||||||
frequency range (roughly 16500–22050 Hz).
|
frequency range (roughly 16500–22050 Hz).
|
||||||
|
|
||||||
**The analogy:** Imagine listening in a quiet room — the background hiss is
|
**The analogy:** Imagine listening in a quiet room - the background hiss is
|
||||||
very low. Now imagine that same room with a fan running — the background
|
very low. Now imagine that same room with a fan running - the background
|
||||||
noise rises. A lossy encoder introduces quantization noise that raises the
|
noise rises. A lossy encoder introduces quantization noise that raises the
|
||||||
"background hiss" in the high frequencies.
|
"background hiss" in the high frequencies.
|
||||||
|
|
||||||
|
|
@ -183,10 +183,10 @@ quieter (better). Less negative = noisier (worse):
|
||||||
|
|
||||||
| Noise floor | What it means |
|
| Noise floor | What it means |
|
||||||
|-------------|---------------|
|
|-------------|---------------|
|
||||||
| −90 to −110 dB | Very clean — native lossless |
|
| −90 to −110 dB | Very clean - native lossless |
|
||||||
| −70 to −90 dB | Moderate — could be lossy or quiet lossless |
|
| −70 to −90 dB | Moderate - could be lossy or quiet lossless |
|
||||||
| −50 to −70 dB | Noisy — likely lossy |
|
| −50 to −70 dB | Noisy - likely lossy |
|
||||||
| >−50 dB | Very noisy — almost certainly lossy or transcoded |
|
| >−50 dB | Very noisy - almost certainly lossy or transcoded |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -215,7 +215,7 @@ the file is **UPSCALED**. For example, a file claiming 320 kbps (expecting
|
||||||
≥90%) but showing a cutoff of 70% (≈15400 Hz) would be flagged as upscaled
|
≥90%) but showing a cutoff of 70% (≈15400 Hz) would be flagged as upscaled
|
||||||
from ~96 kbps.
|
from ~96 kbps.
|
||||||
|
|
||||||
Otherwise it is **NATIVE** — a genuine single encode at this bitrate.
|
Otherwise it is **NATIVE** - a genuine single encode at this bitrate.
|
||||||
|
|
||||||
### Scenario 2: The input file is lossless (FLAC, WAV, ALAC, etc.)
|
### Scenario 2: The input file is lossless (FLAC, WAV, ALAC, etc.)
|
||||||
|
|
||||||
|
|
@ -224,7 +224,7 @@ decoding a lossy file and re-encoding to lossless?
|
||||||
|
|
||||||
tcd uses a **two-layer** check:
|
tcd uses a **two-layer** check:
|
||||||
|
|
||||||
**Layer 1 — Cutoff + Steepness (primary):**
|
**Layer 1 - Cutoff + Steepness (primary):**
|
||||||
|
|
||||||
| Cutoff range | Max steepness allowed | If exceeded → |
|
| Cutoff range | Max steepness allowed | If exceeded → |
|
||||||
|-------------|----------------------|---------------|
|
|-------------|----------------------|---------------|
|
||||||
|
|
@ -236,10 +236,10 @@ tcd uses a **two-layer** check:
|
||||||
|
|
||||||
This works because lossy cutoffs are always sharp (low steepness). A lossless
|
This works because lossy cutoffs are always sharp (low steepness). A lossless
|
||||||
recording that happens to have a low cutoff (e.g., a muddy recording with
|
recording that happens to have a low cutoff (e.g., a muddy recording with
|
||||||
little treble) would still have a *gradual* roll-off (high steepness) — you
|
little treble) would still have a *gradual* roll-off (high steepness) - you
|
||||||
need both a low cutoff **and** a sharp drop to convict.
|
need both a low cutoff **and** a sharp drop to convict.
|
||||||
|
|
||||||
**Layer 2 — Roughness + Band ratio (secondary):**
|
**Layer 2 - Roughness + Band ratio (secondary):**
|
||||||
|
|
||||||
If Layer 1 did not trigger but the cutoff is above 80%, tcd checks roughness
|
If Layer 1 did not trigger but the cutoff is above 80%, tcd checks roughness
|
||||||
and band ratio. This catches transcodes where the cutoff happens to be high
|
and band ratio. This catches transcodes where the cutoff happens to be high
|
||||||
|
|
@ -260,9 +260,9 @@ If neither layer triggers, the file is **GENUINE** (native lossless).
|
||||||
|
|
||||||
| Verdict | Input codec | What it means |
|
| Verdict | Input codec | What it means |
|
||||||
|---------|------------|---------------|
|
|---------|------------|---------------|
|
||||||
| **NATIVE** | lossy | Encoded once at the stated bitrate — genuine |
|
| **NATIVE** | lossy | Encoded once at the stated bitrate - genuine |
|
||||||
| **UPSCALED** | lossy | Originally encoded at a lower bitrate, then re-encoded higher |
|
| **UPSCALED** | lossy | Originally encoded at a lower bitrate, then re-encoded higher |
|
||||||
| **GENUINE** | lossless | Appears to be native lossless — no evidence of lossy origin |
|
| **GENUINE** | lossless | Appears to be native lossless - no evidence of lossy origin |
|
||||||
| **TRANSCODE** | lossless | Originated from a lossy source, decoded to lossless |
|
| **TRANSCODE** | lossless | Originated from a lossy source, decoded to lossless |
|
||||||
| **SILENT** | any | No detectable audio content |
|
| **SILENT** | any | No detectable audio content |
|
||||||
|
|
||||||
|
|
@ -282,7 +282,7 @@ Auto-remove mode (`-a`)
|
||||||
|
|
||||||
When `-a` is passed, any file that is not classified as NATIVE or GENUINE is
|
When `-a` is passed, any file that is not classified as NATIVE or GENUINE is
|
||||||
automatically deleted after analysis. This is useful for batch cleanup of
|
automatically deleted after analysis. This is useful for batch cleanup of
|
||||||
corrupt or transcoded libraries. Careful — this will eat data.
|
corrupt or transcoded libraries. Careful - this will eat data.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -292,7 +292,7 @@ Why the method is (somewhat!) scientifically reliable
|
||||||
### 1. Lossy encoding leaves a permanent spectral fingerprint
|
### 1. Lossy encoding leaves a permanent spectral fingerprint
|
||||||
|
|
||||||
Every lossy audio codec discards information. The most obvious form is a
|
Every lossy audio codec discards information. The most obvious form is a
|
||||||
**lowpass filter** — once applied, the frequencies above the cutoff are gone
|
**lowpass filter** - once applied, the frequencies above the cutoff are gone
|
||||||
forever. Decoding back to PCM and re-encoding to lossless cannot restore them.
|
forever. Decoding back to PCM and re-encoding to lossless cannot restore them.
|
||||||
This means a "lossless" FLAC file made from an MP3 will contain the MP3's
|
This means a "lossless" FLAC file made from an MP3 will contain the MP3's
|
||||||
permanent spectral cutoff.
|
permanent spectral cutoff.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue