从 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>
目前,我的文件列表如下:
- file-135.mp4
- file-18.mp4
- file-134.mp4
- file-160.mp4
- 文件-43.webm
- 文件-5.flv
- file-36.3gp
- file-17.3gp
- 文件-160.jpg
- 文件-160.en.srt
我可以 运行 对它们进行一些 Python/Ruby/bash 生成 <source src="..."
,但问题是,我不知道每个视频的编解码器是什么,所以我可以'生成 ; codecs=
部分。
使用 avconv
或 ffmpeg
我可以获得编解码器,但格式不适合嵌入 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/AVC
和 AAC
的 mp4
示例(目标地址可以是任何内容,因为您实际上不会发送任何内容)
- 视频:
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
仅下载特定格式。
我正在使用 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>
目前,我的文件列表如下:
- file-135.mp4
- file-18.mp4
- file-134.mp4
- file-160.mp4
- 文件-43.webm
- 文件-5.flv
- file-36.3gp
- file-17.3gp
- 文件-160.jpg
- 文件-160.en.srt
我可以 运行 对它们进行一些 Python/Ruby/bash 生成 <source src="..."
,但问题是,我不知道每个视频的编解码器是什么,所以我可以'生成 ; codecs=
部分。
使用 avconv
或 ffmpeg
我可以获得编解码器,但格式不适合嵌入 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/AVC
和 AAC
的 mp4
示例(目标地址可以是任何内容,因为您实际上不会发送任何内容)
- 视频:
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
仅下载特定格式。