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

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?

preguntado el 14 de enero de 10 a las 20:01

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

30 Respuestas

Cada video de YouTube tiene cuatro imágenes generadas. Tienen un formato predecible 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 de la lista es una imagen de tamaño completo y otras son imágenes en miniatura. La imagen en miniatura predeterminada (es decir, una 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 media 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 un poco más corto i3.ytimg.com funciona en lugar de img.youtube.com en las URL de ejemplo anteriores.

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

Respondido 10 Jul 19, 22:07

En caso de que alguien más cometa este tonto error, no puede usar http://www.img.youtube.com, solamente http://img.youtube.com - ciaran phillips

@NickG mqdefault es 16: 9 - tomtastico

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

No se garantiza la existencia de miniaturas de mayor resolución. - salman a

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

Puedes usar 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 API requiere una clave *. Obtenga la clave y cree un videos: lista petición:

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 necesita una clave, es posible que se le solicite información de facturación según la cantidad de solicitudes de API que planea realizar. Sin embargo, pocos millones de solicitudes por día son gratuitas.

Artículo fuente.

respondido 07 nov., 15:11

Para su información: no cambié el código para que se ajuste a la nueva estructura JSON. El código de su getJSON es incorrecto. Usaste jsonc en lugar de json para getJSON. Está fallando debido a su estructura JSON incorrecta. - mauri

Solo el primer ejemplo puede usar jsonc. Los ejemplos de jQuery y PHP DEBE utilizan el 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 está funcionando EN VIVO. así que no digas que no funciona sin leer los cambios. ¡Gracias! - mauri

Los ejemplos de jQuery y PHP DEBEN usar json... ¿puede darnos una referencia? Además, solicitando un número de versión de API específico (v=2) se encarga de los cambios de API. - salman a

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

API v3 está MUY mal documentada. Te dan un código de muestra, pero la sección de "referencia" es muy corta en detalles. Algunas cosas que deberían ser relativamente "obvias" parecen requerir soluciones extremas. - Vaca Efectiva

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

Width | Height | URL
------|--------|----
120   | 90     | https://i.ytimg.com/vi/<VIDEO ID>/1.jpg
120   | 90     | https://i.ytimg.com/vi/<VIDEO ID>/2.jpg
120   | 90     | https://i.ytimg.com/vi/<VIDEO ID>/3.jpg
120   | 90     | https://i.ytimg.com/vi/<VIDEO ID>/default.jpg
320   | 180    | https://i.ytimg.com/vi/<VIDEO ID>/mq1.jpg
320   | 180    | https://i.ytimg.com/vi/<VIDEO ID>/mq2.jpg
320   | 180    | https://i.ytimg.com/vi/<VIDEO ID>/mq3.jpg
320   | 180    | https://i.ytimg.com/vi/<VIDEO ID>/mqdefault.jpg
480   | 360    | https://i.ytimg.com/vi/<VIDEO ID>/0.jpg
480   | 360    | https://i.ytimg.com/vi/<VIDEO ID>/hq1.jpg
480   | 360    | https://i.ytimg.com/vi/<VIDEO ID>/hq2.jpg
480   | 360    | https://i.ytimg.com/vi/<VIDEO ID>/hq3.jpg
480   | 360    | https://i.ytimg.com/vi/<VIDEO ID>/hqdefault.jpg

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

Width | Height | URL
------|--------|----
640   | 480    | https://i.ytimg.com/vi/<VIDEO ID>/sd1.jpg
640   | 480    | https://i.ytimg.com/vi/<VIDEO ID>/sd2.jpg
640   | 480    | https://i.ytimg.com/vi/<VIDEO ID>/sd3.jpg
640   | 480    | https://i.ytimg.com/vi/<VIDEO ID>/sddefault.jpg
1280  | 720    | https://i.ytimg.com/vi/<VIDEO ID>/hq720.jpg
1920  | 1080   | https://i.ytimg.com/vi/<VIDEO ID>/maxresdefault.jpg

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

También puedes utilizar la Generador de información de video de YouTube herramienta para obtener toda la información sobre un video de YouTube mediante el envío de una URL o identificación de video.

Respondido 07 Jul 20, 20:07

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

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

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 conozco ninguno. Y no creo que haya un propósito de publicar algo así desde su punto de vista. - AGMG

La herramienta "Generador de información de video de YouTube" no está funcionando actualmente. Considere editar la respuesta. - giovannipds

En YouTube API V3 también podemos utilizar estas URL para obtener miniaturas ... Se clasifican en función de 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 de la primera respuesta es que los firewalls no bloquean estas URL.

Respondido 02 Feb 14, 11:02

¿Se supone que estas imágenes se colocan en una etiqueta img y deberían funcionar 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 obteniendo un 404? Lion789

@ Lion789 Estas URL funcionan bien cuando se colocan en una etiqueta img ... El problema puede ser una identificación de video incorrecta o la resolución solicitada puede no estar disponible, pero no obtendrá el 404 con estos errores. etiqueta img. - narén

¿Se confirma que las URL seguirán funcionando después de que se detenga la API v2? - daniele b

@DanieleB Estas URL aún funcionan. ¿Sabe cómo comprobar si estas URL funcionarán después de API v2? - narén

Si desea la imagen más grande de YouTube para una identificación de video específica, entonces 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);

