使HTML5视频海报的尺寸与视频本身的尺寸相同


93

有谁知道如何调整HTML5视频海报的大小,使其适合视频本身的确切尺寸?

这是显示问题的jsfiddle:http : //jsfiddle.net/zPacg/7/

这是代码:

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

请注意,橙色矩形不会缩放到视频的红色边框。

另外,仅在下面添加CSS也不起作用,因为它会重新调整视频和海报的比例:

video[poster]{
height:100%;
width:100%;
}

1
我认为您不能在属性中使用“%”;但是将其更改为100并不能解决问题。我会打赌它的-webkit媒体风格。随时通过他们来接trac.webkit.org/browser/trunk/Source/WebCore/css/...
阿尔伯特

@albert,谢谢poster,您在发送的链接中看不到任何引用。您能告诉我您所谈论的CSS(即“ -webkit media style”)的外观吗?谢谢
蒂姆·彼得森2012年

嗯,这就是我所说的“挑选”。这些是特定于Chrome的媒体样式;我只是模糊地熟悉它们,更不用说它们所声明的伪选择器了。没有起点:我会去寻找带有填充等的声明
。–阿尔伯特

Answers:


49

您可以将透明的海报图像与CSS背景图像结合使用以实现此目的(示例);但是,要使背景延伸到视频的高度和宽度,则必须使用绝对定位的<img>标记例如)。

也可以在支持的浏览器中将其设置background-size100% 100%示例)。 background-size


更新资料

更好的方法是使用object-fit@Lars Ericsson建议的CSS属性。

object-fit: cover;

如果您不想显示不适合视频长宽比的那些部分,并且

object-fit: fill;

拉伸图像以适合视频的长宽比


-@ user1419007,您的示例重复了背景图片。既然您认为这不是最好的方法,那么您介意提供一个展示如何实现第二种策略的jsfiddle吗?
蒂姆·彼得森2012年

我已经no-repeat编辑了背景图片。至于其他解决方案,请花点时间解决。
user2428118 2012年

编辑:添加了第二个建议解决方案的示例。
user2428118 2012年

谢谢您,我们需要一些JavaScript来更改z-index图像的,以便在您开始播放视频时就可以看到它。
蒂姆·彼得森

2
..第二个示例在chrome中不起作用?您确实需要给外部div一个类似于jsfiddle.net/xh8er的位置;然后就可以了。
commonpike 2014年

87

根据您要定位的浏览器,可以使用object-fit属性来解决此问题:

object-fit: cover;

也许fill就是您要寻找的。仍在考虑IE


3
这绝对是答案。
cilphex

1
+1指向object-fit属性的链接,object-fit: initial对我有用。
FireBrand

“对象适合:填充”成功了!就像“ object-fit:initial”一样(奇怪的是,因为我在developer.mozilla.org/en-US/docs/Web/CSS/object-fit的规范中没有看到“ initial”值)。“ cover”和“ contain”都使海报在android 5.1.1下的Samsung本机浏览器中播放时失真。而且是不会影响IE的!
plugincontainer

1
你们针对对象适配规则指定了哪些CSS选择器?由于无法定位海报图像,因此我假设您使用过video{object-fit: cover;}
zıəsuɐɟəʇs

@zıəsuɐɟəʇs在我的CSS中是... video [poster] {object-fit:fill}
plugincontainer

27

或者,您可以使用简单的preload="none"属性使VIDEO背景可见。您可以background-size: cover;在这里使用。

 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>

2
更好的答案。不会破坏任何内容,并且不预加载视频并不会真的伤害您的页面,除非它是一个以视频为中心的网站。+1。
totallyNotLizards 2015年

1
我在手机上调整了播放中的背景大小。从这里的其他问题/答案(例如stackoverflow.com/questions/18229974/…)看来,问题在于图像的重复(播放器css背景和视频元素海报)。此修复程序有效。
plugincontainer16

1
嗯...在Chrome中工作,但在本机Android浏览器中创建了一个新问题。请参阅:stackoverflow.com/questions/39546792/...
plugincontainer

最终确定-请参见下面的Lars Ericsson答案
-plugincontainer

27

我一直在尝试并尝试所有解决方案,最终我采用的解决方案是Google Chrome浏览器的Inspector的建议。如果将其添加到CSS,它对我有用:

