科技 · 实用指南
yt-dlp 下载的视频没有声音?重试前先核对流与 FFmpeg
yt-dlp 下载结果无声,不一定表示下载失败。先保留文件和详细日志,检查文件中实际有哪些流,再区分是只选了视频、跳过或未完成合并,还是播放器兼容问题,然后才考虑重新下载。

下载的视频没有声音时,最安全的第一步不是再下载一次。保留现有输出、任何分离的音频或视频组件、准确命令以及详细日志。它们合在一起,通常能说明你是否选择了仅视频格式、yt-dlp 是否找到 FFmpeg 并尝试合并,或最终文件其实含有音频,只是某个播放器无法解码。
yt-dlp 文档说明,许多站点会把较高质量的视频和音频作为独立流提供。格式表会分别标记这些流,而组合它们需要 FFmpeg。项目中的一个真实问题也显示,即使已安装 FFmpeg,明确指定单个格式 ID 仍可能得到仅视频文件,因为 FFmpeg 无法凭空生成从未被选择的音频流。
本指南只适用于你有权保存的媒体,不涉及绕过 DRM 或访问控制。最终目标是一份简短的证据记录和一个最小下一动作,而不是承诺某个选择器适用于所有站点。
1. 改命令前先冻结证据
把无声输出以及同名的组件文件复制到工作文件夹。不要覆盖或删除带有 .f137、.f140、.video、.audio、.webm 或 .m4a 等后缀的文件。名称会因情况而异,但遗留的一对组件可能无需再次下载媒体就能复用。
记录准确的 yt-dlp 命令、页面网址、yt-dlp 版本、操作系统以及首次测试所用播放器。条件允许时只重新运行信息命令并启用详细输出:`yt-dlp -v -F URL`。`-F` 表是只读的,会列出可用格式行;详细输出的开头还会显示是否检测到 FFmpeg 和 ffprobe。
不要把账户 Cookie、签名媒体网址或其他凭据贴到支持帖子中。证据记录里不要包含秘密信息。
2. 检查磁盘上已经存在的文件
不要根据扩展名判断容器内容,先检查流。若有 ffprobe,请运行 `ffprobe -hide_banner -show_streams -show_format "FILE"`。在输出中查找至少一个 `codec_type=video` 视频流和一个 `codec_type=audio` 音频流。MP4、MKV 或 WebM 等容器可以同时包含两者,也可以只包含其中之一,甚至两者都没有。
如果文件有视频流但没有音频流,首先怀疑的不应是播放器,应转向格式选择与合并证据。如果文件确实有音频流,请先用另一个最新播放器测试,并检查该流是否被禁用、编码不受支持或映射异常,再决定是否重新下载。
如果 ffprobe 报告文件截断或无法读取,请把它单独归入完整性分支。损坏的容器与有效但仅含视频的流不是同一种诊断。
3. 阅读实际选中的格式行,不要只看格式 ID
在 `yt-dlp -F URL` 中找到 `-f` 后使用的每个 ID 所对应的行,逐项读取音频和视频列。标为 video only 的行本身没有音轨可供合并;audio only 行则无法提供画面。本指南审阅的项目问题恰好展示了这种模式:FFmpeg 已被检测到,但用户明确选择的是仅视频 ID。
如果你选择了一个仅视频 ID,请用 `VIDEO_ID+AUDIO_ID` 之类的选择器搭配一行音频,或在确认该网址的解析结果后使用 `bv*+ba/b` 等文档化策略。不要假设从别处复制来的数字 ID 在另一站点或另一上传内容上仍代表相同编解码器或流布局。
真正重试前,先运行 `yt-dlp -v -f "SELECTOR" --simulate URL` 预览选择结果,并保存详细输出中选中的格式行。模拟可以验证选择逻辑,不会下载媒体。
4. 把格式选择、FFmpeg 发现与合并分开判断
包含视频加音频的选择器,在正常合并路径中仍需要 FFmpeg。查看详细输出,确认 yt-dlp 是否打印出已检测到的 FFmpeg 与 ffprobe 版本。如果提示缺少 FFmpeg,请在启动 yt-dlp 的同一个 shell 中执行 `ffmpeg -version` 和 `ffprobe -version`。图形终端、计划任务或服务的 PATH 可能与交互式 shell 不同。
如果 FFmpeg 安装在 PATH 之外,请按 yt-dlp 文档使用 `--ffmpeg-location` 指向其目录或可执行文件。不要为了消除提示而重命名无关程序,也不要下载来源未经验证的可执行文件。
若找到了 FFmpeg 但没有发生合并,请在日志中查找两个已下载组件流,以及 merger 或 postprocessor 行。故意选择一个已合并格式的命令可能不需要合并;只选择了视频的命令则无法靠重装 FFmpeg 修复。
5. 再次下载前先复用完整组件文件
如果工作文件夹里已有同一项目的完整仅视频文件和完整仅音频文件,请分别检查它们。确认一个含有视频、另一个含有音频,并且两者都没有截断。实验前先把它们复制为稳定的新文件名。
可用手动重封装测试现有流是否可用:`ffmpeg -i "VIDEO_FILE" -i "AUDIO_FILE" -map 0:v:0 -map 1:a:0 -c copy "merged-test.mkv"`。务必使用新的输出文件名。MKV 适合作为诊断容器,因为复制流无需转码且能容纳多种编解码器组合;但这不保证所有目标设备都支持这些编解码器。
再用 ffprobe 检查 `merged-test.mkv`,并在两个最新播放器中播放。如果它同时包含两种流且能正常出声,可能无需重新进行网络下载。如果 FFmpeg 报告输入不兼容或损坏,请保留错误并回到完整性分支。
6. 用症状矩阵选择下一动作
每个实际观察到的文件单独记录一行。“没有音频”应明确表示 ffprobe 未发现音频流;“存在音频流,但某个播放器无声”必须另列一行。这样的措辞能避免把播放器问题误当成格式选择问题。
如果选中的是仅视频格式且没有音频组件,请修正选择器、先模拟,再做一次受控重试。如果成对组件都存在且检查正常,请先对副本重封装。如果最终文件含有音频但只有一个播放器无声,请检查播放器与编解码器兼容性。如果日志显示选中了两种流但合并失败,应修复准确的 FFmpeg 发现或后处理器错误,而不是随机更换格式。
证据 | 最可能的分支 | 最小下一动作 最终文件只有视频;所选行标为仅视频 | 格式选择 | 选择或模拟视频+音频策略 仍保留完整的独立视频和音频文件 | 跳过或未完成合并 | 检查两者,并把副本重封装为新文件 最终文件同时有两种流;只有一个播放器无声 | 播放或编解码器兼容性 | 换播放器测试,并检查音频编码与映射 详细输出的开头找不到 FFmpeg | 工具发现 | 核对同一 shell 的 PATH,或设置 --ffmpeg-location 检查报告文件截断或数据无效 | 文件完整性 | 保留错误,不要覆盖唯一副本
7. 停止条件与可交给支持人员的记录
在以下情况下先停止重试:所选格式行仍不清楚;来源网址已不再解析为同一项目;现有组件文件尚未复制;或详细日志仍含未移除的凭据。如果你无权保存该媒体,也应停止并先取得许可。
提交支持请求时,请包括已脱敏的命令、yt-dlp 版本、操作系统、相关 `-F` 行、FFmpeg 检测行、ffprobe 流摘要、组件文件名,以及第一条合并或播放错误。观察与结论应分开陈述。
完成一次受控修正后,再检查最终文件,并用两个最新播放器播放。仅仅出现了一个文件名,并不代表下载已经通过验证;验收条件是一个可读视频流、一个可读音频流,以及在目标环境中成功播放。
常见问题
已经安装 FFmpeg,为什么 yt-dlp 下载的视频仍没有声音? 明确指定的格式 ID 可能只包含视频。FFmpeg 可以合并已选中的流,却无法补上选择器从未请求的音频流。请先检查所选格式行和详细日志。
应该删除分离的音频和视频文件吗? 不要。先检查并复制它们。如果两者完整且来自同一项目,可能无需重复网络下载就能重封装。
MP4 扩展名能证明文件含有音频吗? 不能。容器名称无法证明其中有哪些流,请使用 ffprobe 或其他流检查工具。
`bestvideo+bestaudio` 总是正确的选择器吗? 不是。没有一种选择器适用于所有情况。请查看当前格式表,并针对具体项目和目标设备使用 yt-dlp 文档化的选择策略与回退规则。
