我仔细阅读了 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)?
又名这个:
- [youtube-dl] 下载缩略图
- [youtube-dl] 下载视频文件 (webm/mp4)
- [ffmpeg] 如果不是 mp4,则将视频文件转换为 mp4——我希望发生的额外步骤
- [youtube-dl] 下载音频文件 (m4a)
- [ffmpeg] 将文件合并为 mp4
- [ffmpeg] 添加元数据
- [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 的视频,尽管这通常不适合在屏幕上包含文本的视频,例如编程教程。
希望这可以帮助。