¿Cómo obtengo una miniatura de video de YouTube de la API de YouTube?


2400

Si tengo una URL de video de YouTube, ¿hay alguna forma de usar PHP y cURL para obtener la miniatura asociada de la API de YouTube?


Aquí hay algunas funciones PHP que creé para obtener la mejor miniatura disponible del método URL sin hacer ping a la API, basado en las muchas buenas respuestas en esta página: gist.github.com/squarecandy/30ec9f6779c0e8cdf12e337c665d96c5
squarecandy

Respuestas:


4614

Cada video de YouTube tiene cuatro imágenes generadas. Están predeciblemente formateados de la siguiente manera:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/0.jpg
https://img.youtube.com/vi/<insert-youtube-video-id-here>/1.jpg
https://img.youtube.com/vi/<insert-youtube-video-id-here>/2.jpg
https://img.youtube.com/vi/<insert-youtube-video-id-here>/3.jpg

La primera en la lista es una imagen a tamaño completo y otras son imágenes en miniatura. La imagen miniatura predeterminada (es decir, uno de 1.jpg, 2.jpg, 3.jpg) es:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/default.jpg

Para la versión de alta calidad de la miniatura, use una URL similar a esta:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg

También hay una versión de calidad miniatura de la miniatura, usando una URL similar a la HQ:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg

Para la versión de definición estándar de la miniatura, use una URL similar a esta:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/sddefault.jpg

Para la versión de resolución máxima de la miniatura, use una URL similar a esta:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg

Todas las URL anteriores también están disponibles a través de HTTP. Además, el nombre de host ligeramente más corto i3.ytimg.comfunciona en lugar de img.youtube.comen las URL de ejemplo anteriores.

Alternativamente, puede usar la API de datos de YouTube (v3) para obtener imágenes en miniatura.


27
En caso de que alguien más cometa este tonto error, no puede usarlo http://www.img.youtube.comsolohttp://img.youtube.com
Ciaran Phillips el

36
@NickG mqdefaultes 16: 9
tomtastico

57
¿Está esto en algún lugar oficialmente documentado?
bjunix el

14
No se garantiza que existan las miniaturas de mayor resolución.
Salman A

63
@ clami219 también es falso: evidentemente funciona (2015-04): i.ytimg.com/vi_webp/EhjdWfxjuHA/sddefault.webp , la verdad: sddefaulty maxresdefaultNO ESTÁN SIEMPRE DISPONIBLES, algunos videos los tienen ...
jave.web

398

Puede usar la API de datos de YouTube para recuperar miniaturas de video, subtítulos, descripción, calificación, estadísticas y más. La versión 3 de la API requiere una clave *. Obtenga la clave y cree una solicitud de videos: lista :

https://www.googleapis.com/youtube/v3/videos?key=YOUR_API_KEY&part=snippet&id=VIDEO_ID

Ejemplo de código PHP

$data = file_get_contents("https://www.googleapis.com/youtube/v3/videos?key=YOUR_API_KEY&part=snippet&id=T0Jqdjbed40");
$json = json_decode($data);
var_dump($json->items[0]->snippet->thumbnails);

Salida

object(stdClass)#5 (5) {
  ["default"]=>
  object(stdClass)#6 (3) {
    ["url"]=>
    string(46) "https://i.ytimg.com/vi/T0Jqdjbed40/default.jpg"
    ["width"]=>
    int(120)
    ["height"]=>
    int(90)
  }
  ["medium"]=>
  object(stdClass)#7 (3) {
    ["url"]=>
    string(48) "https://i.ytimg.com/vi/T0Jqdjbed40/mqdefault.jpg"
    ["width"]=>
    int(320)
    ["height"]=>
    int(180)
  }
  ["high"]=>
  object(stdClass)#8 (3) {
    ["url"]=>
    string(48) "https://i.ytimg.com/vi/T0Jqdjbed40/hqdefault.jpg"
    ["width"]=>
    int(480)
    ["height"]=>
    int(360)
  }
  ["standard"]=>
  object(stdClass)#9 (3) {
    ["url"]=>
    string(48) "https://i.ytimg.com/vi/T0Jqdjbed40/sddefault.jpg"
    ["width"]=>
    int(640)
    ["height"]=>
    int(480)
  }
  ["maxres"]=>
  object(stdClass)#10 (3) {
    ["url"]=>
    string(52) "https://i.ytimg.com/vi/T0Jqdjbed40/maxresdefault.jpg"
    ["width"]=>
    int(1280)
    ["height"]=>
    int(720)
  }
}

