gpt4 book ai didi

javascript - 检查youtube视频是否为静态图片

转载 作者:可可西里 更新时间:2023-11-01 02:55:17 27 4
gpt4 key购买 nike

如何确定 YouTube 视频是真实视频还是静态图片?

由于可能无法使用 youtube API,是否有使用 javascript/jquery 扫描窗口给定区域中的像素并确定它们是否已更改的解决方法?

最佳答案

这个粗略的想法是基于the answer of Stichoza ,但要简单得多。

只使用缩略图

You can get video thumbnails http://i.ytimg.com/vi/VIDEO_ID/X.jpg. For example, if Video ID is 500Pm4mQZQQ (static image video), you will have this thumbnails:

http://i.ytimg.com/vi/500Pm4mQZQQ/1.jpg
http://i.ytimg.com/vi/500Pm4mQZQQ/2.jpg
http://i.ytimg.com/vi/500Pm4mQZQQ/3.jpg

如果这些图像非常相似,则视频是静态的(由于压缩噪声,它们不会完全相同)。为了以简单的方式比较三个可用的静止图像,您不需要应用实际的图像比较算法。只需比较它们的文件大小即可。

想法:比较 JPEG 大小

这些是 JPEG 图片。它们的文件大小会有所不同,具体取决于图像的压缩程度。相似的图像会产生相似的文件大小。

以上示例有 3534、3539 和 3539 字节。检查一些随机的非静态视频,我得到了更大的差异:4179、4726 和 4779 字节。非常相似的文件大小 = 静态视频。

开始

使用 Javascript 无法(轻松)获取图像的字节大小。但这对于任何服务器端技术来说都应该是微不足道的。这是 an easy way with PHP :

$head = array_change_key_case(get_headers("http://example.com/file.ext", TRUE));
$filesize = $head['content-length'];

编辑:

PHP 测试实现:

<?php
$urls = array(
// Actual videos
'https://www.youtube.com/watch?v=1iTg20x7w2s',
'https://www.youtube.com/watch?v=uY6ooLaM3_U',
'https://www.youtube.com/watch?v=E0vNU6pEQLU',
// Static videos
'https://www.youtube.com/watch?v=wWiC_I7R2iI',
'https://www.youtube.com/watch?v=ytbpMht-7OA',
'https://www.youtube.com/watch?v=x_38wF6bYCw'
);

foreach($urls as $url) {
echo $url . ":\n";
echo thumbSizeStandardDeviation($url) . "\n\n";
}

/**
* This is the main function
*/
function thumbSizeStandardDeviation($url) {
$videoId = extractVideoId($url);

for($i = 1; $i <= 3; $i++) {
$thumbnailUrl =
"http://i.ytimg.com/vi/" . $videoId . "/" . $i . ".jpg";
$fileSizes[] = getRemoteFileSize($thumbnailUrl);
}

return standardDeviation($fileSizes);
}

/**
* https://stackoverflow.com/a/3393008/376138
*/
function extractVideoId($url) {
parse_str( parse_url( $url, PHP_URL_QUERY ), $queryParams );
return $queryParams['v'];
}

/**
* https://stackoverflow.com/a/12249536/376138
*/
function getRemoteFileSize($url) {
$headers = array_change_key_case(get_headers($url, TRUE));
return $headers['content-length'];
}

/**
* https://en.wikipedia.org/wiki/Standard_deviation#Basic_examples
*/
function standardDeviation($numbers) {
$mean = array_sum($numbers) / count($numbers);
$differenceSum = 0;
foreach($numbers as $number) {
$differenceSum += pow($number - $mean, 2);
}
return sqrt($differenceSum / count($numbers));
}

测试结果:

我使用了三个“正常”视频和三个完全静态的视频,它们的 URL 在代码中。在命令行运行脚本,我得到:

$ php youtube-is-static-video.php
https://www.youtube.com/watch?v=1iTg20x7w2s:
271.21496189472

https://www.youtube.com/watch?v=uY6ooLaM3_U:
28.335294049805

https://www.youtube.com/watch?v=E0vNU6pEQLU:
182.70620010157

https://www.youtube.com/watch?v=wWiC_I7R2iI:
4.1899350299922

https://www.youtube.com/watch?v=ytbpMht-7OA:
7.5424723326565

https://www.youtube.com/watch?v=x_38wF6bYCw:
5.1854497287013

在这个(公认的小)样本中,确实可以区分正常样本(前三个)和静态样本(后三个)。

一个大问题是由多个静止图像(幻灯片)组成的视频,这在音乐上传中很常见。

关于javascript - 检查youtube视频是否为静态图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13808268/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com