Faire HTML5 vidéo affiche être même taille que la vidéo elle-même

Est-ce que quelqu'un sait comment redimensionner l'affiche vidéo HTML5 de manière à ce qu'elle corresponde aux dimensions exactes de la vidéo elle-même?

Voici un jsfiddle qui montre le problème: http://jsfiddle.net/zPacg/7/

Voici ce code:

HTML:

<video controls width="100%" height="100%"  poster="http://www.wpclipart.com/blanks/buttons/glossy_buttons/glossy_button_blank_orange_rectangle.png">
  <source src="http://demo.inwebson.com/html5-video/iceage4.mp4" type="video/mp4" />
  <source src="http://demo.inwebson.com/html5-video/iceage4.ogg" type="video/ogg" />
  <source src="http://demo.inwebson.com/html5-video/iceage4.webm" type="video/webm" />
</video>​

CSS:

video{
border:1px solid red;
}​

Notez que le rectangle orange ne s'adapte pas à la bordure rouge de la vidéo.

En outre, il suffit d'ajouter le CSS ci-dessous ne fonctionne pas non plus car il redimensionne la vidéo avec le affiche:

video[poster]{
height:100%;
width:100%;
}
63
demandé sur tim peterson 2012-05-31 06:39:32

11 réponses

Vous pouvez utiliser une image d'affiche transparente en combinaison avec une image D'arrière-plan CSS pour y parvenir (Exemple); cependant, pour avoir un arrière-plan étiré à la hauteur et à la largeur d'une vidéo, vous devrez utiliser une balise <img> absolument positionnée (exemple ).

, Il est également possible de set background-size pour 100% 100% dans navigateurs qui prennent en charge background-size (exemple).

32
répondu user2428118 2014-08-30 20:13:47

Selon les navigateurs que vous ciblez, vous pouvez utiliser la propriété object-fit pour résoudre ce problème:

object-fit: cover;

Ou peut-être fill est ce que vous cherchez. Toujours à l'étude pour IE .

58
répondu Lars Ericsson 2015-06-25 07:43:05

Ou vous pouvez simplement utiliser l'attribut preload="none" pour rendre l'arrière-plan vidéo visible. Et vous pouvez utiliser background-size: cover; ici.

 video {
   background: transparent url('video-image.jpg') 50% 50% / cover no-repeat ;
 }

 <video preload="none" controls>
   <source src="movie.mp4" type="video/mp4">
   <source src="movie.ogg" type="video/ogg">
 </video>
24
répondu Veiko Jääger 2015-03-13 14:35:33

Je jouais avec cela et j'ai essayé toutes les solutions, finalement la solution avec laquelle je suis allé était une suggestion de L'inspecteur de Google Chrome. Si vous ajoutez ceci à votre CSS cela a fonctionné pour moi:

video{
   object-fit: inherit;
}
15
répondu patrick 2015-11-20 03:56:29

Ma solution combine les réponses de user2428118 et Veiko Jääger, permettant un préchargement mais sans nécessiter une image transparente séparée. Nous utilisons une image transparente 1px codée en base64 à la place.

<style type="text/css" >
    video{
        background: transparent url("poster.jpg") 50% 50% / cover no-repeat ;
    }
</style>
<video controls poster="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" >
    <source src="movie.mp4" type="video/mp4">
    <source src="movie.ogg" type="video/ogg">
</video>
6
répondu Jamie G 2016-03-16 12:04:41

J'ai eu cette idée et cela fonctionne parfaitement. Ok, donc, fondamentalement, nous voulons nous débarrasser des vidéos de la première frame de l'écran, puis redimensionner l'affiche pour les vidéos de la taille réelle. Si nous définissons ensuite les dimensions, nous avons terminé l'une de ces tâches. Ensuite, il ne reste qu'un. Alors maintenant, la seule façon de me débarrasser de la première image est de définir une affiche. Cependant, nous allons donner à la vidéo un faux, un qui n'existe pas. Cela se traduira par un affichage vide avec le arrière-plan transparent. C'est-à-dire que l'arrière-plan de notre div parent sera visible.

Simple à utiliser, mais il peut ne pas fonctionner avec tous les navigateurs web si vous voulez redimensionner la dimension de l'arrière-plan de la div à la dimension de la vidéo puisque mon code utilise "background-size".

HTML / HTML5:

<div class="video_poster">
    <video poster="dasdsadsakaslmklda.jpg" controls>
        <source src="videos/myvideo.mp4" type="video/mp4">
        Your browser does not support the video tag.
    </video>
<div>

CSS:

video{
    width:694px;
    height:390px;
}
.video_poster{
    width:694px;
    height:390px;
    background-size:694px 390px;
    background-image:url(images/myvideo_poster.jpg);
}
5
répondu Jonathan J 2013-03-15 00:09:34

Vous pouvez utiliser poster pour afficher l'image au lieu de la vidéo sur un appareil mobile(ou des appareils qui ne prennent pas en charge la fonctionnalité de lecture automatique de la vidéo). Parce que les appareils mobiles ne prennent pas en charge la fonctionnalité de lecture automatique vidéo.

<div id="wrap_video">
<video preload="preload" id="Video" autoplay="autoplay" loop="loop" poster="default.jpg">
<source src="Videos.mp4" type="video/mp4">
Your browser does not support the <code>video</code> tag.
</video>
</div>

Maintenant, vous pouvez simplement Styler l'attribut poster qui se trouve dans la balise vidéo pour appareil mobile via media-query.

#wrap_video
{
width:480px;
height:360px;
position: relative;
} 
@media (min-width:360px) and (max-width:780px)
{
video[poster]
{
top:0 !important;
left:0 !important;
width:480px !important;
height:360px !important;
position: absolute !important;
}
}
1
répondu gopal sharma 2016-11-04 11:13:36

J'ai eu un problème similaire et je l'ai juste corrigé en créant une image avec le même rapport d'aspect que ma vidéo (16: 9). Ma largeur est définie à 100% Sur la balise vidéo et maintenant l'image (320 x 180) s'adapte parfaitement. Espérons que ça aide!

0
répondu deebs 2014-05-16 17:14:48

Vous pouvez redimensionner la taille de l'image après avoir généré thumb

exec("ffmpeg -i $video_image_dir/out.png -vf scale=320:240 {$video_image_dir}/resize.png",$out2, $return2);
0
répondu Motilal Soni 2015-05-26 10:00:59
height:500px;
min-width:100%;
-webkit-background-size: 100% 100%;
-moz-background-size: 100% 100%;
-o-background-size: 100% 100%;
background-size:100% 100%;
object-fit:cover;

-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size:cover;
0
répondu Irinachen 2016-12-24 05:57:43
<video src="videofile.webm" poster="posterimage.jpg" controls preload="metadata">
    Sorry, your browser doesn't support embedded videos.
</video>

Couvrir

video{
   object-fit: cover; /*to cover all the box*/
}

Remplir

video{
   object-fit: fill; /*to add black content at top and bottom*/
   object-position: 0 -14px; /* to center our image*/
}

Notez que les contrôles vidéo sont sur notre image , donc notre image n'est pas complètement montrée. Si vous utilisez object-fit cover, modifiez votre image sur une application visuelle en tant que photoshop et ajoutez un contenu de fond de marge.

0
répondu Daniel Eduardo Delgado Diaz 2017-11-17 20:34:46