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

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

我仔细阅读了 youtube-dl 文档。我找到了我认为正是我想要的东西……但我遇到了一个障碍,我很好奇 youtube-dl 的更高级选项是否可以帮助解决我的问题。对于一些更高级的选项,没有太多的文档,而且我还在学习 Python……所以浏览源代码是一项艰巨的任务。哈哈。

目标:

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

我当前的命令:

youtube-dl -f "bestvideo+bestaudio[ext=m4a]/best" --embed-thumbnail --add-metadata [url]

问题:

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

更新:我后来才想起上述说法并不准确。实际发生的情况是,WEBM 视频运行正常,但导致问题的是 WEBM 音频。YouTube 使用 Opus 编码来处理 WEBM 音频,当 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 脚本。

答案1

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

youtube-dl --merge-output-format mp4 -f "bestvideo+bestaudio[ext=m4a]/best" --embed-thumbnail --add-metadata [url]

来自手册:

--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]
  • 请注意,由于opus容器mp4格式处于“实验性”阶段,部分播放器在播放此类文件时可能会遇到问题

答案2

您可以列出格式并查看哪种格式最适合您

youtube-dl -F [youtube_video_address]

或者你可以尝试使用格式属性获取最佳质量的 .mp4 视频-f 字符串

youtube-dl -f 'best[ext=mp4]' [youtube_video_address]

或者您可以决定您想要哪种特定质量。但问题是,这种质量可能不可用。下面是我编制的格式的简单表格(我可能遗漏了一些):

          ?  144p 240p 270p 360p 480p 520p 720p 1920p 1080p 3072p
       ┏━━==━====━====━====━====━====━====━====━=====━=====━=====━┓
   flv ╏   -   -    5    6   34   35    -  120     -     -     -  ┃
   3gp ╏  13  17   36    -    -    -    -    -     -     -     -  ┃
   mp4 ╏   -   -   83   18   18        85   22     -    37    38  ┃
       ┃     160*            82*            84*  299*  137*       ┃
       ┃          133*      134* 135*      136*                   ┃
  webm ╏   -   -    -    -   43   44    -   45     -    46     -  ┃
       ┃     278* 242*      243* 244*      247*        248*       ┃
       ┃                  100/101*         102*      * = no sound ┃
       ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
  m4a  sound only: 139 (low), 140 (med), 141 (hi)
  webm sound only: 249(opus50k), 250(opus70k), 171(vorbis128k), 251(opus160k)

格式 22 通常是可用的最高质量的 .mp4 格式。

youtube-dl -f 22 [youtube_video_address]

我从未遇到过不采用格式 18 的视频,尽管这通常不适合在屏幕上包含文本的视频,例如编程教程。

希望这可以帮助。

相关内容