* No solo que necesita una clave, es posible que se le solicite información de facturación según la cantidad de solicitudes de API que planea hacer. Sin embargo, pocos millones de solicitudes por día son gratuitas.

Artículo original .


66
FYI: no cambié el código para que se ajuste a la nueva estructura JSON. El código en su getJSON está mal. Que utilizó jsoncen lugar de jsonpara getJSON. Está fallando debido a su estructura JSON incorrecta.
mauris

55
Solo el primer ejemplo puede usar jsonc. Los ejemplos de jQuery y PHP DEBEN usarse json. Y he actualizado el código para que se ajuste a la nueva estructura JSON. Estoy usando el código en este momento y funciona EN VIVO. así que no digas que no funciona sin leer los cambios. ¡Gracias!
mauris

77
Los ejemplos de jQuery y PHP DEBEN usar json ... ¿puede proporcionar una referencia? Además, solicitar un número de versión de API específico ( v=2) se encarga de los cambios de API.
Salman A

44
La llamada gdata no devuelve si maxresdefault.jpg está disponible para videos donde está disponible, solo mq / hq / sd.
Aaron

2
API v3 está MUY mal documentada. Le dan un código de muestra, pero la sección de "referencia" es muy breve. Algunas cosas que deberían ser relativamente "obvias" parecen requerir soluciones extremas.
CashCow

256

Lo que Asaph dijo es correcto. Sin embargo, no todos los videos de YouTube contienen las nueve miniaturas. Además, el tamaño de las imágenes en miniatura depende del video (los números a continuación se basan en uno).

Hay siete miniaturas garantizadas para existir:

| Thumbnail Name      | Size (px) | URL                                              |
|---------------------|-----------|--------------------------------------------------|
| Player Background   | 480x360   | https://i1.ytimg.com/vi/<VIDEO ID>/0.jpg         |
| Start               | 120x90    | https://i1.ytimg.com/vi/<VIDEO ID>/1.jpg         |
| Middle              | 120x90    | https://i1.ytimg.com/vi/<VIDEO ID>/2.jpg         |
| End                 | 120x90    | https://i1.ytimg.com/vi/<VIDEO ID>/3.jpg         |
| High Quality        | 480x360   | https://i1.ytimg.com/vi/<VIDEO ID>/hqdefault.jpg |
| Medium Quality      | 320x180   | https://i1.ytimg.com/vi/<VIDEO ID>/mqdefault.jpg |
| Normal Quality      | 120x90    | https://i1.ytimg.com/vi/<VIDEO ID>/default.jpg   |

Además, las otras dos miniaturas pueden o no existir. Su presencia probablemente se base en si el video es de alta calidad.

| Thumbnail Name      | Size (px) | URL                                                  |
|---------------------|-----------|------------------------------------------------------|
| Standard Definition | 640x480   | https://i1.ytimg.com/vi/<VIDEO ID>/sddefault.jpg     |
| Maximum Resolution  | 1920x1080 | https://i1.ytimg.com/vi/<VIDEO ID>/maxresdefault.jpg |

Puede encontrar scripts JavaScript y PHP para recuperar miniaturas y otra información de YouTube en:

También puede usar la herramienta Generador de información de video de YouTube para obtener toda la información sobre un video de YouTube al enviar una URL o una identificación de video.


55
También puede lograr el mismo resultado con el enlace oficial de youtube img.youtube.com/vi/mJ8tq8AnNis/mqdefault.jpg donde mJ8tq8AnNis es la identificación de video
Ragaisis

44
A veces, algunos no existen: i1.ytimg.com/vi/r5R8gSgedh4/maxresdefault.jpg es falso, aunque i1.ytimg.com/vi/r5R8gSgedh4/0.jpg está bien, por ejemplo.
NoBugs

Gracias por publicar esto. ¿Tiene una fuente para estos datos? Es correcto, pero me gustaría un enlace a algo de Youtube / Google sobre esto y no puedo encontrar uno.
Jonathan Vanasco

@ JonathanVanasco, lo siento. Si te refieres a un recurso oficial para contenidos exactos, no sé ninguno. Y no creo que haya un propósito de publicar algo así desde su punto de vista.
AGMG

