Tôi muốn có được một hình ảnh thu nhỏ cho video từ Vimeo.
Khi lấy hình ảnh từ Youtube tôi chỉ làm như thế này:
http://img.youtube.com/vi/HwP5NG-3e8I/2.jpg
Bất cứ ý tưởng làm thế nào để làm cho Vimeo?
Tôi muốn có được một hình ảnh thu nhỏ cho video từ Vimeo.
Khi lấy hình ảnh từ Youtube tôi chỉ làm như thế này:
http://img.youtube.com/vi/HwP5NG-3e8I/2.jpg
Bất cứ ý tưởng làm thế nào để làm cho Vimeo?
Câu trả lời:
Từ các tài liệu API đơn giản của Vimeo :
Yêu cầu video
Để nhận dữ liệu về một video cụ thể, hãy sử dụng url sau:
http://vimeo.com/api/v2/video/video_id.output
video_id ID của video bạn muốn thông tin.
đầu ra Chỉ định loại đầu ra. Chúng tôi hiện cung cấp các định dạng JSON, PHP và XML.
Vì vậy, nhận URL này http://vimeo.com/api/v2/video/6271487.xml
<videos>
<video>
[skipped]
<thumbnail_small>http://ts.vimeo.com.s3.amazonaws.com/235/662/23566238_100.jpg</thumbnail_small>
<thumbnail_medium>http://ts.vimeo.com.s3.amazonaws.com/235/662/23566238_200.jpg</thumbnail_medium>
<thumbnail_large>http://ts.vimeo.com.s3.amazonaws.com/235/662/23566238_640.jpg</thumbnail_large>
[skipped]
</videos>
Phân tích điều này cho mỗi video để có được hình thu nhỏ
Đây là mã gần đúng trong PHP
<?php
$imgid = 6271487;
$hash = unserialize(file_get_contents("http://vimeo.com/api/v2/video/$imgid.php"));
echo $hash[0]['thumbnail_medium'];
xml
mặc dù. Làm thế nào tôi có thể nhận được thumbnail_small
với php
?
thumbnail_large
từ i.vimeocdn.com/video/23566238_640.webp thành i.vimeocdn.com/video/23566238_640.png hoặc i.vimeocdn.com/video/23566238_320.jpg
Trong javascript (sử dụng jQuery):
function vimeoLoadingThumb(id){
var url = "http://vimeo.com/api/v2/video/" + id + ".json?callback=showThumb";
var id_img = "#vimeo-" + id;
var script = document.createElement( 'script' );
script.src = url;
$(id_img).before(script);
}
function showThumb(data){
var id_img = "#vimeo-" + data[0].id;
$(id_img).attr('src',data[0].thumbnail_medium);
}
Để hiển thị nó:
<img id="vimeo-{{ video.id_video }}" src="" alt="{{ video.title }}" />
<script type="text/javascript">
vimeoLoadingThumb({{ video.id_video }});
</script>
$(id_img).before
và $(id_img).attr
cho createElement
và cơ bản hơn getElementById(id_img).src
, nhưng sẽ không có nó nếu nó không phải là ví dụ của bạn.
Bạn nên phân tích phản hồi API của Vimeo. Không có cách nào để nó với các cuộc gọi URL (như dailymotion hoặc youtube).
Đây là giải pháp PHP của tôi:
/**
* Gets a vimeo thumbnail url
* @param mixed $id A vimeo id (ie. 1185346)
* @return thumbnail's url
*/
function getVimeoThumb($id) {
$data = file_get_contents("http://vimeo.com/api/v2/video/$id.json");
$data = json_decode($data);
return $data[0]->thumbnail_medium;
}
Sử dụng yêu cầu jsonp của jQuery:
<script type="text/javascript">
$.ajax({
type:'GET',
url: 'http://vimeo.com/api/v2/video/' + video_id + '.json',
jsonp: 'callback',
dataType: 'jsonp',
success: function(data){
var thumbnail_src = data[0].thumbnail_large;
$('#thumb_wrapper').append('<img src="' + thumbnail_src + '"/>');
}
});
</script>
<div id="thumb_wrapper"></div>
<div id='12345678' class='vimeo_thumb'></div>
- và nó sẽ được lấp đầy với hình thu nhỏ img.
$.getJSON('http://vimeo.com/api/v2/video/' + video_id + '.json?callback=?', function (data) {...
Với Ruby, bạn có thể thực hiện các thao tác sau nếu có, nói:
url = "http://www.vimeo.com/7592893"
vimeo_video_id = url.scan(/vimeo.com\/(\d+)\/?/).flatten.to_s # extract the video id
vimeo_video_json_url = "http://vimeo.com/api/v2/video/%s.json" % vimeo_video_id # API call
# Parse the JSON and extract the thumbnail_large url
thumbnail_image_location = JSON.parse(open(vimeo_video_json_url).read).first['thumbnail_large'] rescue nil
require 'open-uri'
cho phép mở để phân tích các tệp URI cũng như các tệp.
Dưới đây là một ví dụ về cách thực hiện điều tương tự trong ASP.NET bằng C #. Vui lòng sử dụng một hình ảnh bắt lỗi khác nhau :)
public string GetVimeoPreviewImage(string vimeoURL)
{
try
{
string vimeoUrl = System.Web.HttpContext.Current.Server.HtmlEncode(vimeoURL);
int pos = vimeoUrl.LastIndexOf(".com");
string videoID = vimeoUrl.Substring(pos + 4, 8);
XmlDocument doc = new XmlDocument();
doc.Load("http://vimeo.com/api/v2/video/" + videoID + ".xml");
XmlElement root = doc.DocumentElement;
string vimeoThumb = root.FirstChild.SelectSingleNode("thumbnail_medium").ChildNodes[0].Value;
string imageURL = vimeoThumb;
return imageURL;
}
catch
{
//cat with cheese on it's face fail
return "http://bestofepicfail.com/wp-content/uploads/2008/08/cheese_fail.jpg";
}
}
LƯU Ý: Yêu cầu API của bạn sẽ như thế này khi được yêu cầu: http://vimeo.com/api/v2/video/32660708.xml
public static string GetVimeoPreviewImage(string id) { try { XmlDocument doc = new XmlDocument(); doc.Load("http://vimeo.com/api/v2/video/" + id + ".xml"); return doc.DocumentElement.FirstChild.SelectSingleNode("thumbnail_medium").ChildNodes[0].Value; } catch { return string.Empty; } }
Cách JavaScript đơn giản nhất mà tôi tìm thấy để có được hình thu nhỏ mà không cần tìm kiếm id video là sử dụng:
//Get the video thumbnail via Ajax
$.ajax({
type:'GET',
url: 'https://vimeo.com/api/oembed.json?url=' + encodeURIComponent(url),
dataType: 'json',
success: function(data) {
console.log(data.thumbnail_url);
}
});
Lưu ý: Nếu ai đó cần lấy hình thu nhỏ video liên quan đến id video, anh ta có thể thay thế $id
bằng id video và nhận XML bằng các chi tiết video:
http://vimeo.com/api/v2/video/$id.xml
Thí dụ:
http://vimeo.com/api/v2/video/198340486.xml
$id
và bạn sẽ nhận được XML bằng các chi tiết video (bao gồm hình thu nhỏ). http://vimeo.com/api/v2/video/$id.xml
. ví dụ : http://vimeo.com/api/v2/video/198340486.xml
. Nguồn ở đây: coderwall.com/p/fdrdmg/get-a-thumbnail-from-a-vimeo-video
Nếu bạn muốn sử dụng hình thu nhỏ thông qua js / jquery no api thuần túy, bạn có thể sử dụng công cụ này để chụp khung hình từ video và voila! Chèn url ngón tay cái trong đó bao giờ nguồn bạn thích.
Đây là một cây bút mã:
<img src="https://i.vimeocdn.com/video/531141496_640.jpg"` alt="" />
Đây là trang web để có được hình thu nhỏ:
Sử dụng url Vimeo ( https://player.vimeo.com/video/30572181 ), đây là ví dụ của tôi
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<title>Vimeo</title>
</head>
<body>
<div>
<img src="" id="thumbImg">
</div>
<script>
$(document).ready(function () {
var vimeoVideoUrl = 'https://player.vimeo.com/video/30572181';
var match = /vimeo.*\/(\d+)/i.exec(vimeoVideoUrl);
if (match) {
var vimeoVideoID = match[1];
$.getJSON('http://www.vimeo.com/api/v2/video/' + vimeoVideoID + '.json?callback=?', { format: "json" }, function (data) {
featuredImg = data[0].thumbnail_large;
$('#thumbImg').attr("src", featuredImg);
});
}
});
</script>
</body>
</html>
Có vẻ như api / v2 đã chết.
Để sử dụng API mới, bạn cần đăng ký ứng dụng của mình và base64 mã hóa client_id
và client_secret
làm tiêu đề Ủy quyền.
$.ajax({
type:'GET',
url: 'https://api.vimeo.com/videos/' + video_id,
dataType: 'json',
headers: {
'Authorization': 'Basic ' + window.btoa(client_id + ":" + client_secret);
},
success: function(data) {
var thumbnail_src = data.pictures.sizes[2].link;
$('#thumbImg').attr('src', thumbnail_src);
}
});
Để bảo mật, bạn có thể trả lại client_id
và client_secret
đã được mã hóa từ máy chủ.
Đây là một cách nhanh chóng để làm điều đó, và cũng là một cách để chọn một kích thước tùy chỉnh.
Tôi đi đây
http://vimeo.com/api/v2/video/[VIDEO ID].php
Tải xuống tệp, mở tệp và tìm hình thu nhỏ rộng 640 pixel, nó sẽ có định dạng như vậy:
https://i.vimeocdn.com/video/[LONG NUMBER HERE]_640.jpg
Bạn lấy liên kết, thay đổi 640 cho - ví dụ - 1400, và bạn kết thúc với một cái gì đó như thế này:
https://i.vimeocdn.com/video/[LONG NUMBER HERE]_1400.jpg
Dán nó trên thanh tìm kiếm trình duyệt của bạn và thưởng thức.
Chúc mừng
function parseVideo(url) {
// - Supported YouTube URL formats:
// - http://www.youtube.com/watch?v=My2FRPA3Gf8
// - http://youtu.be/My2FRPA3Gf8
// - https://youtube.googleapis.com/v/My2FRPA3Gf8
// - Supported Vimeo URL formats:
// - http://vimeo.com/25451551
// - http://player.vimeo.com/video/25451551
// - Also supports relative URLs:
// - //player.vimeo.com/video/25451551
url.match(/(http:|https:|)\/\/(player.|www.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com))\/(video\/|embed\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/);
if (RegExp.$3.indexOf('youtu') > -1) {
var type = 'youtube';
} else if (RegExp.$3.indexOf('vimeo') > -1) {
var type = 'vimeo';
}
return {
type: type,
id: RegExp.$6
};
}
function getVideoThumbnail(url, cb) {
var videoObj = parseVideo(url);
if (videoObj.type == 'youtube') {
cb('//img.youtube.com/vi/' + videoObj.id + '/maxresdefault.jpg');
} else if (videoObj.type == 'vimeo') {
$.get('http://vimeo.com/api/v2/video/' + videoObj.id + '.json', function(data) {
cb(data[0].thumbnail_large);
});
}
}
Thật ra anh chàng hỏi câu đó đã đăng câu trả lời của chính mình.
"Vimeo dường như muốn tôi thực hiện một yêu cầu HTTP và trích xuất URL hình thu nhỏ từ XML mà họ trả về ..."
Các tài liệu API Vimeo có tại đây: http://vimeo.com/api/docs/simple-api
Nói tóm lại, ứng dụng của bạn cần tạo một yêu cầu NHẬN một URL như sau:
http://vimeo.com/api/v2/video/video_id.output
và phân tích dữ liệu được trả về để lấy URL hình thu nhỏ mà bạn yêu cầu, sau đó tải xuống tệp tại URL đó.
Tôi đã viết một hàm trong PHP để cho tôi biết điều này, tôi hy vọng nó hữu ích với ai đó. Đường dẫn đến hình thu nhỏ được chứa trong thẻ liên kết trên trang video. Điều này dường như để làm cho tôi lừa
$video_url = "http://vimeo.com/7811853"
$file = fopen($video_url, "r");
$filedata = stream_get_contents($file);
$html_content = strpos($filedata,"<link rel=\"videothumbnail");
$link_string = substr($filedata, $html_content, 128);
$video_id_array = explode("\"", $link_string);
$thumbnail_url = $video_id_array[3];
echo $thumbnail_url;
Hy vọng nó sẽ giúp được bất cứ ai.
Foggson
function getVimeoInfo($link)
{
if (preg_match('~^http://(?:www\.)?vimeo\.com/(?:clip:)?(\d+)~', $link, $match))
{
$id = $match[1];
}
else
{
$id = substr($link,10,strlen($link));
}
if (!function_exists('curl_init')) die('CURL is not installed!');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://vimeo.com/api/v2/video/$id.php");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$output = unserialize(curl_exec($ch));
$output = $output[0];
curl_close($ch);
return $output;
}`
// tại hàm dưới đây vượt qua url hình thu nhỏ.
function save_image_local($thumbnail_url)
{
//for save image at local server
$filename = time().'_hbk.jpg';
$fullpath = '../../app/webroot/img/videos/image/'.$filename;
file_put_contents ($fullpath,file_get_contents($thumbnail_url));
return $filename;
}
Phân tách câu trả lời của Karthikeyan P để nó có thể được sử dụng trong một loạt các kịch bản:
// Requires jQuery
function parseVimeoIdFromUrl(vimeoUrl) {
var match = /vimeo.*\/(\d+)/i.exec(vimeoUrl);
if (match)
return match[1];
return null;
};
function getVimeoThumbUrl(vimeoId) {
var deferred = $.Deferred();
$.ajax(
'//www.vimeo.com/api/v2/video/' + vimeoId + '.json',
{
dataType: 'jsonp',
cache: true
}
)
.done(function (data) {
// .thumbnail_small 100x75
// .thumbnail_medium 200x150
// 640 wide
var img = data[0].thumbnail_large;
deferred.resolve(img);
})
.fail(function(a, b, c) {
deferred.reject(a, b, c);
});
return deferred;
};
Nhận Id Vimeo từ URL video Vimeo:
var vimeoId = parseVimeoIdFromUrl(vimeoUrl);
Nhận URL hình thu nhỏ của vimeo từ Id Vimeo:
getVimeoThumbUrl(vimeoIds[0])
.done(function(img) {
$('div').append('<img src="' + img + '"/>');
});
CẬP NHẬT: Giải pháp này đã ngừng hoạt động kể từ tháng 12 năm 2018.
Tôi đã tìm kiếm điều tương tự và có vẻ như hầu hết các câu trả lời ở đây đã lỗi thời do Vimeo API v2 bị phản đối.
php 2 của tôi:
$vidID = 12345 // Vimeo Video ID
$tnLink = json_decode(file_get_contents('https://vimeo.com/api/oembed.json?url=https%3A//vimeo.com/' . $vidID))->thumbnail_url;
với ở trên, bạn sẽ nhận được liên kết đến hình ảnh thu nhỏ mặc định của Vimeo.
Nếu bạn muốn sử dụng hình ảnh kích thước khác nhau, bạn có thể thêm một cái gì đó như:
$tnLink = substr($tnLink, strrpos($tnLink, '/') + 1);
$tnLink = substr($tnLink, 0, strrpos($tnLink, '_')); // You now have the thumbnail ID, which is different from Video ID
// And you can use it with link to one of the sizes of crunched by Vimeo thumbnail image, for example:
$tnLink = 'https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F' . $tnLink . '_1280x720.jpg&src1=https%3A%2F%2Ff.vimeocdn.com%2Fimages_v6%2Fshare%2Fplay_icon_overlay.png';
Nếu bạn không cần một giải pháp tự động, bạn có thể tìm thấy URL hình thu nhỏ bằng cách nhập ID vimeo tại đây: http://video.depone.eu/
Tôi đã tạo CodePen để tìm nạp hình ảnh cho bạn.
HTML
<input type="text" id="vimeoid" placeholder="257314493" value="257314493">
<button id="getVideo">Get Video</button>
<div id="output"></div>
JavaScript:
const videoIdInput = document.getElementById('vimeoid');
const getVideo = document.getElementById('getVideo');
const output = document.getElementById('output');
function getVideoThumbnails(videoid) {
fetch(`https://vimeo.com/api/v2/video/${videoid}.json`)
.then(response => {
return response.text();
})
.then(data => {
const { thumbnail_large, thumbnail_medium, thumbnail_small } = JSON.parse(data)[0];
const small = `<img src="${thumbnail_small}"/>`;
const medium = `<img src="${thumbnail_medium}"/>`;
const large = `<img src="${thumbnail_large}"/>`;
output.innerHTML = small + medium + large;
})
.catch(error => {
console.log(error);
});
}
getVideo.addEventListener('click', e => {
if (!isNaN(videoIdInput.value)) {
getVideoThumbnails(videoIdInput.value);
}
});
Nếu bạn đang tìm kiếm một giải pháp thay thế và có thể quản lý tài khoản vimeo thì có một cách khác, bạn chỉ cần thêm mọi video bạn muốn hiển thị vào album và sau đó sử dụng API để yêu cầu chi tiết album - sau đó hiển thị tất cả các hình thu nhỏ và liên kết . Nó không lý tưởng nhưng có thể giúp ích.
Bạn có thể muốn xem đá quý từ Matt Hook. https://github.com/matthooks/vimeo
Nó cung cấp một gói vimeo đơn giản cho api.
Tất cả những gì bạn cần là lưu trữ video_id (và nhà cung cấp nếu bạn cũng đang làm các trang web video khác)
Bạn có thể trích xuất id video vimeo như vậy
def
get_vimeo_video_id (link)
vimeo_video_id = nil
vimeo_regex = /http:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/
vimeo_match = vimeo_regex.match(link)
if vimeo_match.nil?
vimeo_regex = /http:\/\/player.vimeo.com\/video\/([a-z0-9-]+)/
vimeo_match = vimeo_regex.match(link)
end
vimeo_video_id = vimeo_match[2] unless vimeo_match.nil?
return vimeo_video_id
end
và nếu bạn cần bạn ống bạn có thể tìm thấy điều này hữu ích
def
get_youtube_video_id (link)
youtube_video_id = nil
youtube_regex = /^(https?:\/\/)?(www\.)?youtu.be\/([A-Za-z0-9._%-]*)(\&\S+)?/
youtube_match = youtube_regex.match(link)
if youtube_match.nil?
youtubecom_regex = /^(https?:\/\/)?(www\.)?youtube.com\/watch\?v=([A-Za-z0-9._%-]*)(\&\S+)?/
youtube_match = youtubecom_regex.match(link)
end
youtube_video_id = youtube_match[3] unless youtube_match.nil?
return youtube_video_id
end
Đối với những người vẫn muốn có một cách để chỉ thu nhỏ thông qua URL, giống như Youtube, một ứng dụng nhỏ được xây dựng có thể tải nó chỉ bằng ID Vimeo.
https://vumbnail.com/358629078.jpg
Chỉ cần cắm ID video của bạn và nó sẽ kéo và lưu nó trong 24 giờ để nó phục vụ nhanh.
Nếu bạn muốn tự quay vòng, bạn có thể làm như vậy ở đây .
Đối với một người như tôi, người đang cố gắng tìm ra điều này gần đây,
https://i.vimeocdn.com/video/[video_id]_[dimension].webp
làm việc cho tôi
(trong đó dimension
= 200x150 | 640)