PC関連 Videoタグ 埋め込み動画の事例
Videoタグ 埋め込み動画の事例
ページの閲覧ありがとうございます。
このページはど素人の Yoshi が BigLobe の無料サイトから配信している【Yoshiの世界】『PC関連』内の Videoタグ 動画埋め込みの実例紹介 のページとなります。
作成に至った理由は私のようなド素人がアチコチをググリながらの作成で時間ばかりが掛かってしまう。一連の流れの中での紹介があったらと思ったからです。
上記サイト CodePen [フルスクリーン HTML5 ページの背景ビデオ]をリスペクトし Yoshi が目的とするビデオ表示に改良しています。
画像の全域を常に保ったままのレシポンシブ化
絵や写真を基にした動画の配信では大切なことだと思っています。
プラグインを使わないことで好みのデザインが可能
ビデオの再生と停止はお好み形状のボタン1つを javascript で制御しています。
Chrome や一部の携帯でも 音源付動画の自動再生が可能
自動再生不可の場合にはメッセージ(Please watch the video)の表示をして、再生のお願いを促すようにしています。そして、動画にはBGMも大切だと思っています。
Yoshiの世界では、JQueryやプラグインは一切使用せず、HTMLとCSS そして、ネイティブな JavaScriput のみで作成しています。 各所にもっと簡潔な方法があると思いますがひとつでも皆様のお役にたてれば幸いです。
ブラウザーの開発ツールを使えば、下手なコメントを含め内容の全てを作成状態で確認できます。
javascripu関連は全て最後部に記述してあります。
事 例 紹 介
★各部の図(fig)はクリックしている間だけ拡大しますよ!
ネットで調べると5メガバイト(MByt)以下、できれば3MByt等の記載がありました。よって容量を抑えるためにフルスクリーンは諦めることにしました(このような内容のページをPC等の大画面のフルスクリーンで閲覧する人は少ないと思います)。
◆ここで使用しているファイルを下に示します。
◆mp4形式とwebm形式の2種類を使っています。
◆30秒 / 幅:1002px × 高さ:564px / mp4:3.42MByt webm:3.46MByt
(上記は音源入りのファイルで、無くせば容量は減らせます)
アフターエフェクトで 中央の光/基本の文字部/無数の星/空の明暗等 を作成しました。
◆完成後に MP4 H264 で基本映像ファイルとして出力しました。
前述の基本映像にAdobe プレミアにて音源の 波の音/鳥の声/下手なギター を載せ、MP4 / WEBM のそれぞれの形式で軽量化を図り書出しました。
◆ ◆ 注意 ◆ ◆
プレミアには、 webm 形式の出力無くプラグインをインストールしました。ググれば簡単に見つかり且つ簡単にインストールできました。但し自己責任でお願いします。
◆ここでの紹介は アドビ プレミア 限定となります。
ファイル出力時は ファイル ⇒ 書出し ⇒ メディア を選択しますね。(参考図 fig-1)
ここでは、 mp4 や WEBM のファイル形式と出力先を都度設定しますね。
ここでの設定はビデオ表示の際の縦横サイズ(アスペクト比)となります。
◆ ◆ 重要 ◆ ◆
サイズの変更時には必ずアスペクト比を合わせることが重要です。違った場合はブラウザーに表示の際おかしなスペースができてしまいます。
目的のファイルの軽量化はこの画面となります。画面は右のスライドバーを下げると出てきますよ。
そして、画質とファイル容量の戦いになります。都度数値を記録しておくことも大切だと思います。お好みに合わせ書き出します。
◆ビデオ形式 (詳細 1-1)
閲覧者側のブラウザーに対応したビデオ形式が使われるように2つを用意しています。
現在は殆どのブラウザーで MP4 で対応できるようですが、 Yoshi 的には、ファイル容量(圧縮を含め)からの画質を見ると WebM が数段勝っていると思っています。 元々Mソフトの勝手なところが大嫌いだからそう思うのかも知れないが?
File 出力画面
fig-1
fig-2
fig-3
fig-4
この節では、html の内容と表示構想についての説明です。
<!--*** ビデオ設定部 表示部ではない *********-->
<video poster="./img/index/dvdsun.jpg" aria-busy="false" id="bgvid" playsinline autoplay loop>
<source src="./img/index/yoshiworld01.webm" type="video/webm">
<source src="./img/index/yoshiworld01.mp4" type="video/mp4">
</video>
<!--****ビデオ表示部***-->
<div id="article-video-area">
<!--****ビデオ表示部内に設置の スタート/ストップボタン部-->
<div class="video-img">
<img src="./img/index/kara2.png" alt="thank you'">
</div>
<div id="video-msgon">
<img src="./img/index/thankyou.png" alt="thankyou watch the video">
</div>
<div id="video-msgoff">
<img src="./img/index/pleasewatchthevideo.png" alt="please watch the video">
</div>
<div id="videonav-btn">
<p>[音楽/ビデオ]再生 ⇒ [Video-Paused]</p>
<button id="videobtn">Video-Paused</button>
<p>下手くそなギターもYoshiの世界のひとつですよ!</p>
</div>
</div>
◆(2~5行) video のタグ指定部で、ビデオの表示方法やビデオファイルの指定を行います。
◆各プロパティ等の詳細は(右列 ビデオ プロパティ 詳細1)を参照してください。
重要 音源付ビデオの自動再生時には Google Chrome等はビデオタグにミュート(muted)が必要ですね。
記入例(2行目後半) ... playsinline autoplay muted loop
しかしここでは muted の指定はしません。Yoshiは動画に音源は非常に重要だと思っています。
◆Javascript で 再生/停止 制御用の ID 属性 bgvid を指定しています。
2行目ではミュートの指定をしていません。ブラウザーにより無効化された場合には、再生ボタンを押すことで再生を可能にしています。
◆(7~23行) 表示部関連となります。
領域確保用の透明画像がこの領域となります。(構想イメージ図 fig2-1)
◆透明画像が10行目の img 属性の kara2.png です。
(1)アスペクト比はビデオと同じ比にしてあります。
(2)ビデオタグ部は後述の css の position: fixed で固定します。
◆イメージを掴むにはメインメニュー下の ビデオ と比較確認してください。
◆レシポンシブ時のビデオ全領域の表示のイメージ図(fig2-2)
◆html は12行から最後の23行間となります。イメージ図(fig2-3)
◆後述の css を適用後、透明画像の中に持ち上げます。イメージ図(fig2-4)
13行と16行のメッセージ画像は後述の Javascript でビデオの 再生/停止 の状態により何れかを表示させ、再生の状態では約5秒間でフェードアウトさせています。
★ poster : ビデオの表示前や表示されなかった時のバックの絵です。
絵のサイズはビデオと同じアスペクト比となっています。
★ aria-busy : 内部的プログラムの処理? 規定値= false としています。
★ playsinline : 映像を「インライン」で再生する指定です。
★ autoplay : 自動再生を有効にする。
★ muted : 音源を無効化する(ここでは未使用です)。
★ loop : 再生の繰り返し指定にしています。
☆ source属性部 3、4行にはビデオファイルのディレクトリーとtype部にビデオ形式のそれぞれを記述しています。
fig2-1
fig2-2
fig2-3
fig2-4
この節では前節の HTML に当てた、 CSS の紹介となります。
◆参考 右列 [ ツリー構造 DOM 全体図 ] [ 各項 詳細/概略図 ]
◆ビデオ要素を最背面に設定し、他の要素をその上に配置しています。こうすることでコンテンツ部をスクロールした際にコンテンツ部がビデオ上面をスライドしながら覆っていくように見えますね。
ちなみに、コンテンツ部の白色のバックグランド部を透明にすれば、ビデオ画面の上を文字や図等がスクロールされるようになりますね。半透明化機能を使ってください。
◆余談 メインメニュー部や右横から展開されるサイドメニュー部はコンテンツ部よりも更に上面にしています。
◆ ◆ 注意※1 ◆ ◆
◆※1 この HTML の最大幅は 1024px となっています。
◆※2 作成したビデオの幅は 1002px でしたね。
以降、要素ごとに重要部を説明していきます。
video {
position: fixed;
max-width: 1024px;
width: 100%;
margin-top: -15px;
z-index: -1;
}
◆ポジションに fixed を指定しでビデオ表示部を移動不可の固定状態にしています。また、 fixed を付けたことで z-index の指定も可能になり -1 を指定し最背面表示にしています。
◆ maz-width と width の指定は前述の注意※1、※2 、の対応です。 width の 100% でビデオを親要素の全幅に表示させます。
◆margin-top の-15px ではビデオを少しでも横長画面に見えるようにメニューの後に重ねています。下側のコンテンツ部も同様に重ねています。
#article-video-area {
margin-top: 0;
z-index: 5;
}
◆以降の全要素を入れるための、親要素です。 z-index に 5 を指定しビデオよりも上面にしています。
[ 余談 ] 空白画像ではなく、ただの空白にするには、高さ指定で算術の calck (vw100 * アスペクト比) でも可能です(ビデオのアスペクト比でレシポンシブする空白部を作れば良いのかな)。
.video-img img {
max-width: 1024px;
width: 100%;
margin: 0 auto;
}
空白画像表示の指定です。
◆max-width と width は、前述の注意※1、※2、の video と同じ対応です。
◆margin: 0 auto で中央表示にしています。
#video-msgon {
width: 251px;
margin: -160px auto 13px;
opacity: 0
;transition: 2s opacity;
}
メッセージ用の png の文字画像の指定部です。画像内容( Thank You !)の文字です。
◆Javascript で制御するために ID 属性としています。
opacit を 0 (透明)に指定。transition : 2s opacity; では、2秒掛けてフェードアウトさせます。ビデオが再生された時に java で3秒間表示後に、このフェードアウトが掛かります。
◆マージンのトップに -160px を指定し前述の空白画像に重ねています。
#video-msgoff {
text-align: center;
margin: -50px auto 0;
transition: 1s opacity;
}
ビデオが停止している時のメッセージ用の png 画像( ThankYou watch the video. )で、前述の( Thank You !)と重ねています。
#videonav-btn {
width: 80%;
margin: 0 auto 15px auto;
background: rgba(0, 0, 0, .5);
border-radius: 5px;
}
属性名の後部に -btn が付いていますが、マット(黒色半透明の敷物)で、以降の文字やボタンの親要素となります。
◆background の rgba (0, 0, 0, .5) では、色と透明度の指定で (赤の出力量, 緑の出力量, 青の出力量, 透過度) でしたね。
◆border-radius の 5px で四隅の角に 5px のR付けをしています。
#videonav-btn p {
font-size: 1rem;
line-height: 1.6rem;
text-align: center;
color: #05a2b3;
margin-top: .1em;
}
前述 videonav-btn の領域内における p 文字 の指定です。
#videonav-btn button {
display: block;
width: 40%;
padding: 0.1rem;
font-size: 1.3rem;
color: #fff;
margin: 0.5rem auto;
background: rgba(255, 255, 255, .2);
border-radius: 3px;
border: thin solid #3b1af4;
cursor: pointer;
transition: .3s background;
}
◆ボタンの要素指定部ですが、 id 属性の videonav-btn 内の 子要素の1つですね。
◆次節で紹介する javascript で、このボタンが押された時の制御も考慮しての内容となっています。
◆transition は、アニメーション指定でこの場合、 background の色を 0.3秒 掛けて変化しなさい の指定でしたね。
#videonav-btn button: hover {
background-color: aquamarine;
}
◆ボタンがホバーした時の指定で、ここではバックグランドカラーを aquamarine 色にします。この時前述のアニメーション指定により、0.3秒のエフェクトが掛かります。
★ ビデオ関連は赤(▼)部となります。
(図 fig3-1)
レイヤー全体イメージ図
(図 fig3-2)
HTMLの幅対応図
★ z-index
z-index を指定するには、positionプロパティでstatic以外の値が指定されている要素部に指定できます。数値が大きいほど手前に見えるようにブラウザーが制御してくれ html の初期値は 0 です。最大値は32ビットの整数と途方もなく大きい値まで指定出来るようです。
指定時の数値は10飛び位で指定しておくと、後で簡単に割り込ませる事が可能ですね。
[ 余談 ] この中でも、ブラウザーは後方に書かれた内容を常に上面(手前)に表示しているようです。
あくまでも概略で詳細は他で調べてください。
★ margin : 要素の外周りの空白を取る。但し、inline 内では上下は効かない。
指定法1 : 上下左右 一括指定
指定法2 : 上下 左右 2個指定
指定法3 : 上 左右 下 3個指定
指定法4 : 上 左 右 下 個別指定
auto は、親要素の端までを自動的に取る、よって右寄や左寄が可能、また対面に使うと中央寄となりますね。
また、プロパティ自体で上下左右を個々に指定できますね margin-top: 等です。
★ padding: 要素内の内側の余白を取る。指定方法は margin とほぼ同じです。
★ max-width: 幅の最大値を指定できます。フレックスの要素に対して指定すると幅を小さく可変することができますね。
★ width: 要素の幅を指定します。単位に%を使うと親要素の幅に対しての割合指定ができます。
★ opacity: 要素の透明度の指定です。0 ~ 10 の指定で値が小さいほど透明になっていきます。
★ transition: アニメーションが完了するまでの時間指定ですね。単位にsを付ければ秒です。*注意*現在の指定状態からホバーや拡大/縮小や移動等のアニメの指定が完結するまでの時間指定です。
指定例 transition: background-color 1.5s linear 0s , width 2s linear 0s; のような指定も可能なようです。
★ text-align: 文字や画像に対して、水平方向の揃え方を指定するプロパティですね。
◆vw : ビューワイド
表示中のブラウザーに対しての幅の割合指定が可能で、100vw で幅が100%の指定になります。
◆vh : ビューハイト
表示中のブラウザーに対しての高の割合指定が可能で、100vh で高さ100%の指定になります。
◆calc : カルク
算術計算をさせるためのコマンドで前述の vw や vh と組合せることが可能です。
指定例1
left: calc((100vw - 1038px) / 2 + 20px);
注意: 算術演算子の左右に半角スペースを入れること。
指定例1の説明
仮定1:メインメニューの巾が1038pxとします。
仮定2:現在開かれているブラウザーの幅が1038pxより大きいと仮定します。
結果:メインメニューの左端から20pxの位置が指定できます。これらをメディアクエリーと組み合わせることで表現の自由度が増しますね。
★使用例
Yoshiの世界のドロワーメニューがメインメニューの幅内に常に収まる仕組みにはこのような計算式を使っています。また、スクロールのボトム時にビデオ画面にキッチリ合わせるためにもこのような計算式を使っています。
◆HTML のビデオタグに autoplay属性 の指定があれば、基本的にはブラウザーにHTMLが呼込まれた時点で自動再生は始まります。但し、以下 *1 の条件となります( 以降の全ての内容は ド素人の Yoshi が勝手に思っていることで、間違っていたら是非ご指摘をくださ)。
基本的には、ビデオタグの属性指定に muted が不可欠で、autoplay と muted の指定がある場合に自動再生が始まります。これはビデオファイルに音源が無くても必要だと思っています。そして、これらはブラウザーを使っての開発段階のみに適応されていると思っています。 作成日 2020/05/25
下のグレーのボックス内が Yoshi が対応している javascript の内容となっています。
以降を適応する場合には、右列の 使用についてのお願い を厳守してください。
◆3行目~6行目 (参照 詳細1)
各変数に javaで操作したい IDやClass を変数に代入し、変数からの処理を可能にする準備段階です。
◆7行目~10行目 (参照 詳細2)
ビデオタグ vid(HTMLのidはbgvid) にリスナーを仕掛け 自動再生中(play)の処理として、ボタン内の文字を Video-Pause に指定( 変更)。メッセージ画像 Pleasewatchthevideo.png を透明にして見えないようにしています。
◆11行目~28行目 (参照 詳細3)
pauseButton のクリックイベントにリスナーを仕掛けています。
ここでの処理は自動再生処理の中に割り込んでいく処理になります。
IF 文の定義で、自動再生が停止中ならば ⇒ 13行目で自動再生を実行させます。
IF に対しての else 23行目で、そうで(自動再生が停止中)なかったなら ⇒ 23行目で自動再生を停止させています。
<!--04/12 ビデオボタン04/12 -->
<script type="text/javascript">
const vid = document.getElementById('bgvid');
const msgon = document.getElementById('video-msgon');
const msgoff = document.getElementById('video-msgoff');
const pauseButton = document.getElementById('videobtn');
vid.addEventListener('play', function() {
pauseButton.innerHTML = 'Video-Pause';
msgoff.style.opacity = '0';
});
pauseButton.addEventListener('click', function() {
if (vid.paused) {
vid.play();
pauseButton.innerHTML = 'Video-Pause';
msgoff.style.opacity = '0';
msgon.style.opacity = '1';
let count = 0;
let countup = function(){
msgon.style.opacity = '0';
}
setTimeout(countup, 3000);
} else {
vid.pause();
pauseButton.innerHTML = 'Video-Paused';
msgon.style.opacity = '0';
msgoff.style.opacity = '1';
}
})
</script>
以上が、ビデオ表示をトップ(メニューの下)に表示させる説明でした。
★ ビデオタグには、CSSで fixde で固定掛ける。
★ ビデオタグには、CSSで z-index で最背面に指定する。
★ ビデオ表示領域には、透明な枠で覆う(コンテンツ部を開く)。この領域が確保されていないとビデオが再生されても気づきませんよ。特に無音のビデオでは再生されていても異常たと思ってしまいますよ。
★ 音量は控えめに
★ 派手な音楽/暴言は控える
★ ビデオの停止方法を明確にする
以上のようなモラルを守って使ってください。不評が多くなるとGooleが完全に再生不可にしていまいますよ!
それはあなたの せい ですよ!
★違っていたらご指摘ください
変数にIDやClassを代入することはこれらのオブジェクトの代入であって、ブラウザーが持っているDomoの参照や変更を可能にします。
ここでは、★getElementById でを使い各変数に代入しています。
★変数の宣言場所
宣言をした以降のスクリプト(下位ルーチンを含める)内で使用が可能になります。また、以降の全ての変数に最優先されます。
★変数 const
変数の内容は変更不可になるが、使用メモリーは少ない。
★変数 let
最もよく使われる変数で書換可能な変数となります。有効範囲はscript間で有効となり名前はユニーク化すること。
★ID の bgvid の play 状態時に addEventListener でリスナーを仕掛けています。
★innerHTML で HTML内の文字列をビデオが停止状態の過去形 [ポーズした] から [ポーズ] に書き換えています。
★style.opacity で CSS の内容を書き換えます。
★17~21行間 16行目にで表示した絵を3000ミリ秒後に消す処理として opacity を0にしています。実際にはここから前述のCSSで設定したトランジションが効き2秒後に透明になり、[ Thank You.png ] の絵が消えます。
★22行 ELSE 以降 ボタン内の文字を[ポーズした]の過去形に書き換え、[ Please watchthe video.png ] の絵を表示させています。この絵はビデオの再生が始まるまでは表示状態を続けますね。
ビデオタグに playsinline autoplay loop の指定があればJavaScriptは無しでも無限ループでの再生は可能だと思っています。
これまでの説明のように、背景として固定してあるビデオや絵はコンテンツ上の何処にでも背景として見せる(開く)ことができますが、何処に開かせるかは前もっての DOM内の(ノード/階層構造/ネスト状態) の考慮が重要となりますね。
下の [半透明化の実行]ボタン を押すと、メインコンテンツ全体とその子要素となる各節のbackground-colorの(白色)を半透明化し、且つ 青線内 が fixed(固定状態)になります。
操作方法は(右列 実行時の使い方)
◆奥側にはビデオ(絵)が見えましたね。これはブラウザーがレイヤー効果を作り出しているからでしたね。
◆画面をスクロール ・ レシポンシブした結果
透明度の違いにより、いろいろの要素が確認できますね。全ての要素はノード(親子関係)を持っています。これらのノードと配置を考慮すればいろいろな表示方法(表現)が可能になりますね。
◆htmlは後で書かれた内容が上面なる
[余談] fixedされて抜け出した場所にスクロールすると上下の文章で階層の違いがあり、後で書かれた文章が上面(手前)になっていますね。☆注意☆これは z-index 指定とは別の話でブラウザーは常にこのように表示します。
トップ以外で見せるにはこれ以降の2ヶ所の見せ方が一般的ですね。これらは何れも トップの空白画像要素 から見ると兄弟要素(同じ階層部)に空白要素を指定しています。
◆直ぐ下の空白は div 要素に hight 400px を指定し空白部としています。
空白の中にある 検証結果関連 の作り方はビデオのボタン作成時と同じ考え方です。ここでは、空白 div の中に書き、最初の要素の padding-top に 255px を指定して上部に大きな空白を作っています。
◆最後の空白部はトップで使った空白画像を再度使っています。
ボトムでビデオ(背景)を気持ちよく終わらせるためには、チョットした工夫が必要で、
使用中のブラウザーの 幅 vw と 高さ vh を算術 calc にて算術式で指定します。レシポンシブの場合には更に、メディアクエリー で幅に合わせた指定を考慮します。以下が算術式作成の参照部となります。
◆[半透明化の実行]ボタン
透明状態と通常表状態の切替が可能なトグルボタンです。ビデオが再生されます。
見たい要素の上でトグルして見てください。
◆[固定解除]ボタン
実行前の状態に戻り、「節背景ビデオの見せ方」:(この節)にスクロールされます。
◆[実行時の使い方]ボタン
ここにスクロールされます。
★ 注意 ★
要素が重なっている場合、各ボタンの操作がし難くなります。スクロールして対応してください。
バグではありません。要素の重なりが確認できるためです。
アップする前(完成時点)でのChromeによる検証結果 (エラー/総合判定)
長々のお付き合い ありがとうございました。
以降全てのジャンプ先は右列サムネイルへ
近くに行ったら寄って見たいお店やチョットした名所の紹介
食事や小物の買い物またチョットした散歩が楽しめるスポットです。地元の(株)都田建設と言うハウスメーカーが運営していてカテゴリーも広く楽しめるお店ですよ!
Aplace:静岡県 浜松市 北区都田町
全国からの旬の食材が集められ販売されている、店内では軽食も取れる。農業機械を全国に製造/販売している静岡製機(株)が運営し、お店で販売される食材は逆ルートの仕入れとなり、高知名度の食材や新鮮な物ばかりですよ!
Aplace:静岡県 袋井市山名町
道の駅としては全国的に有名で何時でも込み合っていますね。ツーリング族にとっては待合や集合場所となっているようで、新車から旧車のグループが次から次へと集まり見ているだけで楽しめますよ!
Aplace:静岡県 掛川市八坂(掛川バイパス東方)
サーフショップです。オリジナルボードの製作では県内で老舗だったと記憶しています。かつてはあのStüssy (ステューシー)の日本総代理店となっていたようで、店内では趣味の良い沢山の商品が見られますよ!
Aplace:静岡県 牧之原市静波
古いバイク(Cub)と気になるシンガーソングライターの紹介
洋楽の紹介サイトです。名盤からマイナー盤も豊富にあり運営者が上手く感想を綴っています。運営者とは Jim-Croce の紹介文で感動し繋がっています。
フリマのHonda関連では有名な堤防さんのブログです。困った時には駆込んで行くYoshiのカブ関連の恩師となります。
吊りカブと云えば誰でも知っているあの人のブログです。やってる事が凄いですね。カブをメンテする際に参考になりますよね。
若くして妖精となられてしまった静岡で活動していたシンガーソングライター 青田ケンイチ さんの残されているブログです。
浜松を拠点にシンガーソングライター活動をしている HIHO(ヒロ)さんのブログです。歌い方・歌声・ギター共に素敵ですよ!
ギターテクニックも素晴らしいが、生き方そのものが正にブルースマンでる濱口裕二さんのファンサイトのフェイスブックです。