从 YouTube-DL 自动生成 HTML5 <video> 标签

Autogenerate HTML5 <video> tags from YouTube-DL

我正在使用 youtube-dl 下载我存储在 YouTube 上的视频。它使我能够下载各种格式、缩略图和字幕。

有什么方法可以自动从下载的文件中生成HTML5<video>片段?

例如,我希望最终结果是包含以下内容的 .txt 文件:

<video poster="file-160.jpg" > <source src="file-135.mp4" type="video/mp4; codecs=mp4a.40.2, avc1.42001E"> <source src="file-43.webm" type="video/webm; codecs=vorbis, vp8.0"> ... <track kind="subtitles" src="file-160.en.srt"> </video>

目前,我的文件列表如下:

我可以 运行 对它们进行一些 Python/Ruby/bash 生成 <source src="...",但问题是,我不知道每个视频的编解码器是什么,所以我可以'生成 ; codecs= 部分。

使用 avconvffmpeg 我可以获得编解码器,但格式不适合嵌入 HTML。

我对询问 "what tool should I use" 持谨慎态度 - 但有什么方法可以让 avconv/ffmpeg/youtube-dl 以我可以放入 HTML5 标签的格式吐出编解码器信息?

或者,有没有办法让 YouTube-DL 只输出 HTML5 与已知编解码器兼容的文件?

type 属性以描述容器格式的 MIME 类型开头。您可以轻松找到所有可能格式的 MIME 类型。

每个容器格式可以支持多个 audio/video 编解码器。 type 属性的 codecs 参数用于确定客户端是否能够在 获取文件之前 播放该文件,但这不是强制性的。如果未指定,浏览器将下载并尝试解码视频。

如果您想自娱自乐并自己生成编解码器 ID,则必须查看 RFC6381,在某些情况下,请查看编解码器参考。

对于 YouTube 上的某些容器格式,如 webm,这更容易,因为它类似于 video/webm;codecs="vp8, vorbis"video/webm;codecs="vp9, opus"

对于其他格式,例如基于 ISO 的格式,它更复杂,因为它可以包含编码参数。您可以使用 ffmpeg 通过发送 RTP 生成 SDP.

来获得其中一些

带有 H.264/AVCAACmp4 示例(目标地址可以是任何内容,因为您实际上不会发送任何内容)

  • 视频:ffmpeg -i input.mp4 -c:v copy -an -f rtp rtp://...
  • 音频:ffmpeg -i input.mp4 -c:a copy -vn -f rtp rtp://...
  • 在每个输出中查找 profile-level-id

对于 AVC 流,编解码器将为 avc1.profile-level-id,对于 AAC mp4a.40.profile-level-id

另见:html5 video tag codecs attribute

使用 youtube-dl,您可以使用 -F, --list-formats 获取可用格式,使用 -f, --format 仅下载特定格式。