44
La herramienta "Generador de información de video de YouTube" actualmente no funciona. Considera editar la respuesta.
giovannipds

74

En YouTube API V3 también podemos usar estas URL para obtener miniaturas ... Se clasifican según su calidad.

https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/default.jpg -   default
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg - medium 
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg - high
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/sddefault.jpg - standard

Y para la máxima resolución ...

https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg

Una ventaja de estas URL sobre las URL en la primera respuesta es que estas no son bloqueadas por firewalls.


3
¿Se supone que estas imágenes deben colocarse en una etiqueta img y deberían funcionar simplemente porque estoy tratando de incluir el enlace con la identificación de video de youtube correcta y ponerlas dentro de la etiqueta img pero sigo recibiendo un 404
Lion789

55
@ Lion789 Estas URL funcionan bien cuando se colocan en una etiqueta img ... El problema puede ser un ID de video incorrecto o la resolución solicitada puede no estar disponible, pero no obtendrá el 404 con estos errores. Verifique la URL del etiqueta img
Naren

2
¿Se confirma que las URL seguirán funcionando después de que se detenga API v2?
Daniele B

1
@DanieleB Estas URL aún funcionan. ¿Sabes cómo verificar si estas URL funcionarán después de API v2?
Naren

53

Si desea la imagen más grande de YouTube para una ID de video específica, la URL debería ser algo como esto:

http://i3.ytimg.com/vi/SomeVideoIDHere/0.jpg

Con la API, puede elegir una imagen en miniatura predeterminada. El código simple debería ser algo como esto:

//Grab the default thumbnail image
$attrs = $media->group->thumbnail[1]->attributes();
$thumbnail = $attrs['url'];
$thumbnail = substr($thumbnail, 0, -5);
$thumb1 = $thumbnail."default.jpg";

// Grab the third thumbnail image
$thumb2 = $thumbnail."2.jpg";

// Grab the fourth thumbnail image.
$thumb3 = $thumbnail."3.jpg";

// Using simple cURL to save it your server.
// You can extend the cURL below if you want it as fancy, just like
// the rest of the folks here.

$ch = curl_init ("$thumb1");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$rawdata = curl_exec($ch);
curl_close($ch);

// Using fwrite to save the above
$fp = fopen("SomeLocationInReferenceToYourScript/AnyNameYouWant.jpg", 'w');

// Write the file
fwrite($fp, $rawdata);

// And then close it.
fclose($fp);

2
Encontré un ejemplo donde 0.jpg tiene una resolución de 480x360, mientras que maxresdefault.jpg tiene 1280x720
Nico Haase

45

Si desea deshacerse de las "barras negras" y hacerlo como lo hace YouTube, puede usar:

https://i.ytimg.com/vi_webp/<video id>/mqdefault.webp

Y si no puede usar la .webpextensión de archivo, puede hacerlo así:

https://i.ytimg.com/vi/<video id>/mqdefault.jpg

Además, si necesita la versión sin escala, use en maxresdefaultlugar de mqdefault.

Nota: No estoy seguro acerca de la relación de aspecto si planea usarla maxresdefault.


2
Esto no está disponible para muchos videos. Por ejemplo: i.ytimg.com/vi_webp/mJ8tq8AnNis/mqdefault.webp
NickG

2
@NickG: funciona si elimina _webpy cambia la extensión a .jpg. Ejemplo de trabajo: i.ytimg.com/vi/mJ8tq8AnNis/mqdefault.jpg , no estoy seguro acerca de la relación de aspecto.
LuTz

34

Hice una función para recuperar solo las imágenes existentes de YouTube

function youtube_image($id) {
    $resolution = array (
        'maxresdefault',
        'sddefault',
        'mqdefault',
        'hqdefault',
        'default'
    );

    for ($x = 0; $x < sizeof($resolution); $x++) {
        $url = '//img.youtube.com/vi/' . $id . '/' . $resolution[$x] . '.jpg';
        if (get_headers($url)[0] == 'HTTP/1.0 200 OK') {
            break;
        }
    }
    return $url;
}

32

En YouTube Data API v3 , puede obtener miniaturas de video con la función videos-> list . Desde snippet.thumbnails. (Clave) , puede elegir la miniatura predeterminada, de resolución media o alta, y obtener su ancho, alto y URL.

También puede actualizar las miniaturas con las miniaturas-> establecer funcionalidad.

