youtube-dl - 下载最佳音频/视频,嵌入缩略图,并转换为 mp4

Cha*_*win 5 powershell ffmpeg youtube-dl powershell-core

我已经仔细阅读了 youtube-dl 文档。我发现我认为正是我想要的……但我遇到了一个障碍,我很想知道 youtube-dl 的任何更高级的选项是否可以帮助解决我的问题。对于一些更高级的选项,没有太多的文档,而且我还在学习 Python……所以浏览源代码是一项努力。哈哈。

目标:

  • 下载最佳视频 + 最佳音频(如果组合不可用,默认为“最佳”)
  • 嵌入缩略图
  • 在文件中包含元数据信息
  • 将最终文件输出为 MP4 - 不能是 MKV

我当前的命令:

youtube-dl -f "bestvideo+bestaudio[ext=m4a]/best" --embed-thumbnail --add-metadata [url]
Run Code Online (Sandbox Code Playgroud)

问题:

如果“最佳视频”是 webm 文件...它会检测到 WEBM + M4A 不兼容,并将合并为 MKV 文件而不是 MP4(就像通常那样)。由于此步骤是在通过 AtomicParsley 嵌入缩略图之前执行的...引发错误,因为缩略图嵌入不支持 MKV。

更新:我后来想起上面的说法是不准确的。实际发生的是 WEBM 视频工作正常,但导致问题的是 WEBM 音频。YouTube 对 WEBM 音频使用 Opus 编码,当 youtube-dl 尝试合并这两个文件时,它最终将不得不使用 MKV 容器而不是 MP4,因为 ffmpeg 不允许在 MP4 容器中安全地使用 WEBM/Opus。为了强制进行这种转换,您必须向 ffmpeg 添加“--strict 2”(可以通过 youtube-dl 参数传入)。我的解决方案是使用“bestaudio[ext=m4a]”排除 WEBM 音频格式。完成此操作后,我只需将“--merge-output-format mp4”添加到我的 youtube-dl 命令中(如标记答案所推荐)。

但是...如果仅视频的 webm 文件首先转换为 MP4,那么这一切都不是问题。

所以......有谁知道,如果有办法告诉 youtube-dl 在下载视频文件时,在做其他任何事情之前立即将其转换为给定类型(MP4)?

又名:

  1. [youtube-dl] 下载缩略图
  2. [youtube-dl] 下载视频文件 (webm/mp4)
  3. [ffmpeg] 如果不是 mp4,则将视频文件转换为 mp4 -- 我希望发生的额外步骤
  4. [youtube-dl] 下载音频文件 (m4a)
  5. [ffmpeg] 合并文件到 mp4
  6. [ffmpeg] 添加元数据
  7. [atomicparsley] 嵌入缩略图

如果没有......那么我想我可能会走在powershell中自己写这一切的路线。就像我可以让 youtube-dl 将音频、视频、元数据和缩略图下载到文件中,然后编写一个 powershell 脚本来完成我需要做的所有事情。也许让 youtube-dl 在每次迭代后调用 powershell 脚本。

小智 6

将选项添加--merge-output-format mp4到您的命令中:

youtube-dl --merge-output-format mp4 -f "bestvideo+bestaudio[ext=m4a]/best" --embed-thumbnail --add-metadata [url]
Run Code Online (Sandbox Code Playgroud)

从手册中:

--merge-output-format FORMAT 如果需要合并(例如bestvideo+bestaudio),则输出到给定的容器格式。mkv、mp4、ogg、webm、flv 之一。如果不需要合并则忽略


要使其适用于webm音频格式:

youtube-dl --merge-output-format mp4 --postprocessor-args "-strict experimental" -f "bestvideo+bestaudio/best" --embed-thumbnail --add-metadata [url]
Run Code Online (Sandbox Code Playgroud)
  • 请注意,由于opus容器mp4格式是“实验性的”,因此某些播放器可能会在播放此类文件时遇到问题