Respondido 02 Feb 14, 11:02

Encontré un ejemplo donde 0.jpg tiene una resolución de 480x360, mientras que maxresdefault.jpg tiene 1280x720 - nico haase

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 puedes usar el .webp extensió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 maxresdefault en lugar de mqdefault.

Nota: no estoy seguro de la relación de aspecto si planea usar maxresdefault.

Respondido 10 Jul 19, 22:07

Esto no está disponible para muchos videos. P.ej: i.ytimg.com/vi_webp/mJ8tq8AnNis/mqdefault.webp - NickG

@NickG: funciona si quitas _webp y cambia la extensión a .jpg. Ejemplo de trabajo: i.ytimg.com/vi/mJ8tq8AnNis/mqdefault.jpg , No estoy seguro de la relación de aspecto. - LuTz

Hice una función para buscar solo 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;
}

Respondido 07 Oct 15, 08:10

obtengo esto en el controlador laravel get_headers (): esta función solo se puede usar contra URL - Youssef Boudaya

Puede obtener la Entrada de video que contiene la URL de 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:thumbnail elemento, que contiene la URL de la miniatura.

Respondido el 14 de enero de 10 a las 23:01

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

In API de datos de YouTube v3, puede obtener miniaturas de los videos con la videos-> lista función. De snippet.thumbnails. (clave), puede elegir la miniatura de resolución predeterminada, media o alta y obtener su ancho, alto y URL.

También puede actualizar las miniaturas con el miniaturas-> conjunto funcionalidad

Por ejemplo, puede consultar el Ejemplos de API de YouTube proyecto. (PHP unos.)

Respondido 02 Feb 14, 11:02

Supongo que esta es la forma correcta de hacerlo, ya que proviene de un miembro de relaciones con los desarrolladores de Google para la API de YouTube: Adonis K. Kakoulidis

// 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;

Respondido 02 Feb 14, 11:02

esta es una mala solucion! ¿Por qué no usar la API de Youtube v3? - MPGN

YouTube es propiedad de Google y a Google le gusta tener una cantidad razonable de imágenes para diferentes tamaños de pantalla, por lo que sus imágenes se almacenan en diferentes tamaños. Aquí hay un ejemplo de cómo será su 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

Respondido 10 Jul 19, 22:07

Otra buena alternativa sería utilizar el Modificado 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.

contestado el 27 de mayo de 20 a las 10:05

YouTube Versión de la API 3 en funcionamiento en 2 minutos

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

  1. Obténga una API pública -- Este enlace da una buena dirección

  2. Utilice la siguiente cadena de consulta. La consulta de búsqueda (indicada por q=) en la cadena de URL es stackoverflow por ejemplo, propósitos. Luego, YouTube le enviará una respuesta JSON donde luego podrá analizar la miniatura, el fragmento, el autor, etc.

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

Respondido el 20 de junio de 20 a las 10:06

Uso:

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

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

Pruebe el enfoque anterior y podrá analizar todo desde YouTube API.

contestado el 23 de mayo de 17 a las 13:05

He usado 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.

Respondido 10 Jul 19, 22:07

Solo para agregar / expandir las soluciones dadas, creo que es necesario tener en cuenta que, como yo mismo tuve este problema, uno puede capturar el contenido de varios videos de YouTube, en este caso, miniaturas, con una solicitud HTTP:

Con un cliente de descanso, 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);

?>

Respondido 15 ago 17, 16:08

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 Consola API de Google.
  2. Según la referencia en miniatura de YouTube en el Documentación de la API, debe acceder a los recursos en snippet.thumbnails.
  3. De acuerdo con 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 de API a su respectiva identificación de video y clave de API y su respuesta será una salida JSON que le proporcionará los cuatro enlaces en las miniaturas de la variable de fragmento (si todos están disponibles).