Para ver ejemplos, puede consultar el proyecto de ejemplos de API de YouTube . ( PHP ).


1
Supongo que esta es la forma correcta de hacerlo, ya que proviene de un miembro de relaciones de Google Dev para la API de YouTube
Adonis K. Kakoulidis

31

Puede obtener la entrada de video que contiene la URL a la miniatura del video. Hay un código de ejemplo en el enlace. O, si desea analizar XML, hay información aquí . El XML devuelto tiene un media:thumbnailelemento que contiene la URL de la miniatura.


2
No puedo sacarlo usando simpleXML. ¡Es bastante difícil!
Aditya MP

25
// Get image form video URL
$url = $video['video_url'];

$urls = parse_url($url);

//Expect the URL to be http://youtu.be/abcd, where abcd is the video ID
if ($urls['host'] == 'youtu.be') :

    $imgPath = ltrim($urls['path'],'/');

//Expect the URL to be http://www.youtube.com/embed/abcd
elseif (strpos($urls['path'],'embed') == 1) :

    $imgPath = end(explode('/',$urls['path']));

//Expect the URL to be abcd only
elseif (strpos($url,'/') === false):

    $imgPath = $url;

//Expect the URL to be http://www.youtube.com/watch?v=abcd
else :

    parse_str($urls['query']);

    $imgPath = $v;

endif;

2
Esta es una mala solución! ¿por qué no usar Youtube api v3?
mpgn

19

YouTube es propiedad de Google y a Google le gusta tener un número razonable de imágenes para diferentes tamaños de pantalla, por lo tanto, sus imágenes se almacenan en diferentes tamaños. Aquí hay un ejemplo de cómo será tu miniatura:

Miniatura de baja calidad:

http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/sddefault.jpg

Miniatura de calidad media:

http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/mqdefault.jpg

Miniatura de alta calidad:

http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/hqdefault.jpg

Miniatura de máxima calidad:

http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/maxresdefault.jpg

16

YouTube API versión 3 en funcionamiento en 2 minutos

Si todo lo que quieres hacer es buscar en YouTube y obtener propiedades asociadas:

  1. Obtener una API pública : este enlace proporciona una buena dirección

  2. Use la siguiente cadena de consulta. La consulta de búsqueda (indicada por q = ) en la cadena URL es stackoverflow para fines de ejemplo. YouTube luego le enviará una respuesta JSON donde podrá analizar Miniaturas, Fragmentos, Autor, etc.

    https://www.googleapis.com/youtube/v3/search?part=id%2Csnippet&maxResults=50&q=stackoverflow&key=YOUR_API_KEY_HERE


16

Otra buena alternativa sería usar el oEmbed API que es compatible con YouTube.

Simplemente agregue su URL de YouTube a la URL de oEmbed y recibirá un JSON que incluye una miniatura y el código HTML para incrustar.

Ejemplo:

http://www.youtube.com/oembed?format=json&url=http%3A//youtube.com/watch%3Fv%3DxUeJdWYdMmQ

Te daría:

{
  "height":270,
  "width":480,
  "title":"example video for 2020",
  "thumbnail_width":480,
  "html":"...",
  "thumbnail_height":360,
  "version":"1.0",
  "provider_name":"YouTube",
  "author_url":"https:\/\/www.youtube.com\/channel\/UCza6VSQUzCON- AzlsrOLwaA",
  "thumbnail_url":"https:\/\/i.ytimg.com\/vi\/xUeJdWYdMmQ\/hqdefault.jpg",
  "author_name":"Pokics",
  "provider_url":"https:\/\/www.youtube.com\/",
  "type":"video"
}

Lea la documentación para más información .


15

Utilizar:

https://www.googleapis.com/youtube/v3/videoCategories?part=snippet,id&maxResults=100&regionCode=us&key=**Your YouTube ID**

Arriba está el enlace. Con eso, puedes encontrar las características de YouTube de los videos. Después de encontrar características, puede obtener videos de la categoría seleccionada. Después de eso, puede encontrar imágenes de video seleccionadas usando la respuesta de Asaph .

Pruebe el enfoque anterior y puede analizar todo desde la API de YouTube .


14

He usado las miniaturas de YouTube de esta manera:

$url = 'http://img.youtube.com/vi/' . $youtubeId . '/0.jpg';
$img = dirname(__FILE__) . '/youtubeThumbnail_'  . $youtubeId . '.jpg';
file_put_contents($img, file_get_contents($url));

