たとえば、私はリンクを持っています
http://img.youtube.com/vi/aOPGepdbfpo/0.jpg
YouTube ビデオのサムネイルの場合:
そして、黒い上下の境界線を削除したいので、次のような写真が得られます。
PHP 関数 javascript/jQuery または youtube API 自体を使用して実行できますか?
たとえば、私はリンクを持っています
http://img.youtube.com/vi/aOPGepdbfpo/0.jpg
YouTube ビデオのサムネイルの場合:
そして、黒い上下の境界線を削除したいので、次のような写真が得られます。
PHP 関数 javascript/jQuery または youtube API 自体を使用して実行できますか?
YouTube では、4:3 の比率の黒い帯がない画像を提供しています。黒い帯のない 16:9 のビデオ サムネイルを取得するには、次のいずれかを試してください。
http://img.youtube.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg
http://img.youtube.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg
最初のものmqdefault
は 320x180 ピクセルの画像です。
2 つ目maxresdefault
は 1500x900 ピクセルの画像なので、サムネイルとして使用するにはサイズを変更する必要があります。これは素晴らしい画像ですが、常に利用できるわけではありません。ビデオの品質が低い場合 (720p 未満だと思いますが、正確にはわかりません)、この「maxresdefault」は使用できなくなります。だから絶対に頼らない。
背景画像として使用し、中央に配置して高さを変更します。
http://dabblet.com/gist/4012604
.youtubePreview {
background:url('http://img.youtube.com/vi/aOPGepdbfpo/0.jpg') center no-repeat;
height:204px;
width:480px;
}
柔軟な幅が必要な場合は、これを使用します。
HTML
<div class="thumb">
<img src="...">
</div>
CSS
.thumb {
overflow: hidden;
}
.thumb img {
margin: -10% 0;
width: 100%;
}
ユーチューブのやり方。画像の URL には多くのパラメーターがあります。
https://i.ytimg.com/vi/XkOpbLBzPsY/hqdefault.jpg?custom=true&w=196&h=110&stc=true&jpg444=true&jpgq=90&sp=68&sigh=Gv-oyTIgA39e7UG01pZ2RiGbwSo
これは同様の質問に対する回答ですが、問題を完全に解決します。ビデオから表示したくないものをすべてラッパー div で切り取るだけです。これは html と css で行われます。
この問題を解決するためにネットをしばらく検索した後、何も思いつきませんでした。すべてを試してみましたが、何も問題を解決できなかったと思います。次に、ロジックに基づいて、埋め込まれた YouTube ビデオの iframe を 1 つの div セットにラップしました。この div に追加し、高さを iframe の高さよりも 2 ピクセル小さくしました (私のビデオでは、下部に黒い境界線がありました)。したがって、ラッパー div は iframe よりも小さく、ビデオの上に配置すると、不要な黒い境界線を非表示にできます。これは、これまでに試したすべての中で最良のソリューションだと思います。
以下のこの例から、iframe だけを埋め込んでみると、下部に小さな黒い境界線が表示されます。また、div で iframe をラップすると、境界線がなくなります。これは、div が iframe に重なっており、ビデオよりも小さいためです。オーバーフローがあります: 非表示なので、div ディメンションの外にあるものはすべて非表示になります。
<div id="video_cont" style="width: 560px;
height: 313px;
overflow: hidden;">
<iframe id="the-video" class="extplayer" width="560" height="315" src="https://www.youtube.com/embed/EErx017kDHQ?&autoplay=0&rel=0&fs=0&showinfo=0&controls=0&hd=1&wmode=transparent&version=2;yt:quality=high;" frameborder="0" allowfullscreen></iframe>
</div>
私の場合、境界線の高さは約 2px だったので、境界線を非表示にするためにラッパー div の高さを 2px 小さくしました。シナリオでは、境界線がビデオの上部または側面にあり、および/または異なる寸法である場合、ラッパー div のさまざまな寸法を作成し、適切な位置に配置する必要があります。これにより、境界線があり、overflow:hidden; でビデオと重なるようになります。境界線が隠されています。
これが役立つことを願っています。
レスポンシブな方法が必要だったので、このコードがwindow.addEventListener("resize");
基本的には 4:3 の比率を 16:9 に変換したい
<div id="video-item">
<img src="https://i.ytimg.com/vi/{videoId}/hqdefault.jpg" />
</div>
const videoItem = document.getElementById("video-item");
const img = videoItem.querySelector("img");
resize()
{
img.style.top = `${-(img.offsetHeight - (img.offsetWidth * 9 / 16)) / 2}px`;
videoItem.style.height = `${9 / 16 * videoItem.offsetWidth}px`;
}
#video-item
{
position: relative;
overflow: hidden;
}
#video-item img
{
width: 100%;
position: absolute;
}
ところで、画像の計算された高さにフォールバックすることもできます(画像が完全にロードされていない場合)
img.style.top = `${-((img.offsetHeight || (3 / 4 * img.offsetWidth)) - (img.offsetWidth * 9 / 16)) / 2}px`;