Watch at EaseStories. Answers. Perspective.

Technology · PRACTICAL GUIDE

yt-dlp downloaded video with no audio? Audit streams and FFmpeg before retrying

A silent yt-dlp result does not automatically mean the download failed. Preserve the file and verbose log, inspect the streams that actually exist, then separate a video-only selection from a skipped merge or a playback-compatibility problem before downloading anything again.

Original concept illustration of separate video and audio streams entering a diagnostic audit
Original concept illustration: inspect the streams that exist before treating a silent file as a failed download. Watch at Ease

When a downloaded video is silent, the safest first move is not another download. Keep the existing output, any separate audio or video components, the exact command and the verbose log. Together they can show whether you selected a video-only format, whether yt-dlp found FFmpeg and attempted a merge, or whether the final file contains audio that one player cannot decode.

yt-dlp documents that many sites provide higher-quality video and audio as separate streams. Its format table marks those streams separately, and combining them requires FFmpeg. A real project issue also shows that an explicit single format ID can produce a video-only result even when FFmpeg is installed, because FFmpeg cannot invent an audio stream that was never selected.

This guide is for media you are authorized to save. It does not cover DRM or access-control bypass. The deliverable is a short evidence ledger and a smallest-next-action decision, not a promise that one selector fits every site.

1. Freeze the evidence before changing the command

Copy the silent output and any same-named component files to a working folder. Do not overwrite or delete files with suffixes such as .f137, .f140, .video, .audio, .webm or .m4a. Those names vary, but a leftover pair may be reusable without downloading the media again.

Record the exact yt-dlp command, the page URL, the yt-dlp version, the operating system, and the player used for the first test. Re-run only the information command with verbose output when possible: `yt-dlp -v -F URL`. The `-F` table is read-only; it lists the available rows and the verbose header shows whether FFmpeg and ffprobe were detected.

Do not paste account cookies, signed media URLs or other credentials into a support post. Keep secrets out of the evidence ledger.

2. Inspect the file that is already on disk

Use a stream probe before judging the container by its extension. Run `ffprobe -hide_banner -show_streams -show_format "FILE"` if ffprobe is available. In the output, look for at least one `codec_type=video` stream and one `codec_type=audio` stream. A container such as MP4, MKV or WebM can hold both, one, or neither.

If the file has video but no audio stream, the player is not the first suspect. Move to format selection and merge evidence. If the file has an audio stream, test it in a second current player and inspect whether the stream is disabled, unsupported or mapped unusually before downloading again.

If ffprobe reports that the file is truncated or unreadable, keep that as a separate integrity branch. A corrupt container is not the same diagnosis as a valid video-only stream.

3. Read the selected format row, not just the format ID

In `yt-dlp -F URL`, find the row for every ID used after `-f`. Read the audio and video columns. A row described as video only has no audio track to merge by itself; an audio-only row cannot produce a picture. The project issue reviewed for this guide shows exactly this failure pattern with an explicitly selected video-only ID while FFmpeg was already detected.

If you chose one video-only ID, pair it with an audio row using a selector such as `VIDEO_ID+AUDIO_ID`, or use a documented policy selector such as `bv*+ba/b` after checking what it resolves to for that URL. Do not assume a copied numeric ID means the same codecs or layout on another site or upload.

Before a real retry, preview the decision with `yt-dlp -v -f "SELECTOR" --simulate URL`. Save the selected rows from the verbose output. A simulation can confirm selection logic without downloading media.

4. Separate selection from FFmpeg discovery and merging

A selector containing video plus audio still needs FFmpeg for the normal merge path. In verbose output, confirm that yt-dlp prints detected FFmpeg and ffprobe versions. If it says FFmpeg is missing, verify `ffmpeg -version` and `ffprobe -version` in the same shell that launches yt-dlp. A graphical terminal, scheduler or service may have a different PATH from an interactive shell.

When FFmpeg is installed outside PATH, use yt-dlp’s documented `--ffmpeg-location` with the directory or executable path. Do not rename unrelated binaries or download an unverified executable just to silence the message.

If FFmpeg is found but no merge occurs, inspect the log for two downloaded component streams and the merger/postprocessor line. A command that intentionally selects one combined row may not need a merge; a command that selected only video cannot be repaired by reinstalling FFmpeg.

5. Reuse complete component files before downloading again

If the working folder already contains a complete video-only file and a complete audio-only file from the same item, probe both. Confirm that one has video, the other has audio, and neither is truncated. Then copy them to stable names before experimenting.

A manual remux can test whether the existing streams are usable: `ffmpeg -i "VIDEO_FILE" -i "AUDIO_FILE" -map 0:v:0 -map 1:a:0 -c copy "merged-test.mkv"`. Use a new output filename. MKV is a useful diagnostic container because stream copy avoids transcoding and accepts many codec pairs; it is not a guarantee that every target device supports those codecs.

Probe `merged-test.mkv` and play it in two current players. If it contains both streams and plays with sound, the network download may not need to be repeated. If FFmpeg reports incompatible or damaged input, preserve the error and return to the integrity branch.

6. Use a symptom matrix to choose the next action

Record one row per observed file. “No audio” should mean ffprobe found no audio stream; “audio present, silent in one player” is a different row. This wording prevents a player problem from being treated as a selection problem.

If the selected row is video-only and no audio component exists, correct the selector and simulate it before one controlled retry. If paired components exist and probe cleanly, remux copies first. If the final file contains audio but only one player is silent, test player and codec compatibility. If the log selected both streams but the merge failed, fix the exact FFmpeg discovery or postprocessor error rather than changing formats at random.

Evidence | Most likely branch | Smallest next action Final file has video only; selected row says video only | Format selection | Choose or simulate a video+audio policy Separate complete video and audio files remain | Merge skipped or failed | Probe and remux copies to a new file Final file has both streams; one player is silent | Playback or codec compatibility | Test another player and inspect audio codec/mapping Verbose header cannot find FFmpeg | Tool discovery | Verify the same shell PATH or set --ffmpeg-location Probe reports truncation or invalid data | File integrity | Preserve the error; do not overwrite the only copy

7. Stop conditions and a support-ready record

Stop before retrying when the selected format rows are unknown, the source URL no longer resolves to the same item, the existing component files have not been copied, or the verbose log contains credentials that have not been removed. Stop and seek permission if you are not authorized to save the media.

For a support report, include the sanitized command, yt-dlp version, operating system, the relevant `-F` rows, FFmpeg detection line, ffprobe stream summary, component filenames and the first merger or playback error. State observations separately from conclusions.

After a controlled fix, probe the final file again and play it in two current players. A completed download is not verified merely because a filename exists; the acceptance condition is one readable video stream, one readable audio stream and successful playback in the intended environment.

Frequently asked questions

Why did yt-dlp download video without audio even though FFmpeg is installed? An explicit format ID can be video-only. FFmpeg can merge selected streams, but it cannot add an audio stream that the selector never requested. Inspect the selected row and verbose log first.

Should I delete the separate audio and video files? No. Probe and copy them first. If both are complete and belong to the same item, they may be remuxed without repeating the network download.

Does an MP4 extension prove the file contains audio? No. A container name does not prove which streams are present. Use ffprobe or another stream inspector.

Is `bestvideo+bestaudio` always the right selector? No single selector is universal. Inspect the current format table and use yt-dlp’s documented selector policies and fallbacks for the specific item and target device.

Original concept illustration of copying separate video and audio streams before remuxing a new file
Original concept illustration: protect the originals, work on copies, and validate a newly remuxed output. Watch at Ease