Recuerde que YouTube evita incluir imágenes directamente desde su servidor.



13

Solo para agregar / expandir las soluciones dadas, creo que es necesario tener en cuenta que, como tuve este problema yo mismo, uno puede tomar múltiples contenidos de videos de YouTube, en este caso, miniaturas, con una solicitud HTTP:

Usando un Rest Client, en este caso, HTTPFUL, puede hacer algo como esto:

<?php
header("Content-type", "application/json");

//download the httpfull.phar file from http://phphttpclient.com
include("httpful.phar");

$youtubeVidIds= array("nL-rk4bgJWU", "__kupr7KQos", "UCSynl4WbLQ", "joPjqEGJGqU", "PBwEBjX3D3Q");


$response = \Httpful\Request::get("https://www.googleapis.com/youtube/v3/videos?key=YourAPIKey4&part=snippet&id=".implode (",",$youtubeVidIds)."")

->send();

print ($response);

?>

13

API de datos de YouTube

YouTube nos proporciona las cuatro imágenes generadas para cada video a través de la API de datos (v3), por ejemplo,

  1. https://i.ytimg.com/vi/V_zwalcR8DU/maxresdefault.jpg

  2. https://i.ytimg.com/vi/V_zwalcR8DU/sddefault.jpg

  3. https://i.ytimg.com/vi/V_zwalcR8DU/hqdefault.jpg

  4. https://i.ytimg.com/vi/V_zwalcR8DU/mqdefault.jpg

Obtener acceso a las imágenes a través de la API

  1. Primero obtenga su clave API pública en Google API Console .
  2. Según la referencia en miniatura de YouTube en la documentación de la API , debe acceder a los recursos en snippet.thumbnails.
  3. Según esto, debe expresar su URL de esta manera:

    www.googleapis.com/youtube/v3/videos?part=snippet&id=`yourVideoId`&key=`yourApiKey`

Ahora cambie su ID de video y su clave API a su ID de video y clave de API respectivas y su respuesta será una salida JSON que le proporcionará los cuatro enlaces en las miniaturas de la variable de fragmento (si están disponibles).


13

Puede obtener la ID de video de la url de video de YouTube usando parse_url , parse_str y luego insertarlo en las urls predictivas para imágenes. Gracias a YouTube por las URL predictivas

$videoUrl = "https://www.youtube.com/watch?v=8zy7wGbQgfw";
parse_str( parse_url( $videoUrl, PHP_URL_QUERY ), $my_array_of_vars );
$ytID = $my_array_of_vars['v']; //gets video ID

print "https://img.youtube.com/vi/$ytID/maxresdefault.jpg";
print "https://img.youtube.com/vi/$ytID/mqdefault.jpg";
print "https://img.youtube.com/vi/$ytID/hqdefault.jpg";
print "https://img.youtube.com/vi/$ytID/sddefault.jpg";
print "https://img.youtube.com/vi/$ytID/default.jpg";

Puedes usar esta herramienta para generar miniaturas de YouTube

https://tools.tutsplanet.com/index.php/get-youtube-video-thumbnails


11

Una función PHP simple que creé para la miniatura de YouTube y los tipos son

  • defecto
  • hqdefault
  • mqdefault
  • sddefault
  • maxresdefault

 

function get_youtube_thumb($link,$type){

    $video_id = explode("?v=", $link);

    if (empty($video_id[1])){
        $video_id = explode("/v/", $link);
        $video_id = explode("&", $video_id[1]);
        $video_id = $video_id[0];
    }
    $thumb_link = "";

    if($type == 'default'   || $type == 'hqdefault' ||
       $type == 'mqdefault' || $type == 'sddefault' ||
       $type == 'maxresdefault'){

        $thumb_link = 'http://img.youtube.com/vi/'.$video_id.'/'.$type.'.jpg';

    }elseif($type == "id"){
        $thumb_link = $video_id;
    }
    return $thumb_link;}

10

Si está utilizando la API pública, la mejor manera de hacerlo es usar if declaraciones.

Si el video es público o no aparece en la lista, configura la miniatura usando el método URL. Si el video es privado, usa la API para obtener la miniatura.