video{
   object-fit: inherit;
}

谢谢!这是我想要消除顶部和底部的视频间隙的确切解决方法
cpcdev

11

我的解决方案结合了user2428118和VeikoJääger的答案,可以进行预加载,但不需要单独的透明图像。我们改用base64编码的1px透明图像。

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

它仅是图像名称还是完整路径?

在我的三星android原生浏览器(该浏览器名为“ Internet”)中,海报的大小已调整……正在灾难性地播放。此解决方案-将透明的gif作为海报,并以“海报”为背景-解决了,但是,..现在,海报不显示在IE-9、10或11中
。– plugincontainer

1
解决的办法是放弃透明的gif和作为背景的海报,而使用(见上面的拉斯·爱立信答案)video [poster] {object-fit:fill}。在Android 5.1.1。下的Samsung本机浏览器上解决的问题 和IE显示海报没有问题
-plugincontainer

这种方法尤其适用于移动设备。object-fit不能防止poster内容仍在加载时在Android上发生的大小错误。
语言学家

5

我想出了这个主意,并且效果很好。好的,基本上,我们希望从显示的第一帧中删除视频,然后将海报的大小调整为视频的实际大小。然后,如果设置尺寸,我们将完成这些任务之一。然后只剩下一个。所以现在,我知道摆脱第一帧的唯一方法是实际定义海报。但是,我们将为该视频提供伪造的视频,这是不存在的。这将导致背景透明的空白显示。即我们父div的背景将可见。

简单易用,但是如果您想将div背景的尺寸调整为视频尺寸,则它可能不适用于所有网络浏览器,因为我的代码使用的是“ 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);
}

那很聪明,我试了一下。它不是完美的,但是到达那里... jsfiddle.net/trpeters1/NJtc9
蒂姆·彼得森

是的,没错。通过查看您的jsfiddle,我现在意识到视频的尺寸也必须正确,而不仅仅是视频元素。我猜我在页面上尝试过时很幸运。
乔纳森·J

5
<video src="videofile.webm" poster="posterimage.jpg" controls preload="metadata">
    Sorry, your browser doesn't support embedded videos.
</video>

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

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

请注意,视频控件位于我们的图片上方,因此我们的图片没有完整显示。如果您使用的是适合对象的封面,请在视觉应用程序上以photoshop的形式编辑图像,并添加底部空白内容。


1

我遇到了类似的问题,只是通过创建与视频具有相同长宽比(16:9)的图像来解决此问题。我的宽度在视频标签上设置为100%,现在图像(320 x 180)非常合适。希望有帮助!


1

您可以在生成拇指后调整图像大小

exec("ffmpeg -i $video_image_dir/out.png -vf scale=320:240 {$video_image_dir}/resize.png",$out2, $return2);

1

您可以使用海报在移动设备(或不支持视频自动播放功能的设备)上显示图像而不是视频。因为移动设备不支持视频自动播放功能。

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

现在,您可以通过媒体查询为移动设备的视频标签内的poster属性设置样式。

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

实际上,iOS 10+通过playsinline属性支持视频自动播放功能。
卢卡斯·彼得

您如何指定该属性?
洪卡·纳粹

0
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

这工作

<video class="video-box" poster="/" controls>
    <source src="some source" type="video/mp4">
</video>

和CSS

.video-box{
 background-image: 'some image';
 background-size: cover;
}

0
  <div class="container">
        <video poster="~/Content/WebSite/img/SiteSetting/Load.gif" autoplay muted loop class="myVideo">
            <source src="~/Content/WebSite/images/VideoTube.mp4" type="video/mp4" />
        </video>

    </div>



 <style>
    .myVideo {
position: absolute;
right: 0;
left: 0;
bottom: 0;
min-width: 100%;
min-height: 100%;
object-fit: inherit;
 }
@media only screen and (max-width:768px) {
.myVideo {
    position: absolute;
    right: 0;
    left: 0;
    bottom: 0;
    max-width: -webkit-fill-available;
    min-height: 100%;
    object-fit: cover;
    }
   }

     @media only screen and (max-width:320px) {
.myVideo {
    position: absolute;
    right: 0;
    left: 0;
    bottom: 0;
    max-width: -webkit-fill-available;
    min-height: 100%;
    object-fit: cover;
  }
}
</style>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.