如果我确实有多个视频或音频的 URL 链接,我该如何确定哪一个质量最好。是否有标头信息可以告诉我视频的质量 - 即使内容类型不同?
视频示例:
- 第一个 URL 的内容类型是:
video/3gpp
- 第二个 URL 的内容类型是:
video/mp4
音频示例:
- 第一个 URL 的内容类型是:
audio/3gpp
- 第二个 URL 的内容类型是:
audio/webm
是否可以根据我从标题信息中得到的质量对它们进行比较?我要求的是仅包含音频的 URL 和仅包含视频的 URL(音频和视频)。
答案1
HTTP 标头不太可能告诉您除视频或音频容器格式之外的任何信息。但大多数现代视频和音频容器格式都可以在其中存储任意数量的不同质量的视频或音频。要知道容器文件中的实际数据质量如何,您必须开始下载文件并查看文件的内部标头(而不是 HTTP 标头)。
也就是说,由于您的示例包含 3GPP HTTP 内容类型,因此我会猜测它们的质量低于 MPEG-4 和 WebM 版本,因为 3GPP 视频最初设计为低比特率视频,可以轻松地通过速度慢(按照今天的标准)的早期 3G 网络传输到 2006 年左右带有微小低分辨率屏幕的翻盖手机。
答案2
这个答案只是Spiff 的回答并给出真实的例子。
例如这里我选择这个视频在 Azure 中运行你的第一个 Docker 容器来自 Channel9 MSDN。它有该视频的四种文件格式。我做了什么?答案:用于curl --head
仅显示包含 Content-Type 和 Content-Length 的 HTTP/GET 请求的标头。然后下载它们。用于ffmpeg -i
显示下载的视频文件编码信息(下面仅提供重要部分)。以下是其中三种:
- 低质量 MP4:
$> curl --head "https://sec.ch9.ms/ch9/7a84/8269395e-c022-4672-8b43-3cf1b5d57a84/jay-gordon-docker-in-azure.mp4"
Content-Length: 42,102,244
Content-Type: video/mp4
$> ffmpeg -i jay-gordon-docker-in-azure.mp4
Duration: 00:17:54.05, start: 0.000000, bitrate: 313 kb/s
Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 640x360, 210 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Metadata:
handler_name : ?Mainconcept Video Media Handler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 96 kb/s (default)
Metadata:
handler_name : #Mainconcept MP4 Sound Media Handler
- 中等品质 MP4:
$> curl --head "https://sec.ch9.ms/ch9/7a84/8269395e-c022-4672-8b43-3cf1b5d57a84/jay-gordon-docker-in-azure_mid.mp4"
Content-Length: 129,621,802
Content-Type: video/mp4
$> ffmpeg -i jay-gordon-docker-in-azure_mid.mp4
Duration: 00:17:54.05, start: 0.000000, bitrate: 965 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 828 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Metadata:
handler_name : ?Mainconcept Video Media Handler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : #Mainconcept MP4 Sound Media Handler
- 高品质 MP4:
$> curl --head "https://sec.ch9.ms/ch9/7a84/8269395e-c022-4672-8b43-3cf1b5d57a84/jay-gordon-docker-in-azure_high.mp4"
Content-Length: 385,374,160
Content-Type: video/mp4
$> ffmpeg -i jay-gordon-docker-in-azure_high.mp4
Duration: 00:17:54.05, start: 0.000000, bitrate: 2870 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 2701 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Metadata:
handler_name : ?Mainconcept Video Media Handler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 160 kb/s (default)
Metadata:
handler_name : #Mainconcept MP4 Sound Media Handler
比较这三个命令的输出。随着质量的提高,Content-Length 也会随之增加,因此音频和视频的比特率也会随之增加。因此,可能推测视频质量来自curl --head
命令中的 Content-Length,但 HTTP 标头不提供完整的视频编码。要了解有关视频编码的更多信息,必须下载文件。仅 URL 无法提供这些信息。