Respondido 10 Jul 19, 23:07

Puede obtener la identificación del video de la URL del video de YouTube usando parse_url ,parse_str y luego insértelo en las URL 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";

Puede utilizar esta herramienta para generar miniaturas de YouTube

https://youtube-thumbnail-tool.com

respondido 27 mar '21, 17:03

Encontré esta ingeniosa herramienta que te permite crear la imagen con el botón de reproducción de YouTube colocado sobre la imagen:

Respondido 09 Feb 16, 18:02

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

  • tu préstamo estudiantil
  • 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;}

Respondido 10 Jul 19, 22:07

Si está utilizando la API pública, la mejor forma de hacerlo es utilizando if Declaraciones.

Si el video es público o no está listado, configura la miniatura usando el método de 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';
    }

Respondido 10 Jul 19, 22:07

Creo que hay muchas respuestas para las miniaturas, pero quiero agregar algunas otras URL para obtener la miniatura 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 media 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

Respondido 10 Jul 19, 23:07

Método 1:

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

Como aspecto de URL final + 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 detalles, también puede ver Cómo obtener una miniatura de video de YouTube usando id or https://www.youtube.com/watch?v=mXde7q59BI8 videotutorial 1

Método 2:

Usando el enlace de la 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 miniaturas 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 detalles, también puede ver Cómo obtener una miniatura de video de YouTube usando id or https://www.youtube.com/watch?v=9f6E8MeM6PI videotutorial 2

contestado el 28 de mayo de 20 a las 12:05

Enlaces https://www.youtube.com/watch?v=mXde7q59BI8 y https://www.youtube.com/watch?v=9f6E8MeM6PI están (efectivamente) rotos. - Pedro 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

El método 1 es simple de implementar: Rajesh Jr.

    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');

Respondido 26 Oct 17, 11:10

YouTube ofrece miniaturas de 2 servidores. Solo necesitas reemplazar con su propia identificación de video de YouTube. En estos días, webP es el mejor formato para la carga rápida de imágenes debido al tamaño pequeño de la imagen.

https://img.youtube.com https://i.ytimg.com

Los ejemplos son con https://i.ytimg.com servidor solo porque es más corto, sin otra razón en particular. Puedes usar ambos.

Miniatura de fondo del reproductor (480x360):

WebP
https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/0.webp

JPG
https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/0.jpg

Miniaturas de fotogramas de vídeo (120 x 90)

WebP:
Start: https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/1.webp
Middle: https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/2.webp
End: https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/3.webp

JPG:
Start: https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/1.jpg
Middle: https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/2.jpg
End: https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/3.jpg

Miniatura de menor calidad (120 x 90)

WebP
https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/default.webp

JPG
https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/default.jpg

Miniatura de calidad media (320 x 180)

WebP
https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/mqdefault.webp

JPG
https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/mqdefault.jpg

Miniatura de alta calidad (480x360)

WebP
https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/hqdefault.webp

JPG
https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/hqdefault.jpg

Miniatura de calidad estándar (640x480)

WebP
https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/sddefault.webp

JPG
https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/sddefault.jpg

Resolución de miniaturas sin escala

WebP
https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/maxresdefault.webp

JPG
https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/maxresdefault.jpg

Respondido el 14 de Septiembre de 20 a las 18:09

aquí está la respuesta principal optimizado para uso manual. El token de identificación de video sin separadores permite seleccionar con un doble clic.

Cada video de YouTube tiene cuatro imágenes generadas. Tienen un formato predecible 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 de la lista es una imagen de tamaño completo y otras son imágenes en miniatura. La imagen en miniatura predeterminada (es decir, una de 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 media 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 un poco más corto i3.ytimg.com funciona en lugar de img.youtube.com en las URL de ejemplo anteriores.

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

Respondido 24 Feb 20, 02:02

Esta es mi solución solo del lado del cliente sin clave de API requerida.

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
    },
    {})
}

Respondido el 23 de Septiembre de 18 a las 16:09

Utilice la herramienta img.youtube.com/vi/YouTubeID/ImageFormat.jpg

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

Respondido 10 Jul 19, 23:07

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

$ 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;
}

Respondido 10 Jul 19, 23:07

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 miran, puede copiar el enlace desde el navegador - Sodruldeen Mustafá

¿Qué pasa si tienes otro parámetro como &t=227s? - ma kobi

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 ignore todo lo demás excepto lo necesario? - Sodruldeen Mustafá

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.

Respondido 28 Jul 19, 14:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.