<?php
    if($video_status == 'unlisted'){
        $video_thumbnail = 'http://img.youtube.com/vi/'.$video_url.'/mqdefault.jpg';
        $video_status = '<i class="fa fa-lock"></i>&nbsp;Unlisted';
    }
    elseif($video_status == 'public'){
        $video_thumbnail = 'http://img.youtube.com/vi/'.$video_url.'/mqdefault.jpg';
        $video_status = '<i class="fa fa-eye"></i>&nbsp;Public';
    }
    elseif($video_status == 'private'){
        $video_thumbnail = $playlistItem['snippet']['thumbnails']['maxres']['url'];
        $video_status = '<i class="fa fa-lock"></i>&nbsp;Private';
    }

8

Creo que son muchas respuestas para las miniaturas, pero quiero agregar algunas otras URL para obtener miniaturas de YouTube muy fácilmente. Solo estoy tomando un texto de la respuesta de Asaph. Aquí hay algunas URL para obtener miniaturas de YouTube:

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/default.jpg

Para la versión de alta calidad de la miniatura, use una URL similar a esta:

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg

También hay una versión de calidad miniatura de la miniatura, usando una URL similar a la de alta calidad:

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg

Para la versión de definición estándar de la miniatura, use una URL similar a esta:

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/sddefault.jpg

Para la versión de resolución máxima de la miniatura, use una URL similar a esta:

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg

6
    function get_video_thumbnail( $src ) {
            $url_pieces = explode('/', $src);
            if( $url_pieces[2] == 'dai.ly'){
                $id = $url_pieces[3];
                $hash = json_decode(file_get_contents('https://api.dailymotion.com/video/'.$id.'?fields=thumbnail_large_url'), TRUE);
                $thumbnail = $hash['thumbnail_large_url'];
            }else if($url_pieces[2] == 'www.dailymotion.com'){
                $id = $url_pieces[4];
                $hash = json_decode(file_get_contents('https://api.dailymotion.com/video/'.$id.'?fields=thumbnail_large_url'), TRUE);
                $thumbnail = $hash['thumbnail_large_url'];
            }else if ( $url_pieces[2] == 'vimeo.com' ) { // If Vimeo
                $id = $url_pieces[3];
                $hash = unserialize(file_get_contents('http://vimeo.com/api/v2/video/' . $id . '.php'));
                $thumbnail = $hash[0]['thumbnail_large'];
            } elseif ( $url_pieces[2] == 'youtu.be' ) { // If Youtube
                $extract_id = explode('?', $url_pieces[3]);
                $id = $extract_id[0];
                $thumbnail = 'http://img.youtube.com/vi/' . $id . '/mqdefault.jpg';
            }else if ( $url_pieces[2] == 'player.vimeo.com' ) { // If Vimeo
                $id = $url_pieces[4];
                $hash = unserialize(file_get_contents('http://vimeo.com/api/v2/video/' . $id . '.php'));
                $thumbnail = $hash[0]['thumbnail_large'];
            } elseif ( $url_pieces[2] == 'www.youtube.com' ) { // If Youtube
                $extract_id = explode('=', $url_pieces[3]);
                $id = $extract_id[1];
                $thumbnail = 'http://img.youtube.com/vi/' . $id . '/mqdefault.jpg';
            } else{
                $thumbnail = tim_thumb_default_image('video-icon.png', null, 147, 252);
            }
            return $thumbnail;
        }

get_video_thumbnail('https://vimeo.com/154618727');
get_video_thumbnail('https://www.youtube.com/watch?v=SwU0I7_5Cmc');
get_video_thumbnail('https://youtu.be/pbzIfnekjtM');
get_video_thumbnail('http://www.dailymotion.com/video/x5thjyz');

5

Aquí está la respuesta superior optimizada para uso manual. El token de ID de video sin separadores permite seleccionar con un doble clic.

Cada video de YouTube tiene cuatro imágenes generadas. Están predeciblemente formateados de la siguiente manera:

https://img.youtube.com/vi/YOUTUBEVIDEOID/0.jpg
https://img.youtube.com/vi/YOUTUBEVIDEOID/1.jpg
https://img.youtube.com/vi/YOUTUBEVIDEOID/2.jpg
https://img.youtube.com/vi/YOUTUBEVIDEOID/3.jpg

La primera en la lista es una imagen a tamaño completo y otras son imágenes en miniatura. (. Es decir, uno de la imagen miniatura predeterminada 1.jpg, 2.jpg, 3.jpg) es:

https://img.youtube.com/vi/YOUTUBEVIDEOID/default.jpg

Para la versión de alta calidad de la miniatura, use una URL similar a esta:

https://img.youtube.com/vi/YOUTUBEVIDEOID/hqdefault.jpg

También hay una versión de calidad miniatura de la miniatura, usando una URL similar a la HQ:

https://img.youtube.com/vi/YOUTUBEVIDEOID/mqdefault.jpg

Para la versión de definición estándar de la miniatura, use una URL similar a esta:

https://img.youtube.com/vi/YOUTUBEVIDEOID/sddefault.jpg

Para la versión de resolución máxima de la miniatura, use una URL similar a esta:

https://img.youtube.com/vi/YOUTUBEVIDEOID/maxresdefault.jpg

Todas las URL anteriores también están disponibles a través de HTTP. Además, el nombre de host ligeramente más corto i3.ytimg.comfunciona en lugar deimg.youtube.comen las URL de ejemplo anteriores.

Alternativamente, puede usar la API de datos de YouTube (v3) para obtener imágenes en miniatura.


4

Método 1:

Puede encontrar toda la información para un video de YouTube con una página JSON que incluso tiene "thumbnail_url", http://www.youtube.com/oembed?format=json&url= {la URL de su video va aquí}

Me gusta URL final look + código de prueba PHP

$data = file_get_contents("https://www.youtube.com/oembed?format=json&url=https://www.youtube.com/watch?v=_7s-6V_0nwA");
$json = json_decode($data);
var_dump($json);

Salida

object(stdClass)[1]
  public 'width' => int 480
  public 'version' => string '1.0' (length=3)
  public 'thumbnail_width' => int 480
  public 'title' => string 'how to reminder in window as display message' (length=44)
  public 'provider_url' => string 'https://www.youtube.com/' (length=24)
  public 'thumbnail_url' => string 'https://i.ytimg.com/vi/_7s-6V_0nwA/hqdefault.jpg' (length=48)
  public 'author_name' => string 'H2 ZONE' (length=7)
  public 'type' => string 'video' (length=5)
  public 'author_url' => string 'https://www.youtube.com/channel/UC9M35YwDs8_PCWXd3qkiNzg' (length=56)
  public 'provider_name' => string 'YouTube' (length=7)
  public 'height' => int 270
  public 'html' => string '<iframe width="480" height="270" src="https://www.youtube.com/embed/_7s-6V_0nwA?feature=oembed" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>' (length=171)
  public 'thumbnail_height' => int 360

Para obtener más información, también puede ver Cómo obtener una miniatura de video de YouTube con id o https://www.youtube.com/watch?v=mXde7q59BI8 video tutorial 1

Método 2:

Usando el enlace de imagen de YouTube, https://img.youtube.com/vi/ "insert-youtube-video-id-here" /default.jpg

Método 3:

Usando el código fuente del navegador para obtener una miniatura usando el enlace URL del video - vaya al código fuente del video y busque thumbnailurl. Ahora puede usar esta URL en su código fuente:

{img src="https://img.youtube.com/vi/"insert-youtube-video-id-here"/default.jpg"}

Para obtener más información, también puede ver Cómo obtener una miniatura de video de YouTube con id o https://www.youtube.com/watch?v=9f6E8MeM6PI video tutorial 2


Enlaces https://www.youtube.com/watch?v=mXde7q59BI8y https://www.youtube.com/watch?v=9f6E8MeM6PIestán (efectivamente) rotos.
Peter Mortensen

youtube prohibió este video debido a sus políticas, espero que este artículo lo ayude www.hzonesp.com/php/get-youtube-video-thumbnail-using-id/
Hassan Saeed

3

Utilizar img.youtube.com/vi/YouTubeID/ImageFormat.jpg

Aquí los formatos de imagen son diferentes como default, hqdefault, maxresdefault.


2

Esta es mi solución que no requiere clave de API solo del lado del cliente.

YouTube.parse('https://www.youtube.com/watch?v=P3DGwyl0mJQ').then(_ => console.log(_))

El código:

import { parseURL, parseQueryString } from './url'
import { getImageSize } from './image'

const PICTURE_SIZE_NAMES = [
    // 1280 x 720.
    // HD aspect ratio.
    'maxresdefault',
    // 629 x 472.
    // non-HD aspect ratio.
    'sddefault',
    // For really old videos not having `maxresdefault`/`sddefault`.
    'hqdefault'
]

