Picture plays, audio is silent
Decoder
A video plays with no sound on Windows. How to identify the audio codec a file uses, why AC3 and DTS tracks go silent, and what to install instead.
Playback is four stages in sequence, and each symptom rules out most of them. Start from what the file is doing rather than from what might be missing.
Picture plays, audio is silent
Decoder
A video plays with no sound on Windows. How to identify the audio codec a file uses, why AC3 and DTS tracks go silent, and what to install instead.
Audio plays, frame stays black
Decoder
Audio plays and the picture stays black on Windows. Which video codecs cause it, how HEVC and 10-bit files fail, and what to install instead.
Playback runs but jerks or drifts
Renderer
Video plays but jerks, tears or drifts out of sync. How to read dropped-frame counters, when hardware acceleration helps, and why a fast machine still stutters.
Subtitle track present, nothing on screen
Renderer
Subtitles are in the file and never appear. Soft, hard and image subtitles, why SRT and ASS behave differently, and how to select the right track.
The order matters because each stage depends on the one before it. A container that cannot be identified means nothing downstream ever runs, which is why an unopenable file produces no symptom other than an error. Once the container opens, the splitter separates the tracks, and from that point the video and audio branches fail independently. That independence is the whole diagnostic value of this set: silence with a good picture and a black frame with good sound are the same fault on two different branches.
The fourth stage behaves differently again. A renderer receives finished frames and samples, so when it fails, decoding already succeeded and no codec will change the outcome. Stuttering and missing subtitles both live here, which is why they are the two symptoms that most often survive an install intended to fix them.
Nothing in this index requires a bundle. The historical answer to all four symptoms was to install a codec pack and hope, and it worked often enough to become a habit. Reading the symptom first replaces the hoping, and usually replaces the install as well.
A single machine can hold several completely separate playback paths, and a file only ever travels one of them at a time. A player built around the operating system's filter graph asks Windows which component handles a format, and inherits whatever happens to be registered. A player with decoding built in never asks: it carries its own copy of the decoding library and uses it regardless of what the system holds. Those two designs produce different outcomes on identical input, which is why the sentence "it plays in one program but not the other" is a diagnosis rather than a complaint.
The practical consequence is that testing in a second player is the cheapest diagnostic step available, and it should come before any install. A file that plays in a self-contained player and fails in a system-chain player has a chain problem, and the chain can be repaired or bypassed. A file that fails in both is either damaged or encoded with something genuinely unusual, and no amount of installing will change that.
Two shifts removed most of the ground the bundles stood on. Decoding moved inside the players, so the common case stopped touching the system at all. And the many small components that a bundle collected were consolidated: where a pack once registered separate decoders for a dozen formats and a splitter for each container, one filter set now covers the same ground from a single install. Fewer registered components mean fewer ways for two of them to claim the same format, which was the failure mode that made bundles risky in the first place.
What did not change is the sequence. Container, splitter, decoder, renderer is still the order, still the reason a symptom localises a fault, and still the fastest route from "it does not work" to a specific thing to try. The four entries above are that sequence read backwards from the evidence, which is the direction that saves time.
At the symptom, not at the software. Each of the four symptoms below eliminates most of the chain on its own, which turns an open-ended problem into one branch with a short list of causes. Installing something before that narrowing is done is how machines accumulate conflicting components.
For a viewer, a player with internal decoding covers nearly everything, because it never asks the system for anything. For a machine that must keep using the Windows filter chain, one modern filter set replaces what a bundle of a dozen components used to provide.
They take different routes. One asks Windows for a decoder and inherits whatever is registered; the other carries its own and ignores the system entirely. The file has not changed between the two attempts, only the path it travelled.
Not necessarily, but it moves the odds. A file that fails in a player with internal decoding, on more than one machine, is either damaged or uses something genuinely exotic. A file that fails in one program and plays in another was never damaged.
The diagnostic does; the fixes do not. Phone and television apps decode internally and cannot be extended, so a file they refuse has to be converted rather than accommodated. The stage that failed still tells you what to convert.