
WordPressで動画を埋め込んだページをブラウザで表示した際、再生前のビデオ画面が無地(黒地)になるのが気になっていました。 またiPhoneのブラウザで見るとVideo画面が無地(白地)になるのが気になります。
この対策として、poster 属性でサムネイル画像を指定する方法がありますが、動画サイズと同じサムネイルサイズを選ぶ必要があるなど作業が面倒です。 今回は動画の開始時間を指定してその時点の動画フレームをサムネイルとして表示できるショートコード(Post Snippets プラグインを活用)を作成してみました。
さらに、ページ表示速度の改善を目的に、動画が画面に表示されたタイミングで video ファイルの読み込みを開始する jQuery スクリプトも検討しました。
未対策:埋め込み動画
poster 属性でサムネイル画像を指定していない場合の動画を示します。 動画開始前、PCのブラウザではvideo画面が黒地、iPhoneブラウザでは、video画面が白地になっていると思います。
動画先頭の開始時間を指定してサムネイルを表示するには(予備知識)
WordPressは、videoを埋め込む方法が色々あります。 例えば下に示す[video]ショートコードで、簡単にvideoを埋め込むことができます。(詳細はこのリンクをクリック) この[video]ショートコードの場合、動画のcontrol表示がブラウザに依らないで同一になるのが良い所ですが、動画の開始時間を指定出来ません。
shortcode
[ video src="video-source.mp4"]
一方、下で示すオーソドックスな<video>タグで埋め込む場合、videoファイルの最後尾に #t=0.1 を添えると 0.1秒 から動画が開始できる様になることが分かりました。 つまり、0.1秒目 の動画サムネイルが表示されます。 また、#t=0 にすると、今度はposter画像のサムネイルが表示できます。
html <video src="video-source.mp4#t=0.1 " poster="poster.png" controls></video>注記:
videoファイルの最後尾に #t=0.1 を添える方法は、 HTML5の仕様 では実際のところサポートされていない様ですが、下のURLで実例が説明されていました。
https://muffinman.io/blog/hack-for-ios-safari-to-display-html-video-thumbnail/
以上の<video>タグをテキストモードで記述するのは面倒ですので、ここから、ショートコードの作り方を説明しますね。
作成したショートコードの概略仕様
- 動画の開始時間を 0 に指定することでDefaultのPoster属性のサムネイルが表示され、別のPoster画像も指定できる。
- 動画の開始時間を指定してvideoフレーム画面がサムネイルの代わりになる。
- 以上から、ブラウザでvideo再生前のスタンバイ画面が無地になることを防止できます。
- ショートコード名:[video_with_Thumbnail]
「Post Snippets Plugin」を使ったショートコードの作成
Post Snippetsプラグインのインストールや使い方は、「小技・事例集」を参照してください。
Post Snippets(バージョンは3.1.6) 設定画面は以下の通りで、番号を振ったエリアに従って説明します。 (Post Snippets の最新バージョンは4.xになっていますが、一部不具合と使い勝手が悪く3.1.6バージョンを使っています。)

先ず、「Add New Snippet」ボタンを押します。
① エリアのUntitledにショートコードの名称を記入します。 ショートコード名を、video_with_Thumbnail にしました。
② エリアに下のHTMLコードをコピペします。 { } で囲まれた{width}、{url}、{time}、{poster_url} が変数です。 この変数が、ショートコードオプションになります。
|
1 2 3 4 |
<div style="text-align: center;"> <video width="{width}" src="{url}#t={time}" preload="auto" poster="{poster_url}" controls ></video> </div> |
③ Variables(変数)をカンマ区切りで記述し、「 =」の後がデフォルト値になります。 下で示す内容を ③ エリアに記述します。
width=100%,url,time=0.01,poster_url=poster.png
④ エリアにショートコード化するので、レ点を入れます。 ⑤ エリアにはPHPを使っていないので無記入のままです。
⑥ エリアにショートコードの簡単な説明を記載します。(下記は参考です)
wdth:video幅を%またはpx単位の数値で指定、url:videoファイルのパス、time:video開始時間(サムネールの表示)Save ボタンを押して保存すれば、[video_with_Thumbnail] ショートコードの完成です。
完成した[video_with_Thumbnail] ショートコードの使い方
ビジュアルエディタで、Post Snipets ボタンを押して、「video_with_Thumbnail」を選択すると下の様に、ショートコードがエディタに挿入されます。
shortcode
[video_with_Thumbnail width="100%" url="" time="0.01" poster_url="poster.png"]
ショートコードの説明
- widthオプション:動画の幅を%又はピクセル単位で記入
- urlオプション:動画ファイルをフルパスで記入
- timeオプション: 例えば「1」にすると動画の1秒目の動画サムネイルが表示され、「0」にすると、posterで指定された画像が優先されます。
- poster_url:ポスター画像のurlを指定します。
width="100%"、time="0"
デフォルト指定のposter画像が表示されている‼️
width="100%"、time="1"
1秒後の動画タイトルが表示されている‼️
ページ速度改善に向けて(オプションとして)
動画が画面に入ったらvideoファイルのローディングを開始することでページ速度の改善が期待できます。 このため、「inview.js」を使用しました。 必要なければ以下の説明は読み飛ばしてください。
point
1 事前準備
前記②エリアに入れたHTMLコードの preload="autoe" を preload="none" に書き換えておく必要があります。 また、inview.jsは、inview.js (GitHub)を開き、 < > Code ボタンを押して、Download ZIPを選択してダウンロードします。 ZIPファイルを解凍して、サイトのドメイン内に jquery.inview.min.jsファイルをアップロードしておきます。
point
2 下のコードを</body>直前に配置
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<!--inview.jsの読込--> <script src="https://pianoforte32.com/〜/jquery.inview.min.js"></script> <script> //画面にvideoが入ったら動画ロード開始 [video_with_Thumbnail]とリンク jQuery('video').one('inview', function(event, isInView) {//oneで1回だけ実行 onにすると毎回実行 if(isInView) { jQuery(this).attr({ "preload": "auto", // 動画のロード開始 }); } }); </script> |