// - Supported YouTube URL formats:
//   - http://www.youtube.com/watch?v=My2FRPA3Gf8
//   - http://youtu.be/My2FRPA3Gf8
export default
{
    parse: async function(url)
    {
        // Get video ID.
        let id
        const location = parseURL(url)
        if (location.hostname === 'www.youtube.com') {
            if (location.search) {
                const query = parseQueryString(location.search.slice('/'.length))
                id = query.v
            }
        } else if (location.hostname === 'youtu.be') {
            id = location.pathname.slice('/'.length)
        }

        if (id) {
            return {
                source: {
                    provider: 'YouTube',
                    id
                },
                picture: await this.getPicture(id)
            }
        }
    },

    getPicture: async (id) => {
        for (const sizeName of PICTURE_SIZE_NAMES) {
            try {
                const url = getPictureSizeURL(id, sizeName)
                return {
                    type: 'image/jpeg',
                    sizes: [{
                        url,
                        ...(await getImageSize(url))
                    }]
                }
            } catch (error) {
                console.error(error)
            }
        }
        throw new Error(`No picture found for YouTube video ${id}`)
    },

    getEmbeddedVideoURL(id, options = {}) {
        return `https://www.youtube.com/embed/${id}`
    }
}

const getPictureSizeURL = (id, sizeName) => `https://img.youtube.com/vi/${id}/${sizeName}.jpg`

Utilidad image.js:

// Gets image size.
// Returns a `Promise`.
function getImageSize(url)
{
    return new Promise((resolve, reject) =>
    {
        const image = new Image()
        image.onload = () => resolve({ width: image.width, height: image.height })
        image.onerror = reject
        image.src = url
    })
}

Utilidad url.js:

// Only on client side.
export function parseURL(url)
{
    const link = document.createElement('a')
    link.href = url
    return link
}

export function parseQueryString(queryString)
{
    return queryString.split('&').reduce((query, part) =>
    {
        const [key, value] = part.split('=')
        query[decodeURIComponent(key)] = decodeURIComponent(value)
        return query
    },
    {})
}

1

Aquí hay una función simple que creé para obtener las miniaturas. Es fácil de entender y usar.

$ link es el enlace de YouTube copiado exactamente como está en el navegador, por ejemplo, https://www.youtube.com/watch?v=BQ0mxQXmLsk

function get_youtube_thumb($link){
    $new = str_replace('https://www.youtube.com/watch?v=', '', $link);
    $thumbnail = 'https://img.youtube.com/vi/' . $new . '/0.jpg';
    return $thumbnail;
}

Esto solo funciona cuando la url no tiene otros parámetros de consulta.
Ma Kobi

sí, todos los videos de YouTube siguen el formato mientras se ve, puede copiar el enlace desde el navegador
Sodruldeen Mustapha

¿Qué pasa si tienes otro parámetro como &t=227s?
Ma Kobi

1
Entiendo su punto, pero los videos estándar de YouTube vienen sin otros parámetros, pero cuando surja la necesidad, puede filtrar el enlace antes de la primera línea de la función. ¿Necesita ayuda para filtrar el enlace para asegurarse de que ignora cualquier otra cosa, excepto la necesaria?
Sodruldeen Mustapha

1

Guarde este código en un archivo .php vacío y pruébelo.

<img src="<?php echo youtube_img_src('9bZkp7q19f0', 'high');?>" />
<?php
// Get a YOUTUBE video thumb image's source url for IMG tag "src" attribute:
// $ID = YouYube video ID (string)
// $size = string (default, medium, high or standard)
function youtube_img_src ($ID = null, $size = 'default') {
    switch ($size) {
        case 'medium':
            $size = 'mqdefault';
            break;
        case 'high':
            $size = 'hqdefault';
            break;
        case 'standard':
            $size = 'sddefault';
            break;
        default:
            $size = 'default';
            break;
    }
    if ($ID) {
        return sprintf('https://img.youtube.com/vi/%s/%s.jpg', $ID, $size);
    }
    return 'https://img.youtube.com/vi/ERROR/1.jpg';
}

Gracias.


-2
public const string tubeThumb = "http://i.ytimg.com/vi/[id]/hqdefault.jpg";
vid.Thumbnail = tubeThumb.Replace("[id]", vid.VideoID);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.