<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>YouTube &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/youtube/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Mon, 27 Jul 2015 07:44:32 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Youtube IFrame API を使って遊んでみよう</title>
		<link>https://blog.mach3.jp/2015/07/27/youtube-iframe-api.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 27 Jul 2015 07:44:32 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[YouTube]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=4094</guid>

					<description><![CDATA[Webページで動画を活用したコンテンツもかなり増えてきた昨今ですが、如何お過ごしでしょうか。 今回はYoutubeの動画をJavaScriptで操作する Youtube IFrame API を使って色々遊んでみましょう [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Webページで動画を活用したコンテンツもかなり増えてきた昨今ですが、如何お過ごしでしょうか。 今回はYoutubeの動画をJavaScriptで操作する Youtube IFrame API を使って色々遊んでみましょう。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-tY3hAtMis80/VdLp0b9LA5I/AAAAAAAAC9g/3c1afy9i_60/s400-Ic42/2015-0727-00.png" alt="Youtube IFrame API を使ってみよう"/></figure>



<p></p>



<span id="more-4094"></span>



<ol class="wp-block-list">
<li>Youtube IFrame API とは</li>



<li>基本的な使い方</li>



<li>動的にスクリプトをロードする</li>



<li>見た目・挙動・イベントを設定する</li>



<li>動画再生のイベントトラッキング</li>



<li>動画の再生の任意のタイミングでアクションを起こす</li>



<li>埋め込みプレイヤーでAPIを利用可能にする</li>



<li>まとめ</li>
</ol>



<h2 class="wp-block-heading">Youtube IFrame API とは</h2>



<ul class="wp-block-list">
<li><a href="https://developers.google.com/youtube/iframe_api_reference">iframe 組み込みの YouTube Player API リファレンス | YouTube IFrame API | Google Developers</a></li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>IFrame Player API を使うと、YouTube 動画プレーヤーをウェブサイトに埋め込み、JavaScript でプレーヤーを制御できます。</p>
</blockquote>



<p>Youtube の埋め込み動画プレーヤーは <strong>iframe</strong> 要素でパブリッシュされますが、 それを動的に生成したり、プレーヤーの再生等を操作したり、イベントを検知して何かアクションを起こしたりする事が出来ます。 動画を軸にしたコンテンツ作りに大活躍しそうですね。</p>



<h2 class="wp-block-heading">基本的な使い方</h2>



<p>プレーヤーの生成は <strong>YT.Player</strong> というクラスを利用して行います。 引数にはプレイヤーを表示する為のコンテナ要素と、オプションを渡します。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"movie"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="actionscript">
<span class="hljs-keyword">var</span> onYouTubeIframeAPIReady = <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">()</span></span>{
    <span class="hljs-keyword">var</span> player = <span class="hljs-keyword">new</span> YT.Player(<span class="hljs-string">"movie"</span>, {
        videoId: <span class="hljs-string">"c5kmKO_gGsc"</span>,
        width: <span class="hljs-number">1600</span>,
        height: <span class="hljs-number">900</span>
    });
};
</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p><strong>onYouTubeIframeAPIReady</strong> という関数は、APIのJavaScriptの準備が完了した段階で自動でコールされます。 そして、APIのJavaScript本体を読み込みましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"//www.youtube.com/iframe_api"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>これで <strong>#movie</strong> 要素内にプレーヤーが生成されます。とても簡単ですね。</p>



<p>ここでは第一引数に要素のid名を渡していますが、HTMLElementその物でも構いません。 なんでしたら、新たに生成した空要素でもよいでしょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">new</span> YT.Player(<span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">"movie"</span>), {...});
<span class="hljs-keyword">new</span> YT.Player(<span class="hljs-built_in">document</span>.createElement(<span class="hljs-string">"div"</span>), {...});
</code></span></pre>


<h2 class="wp-block-heading">動的にスクリプトをロードする</h2>



<p><strong>onYouTubeIframeAPIReady</strong> は、スクリプトのロードが完了された時に一度しか実行されません。 つまり既にスクリプトが読み込まれて初期化された状態で onYouTubeIframeAPIReady を設定したとしても、 その処理は行われずに何も起こらない事になります。</p>



<p>そこで、「既にロードされている場合は即時実行、まだの場合はスクリプトを読み込んでから実行」という処理を関数にまとめてみます。 （jQuery使用）</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$.youtubeReady = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">callback</span>)</span>{
    <span class="hljs-keyword">var</span> EVENT_READY = <span class="hljs-string">"youtubeready"</span>;

    <span class="hljs-keyword">if</span>(<span class="hljs-built_in">window</span>.YT &amp;&amp; <span class="hljs-built_in">window</span>.YT.Player){
        <span class="hljs-keyword">return</span> callback();
    }
    $(<span class="hljs-built_in">window</span>).on(EVENT_READY, callback);
    <span class="hljs-built_in">window</span>.onYouTubeIframeAPIReady = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        $(<span class="hljs-keyword">this</span>).trigger(EVENT_READY);
        <span class="hljs-built_in">window</span>.onYouTubeIframeAPIReady = <span class="hljs-keyword">void</span> <span class="hljs-number">0</span>;
    };
    $(<span class="hljs-string">"&lt;script&gt;"</span>, {<span class="hljs-attr">src</span>: <span class="hljs-string">"//www.youtube.com/iframe_api"</span>}).appendTo(<span class="hljs-string">"body"</span>);
};
</code></span></pre>


<p>$.youtubeReady には実行したいコールバック関数を渡します。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$.youtubeReady(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-keyword">var</span> player = <span class="hljs-keyword">new</span> YT.Player(...});
});
</code></span></pre>


<h2 class="wp-block-heading">見た目・挙動・イベントを設定する</h2>



<p>オプションの <strong>playerVars</strong> プロパティでプレーヤーの見た目・挙動を、 また同じく <strong>events</strong> プロパティでイベントハンドラの設定をする事が出来ます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> player = <span class="hljs-keyword">new</span> YT.Player(<span class="hljs-string">"movie"</span>, {
    <span class="hljs-attr">videoId</span>: <span class="hljs-string">"c5kmKO_gGsc"</span>,
    <span class="hljs-attr">width</span>: <span class="hljs-number">1600</span>,
    <span class="hljs-attr">height</span>: <span class="hljs-number">900</span>,
    <span class="hljs-attr">playerVars</span>: {
        <span class="hljs-attr">autoplay</span>: <span class="hljs-number">1</span>, <span class="hljs-comment">// 自動再生する・しない</span>
        <span class="hljs-attr">controls</span>: <span class="hljs-number">0</span>, <span class="hljs-comment">// コントロールを表示する・しない</span>
        <span class="hljs-attr">showinfo</span>: <span class="hljs-number">0</span>, <span class="hljs-comment">// 動画の情報テキストを表示する・しない</span>
        <span class="hljs-attr">theme</span>: <span class="hljs-string">"light"</span> <span class="hljs-comment">// テーマの選択（dark|light）</span>
    },
    <span class="hljs-attr">events</span>: {
        <span class="hljs-attr">onReady</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
            <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"--APIの準備が整いました--"</span>);
        }
        <span class="hljs-attr">onStateChange</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
            <span class="hljs-keyword">if</span>(e.data === YT.PlayerState.PLAYING){
                <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"--再生中--"</span>);
            }
        }
    }
});
</code></span></pre>


<p>playerVars では非常に細かい設定が可能です。 詳しくは<a href="https://developers.google.com/youtube/player_parameters?playerVersion=HTML5#Parameters">公式のドキュメント</a>でお探しください。</p>



<p>YT.Player で動画を操作する為には、APIの準備を待たなければなりません。 初期化時に動画を操作するためのアクションは <strong>onReady</strong> 内に書くと良いでしょう。</p>



<h2 class="wp-block-heading">動画再生のイベントトラッキング</h2>



<p>このAPIを調べるきっかけになったテーマなのですが、 例えばユーザーがプレイヤーをクリックしてビデオを再生した時に、Google Analyticsにイベントを一度だけ送信したい場合。</p>



<p>onStateChange イベントを利用する事で実現できますが、 再生中何度もPLAYING（再生中）ステートに切り替わる可能性がありますので、 一度イベントを送信したらその処理を無効化する必要があります。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> playerTrackEvent = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-comment">// 一度だけトラッキングイベントを送信</span>
    <span class="hljs-keyword">if</span>(ga){
        ga(<span class="hljs-string">"send"</span>, <span class="hljs-string">"event"</span>, <span class="hljs-string">"video"</span>, <span class="hljs-string">"play"</span>, <span class="hljs-string">"My Video"</span>);
        playerTrackEvent = <span class="hljs-literal">undefined</span>;
    }
};

<span class="hljs-keyword">var</span> player = <span class="hljs-keyword">new</span> YT.Player(<span class="hljs-string">"movie"</span>, {
    ...
    events: {
        <span class="hljs-attr">onStateChange</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
            <span class="hljs-keyword">if</span>(e.data === YT.PlayerState.PLAYING &amp;&amp; playerTrackEvent){
                playerTrackEvent();
            }
        }
    }
});
</code></span></pre>


<h2 class="wp-block-heading">動画再生の任意のタイミングでアクションを起こす</h2>



<p>例えば「再生時間1:00のタイミングで背景を暗転させたい」など、動画の再生の経過時間をトリガーにしてアクションを起こしたい場合は、 イベントを活用したい所ではありますが、events には <strong>onProgress</strong> のような物は用意されていません。 その為、監視する関数を自前で書く必要があります。</p>



<p>（もっともそのような物を常に発火させていたらコスト的にもよろしくないでしょう）</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-comment">// 再生時間が1:00を超えたらページ背景を黒くする</span>
<span class="hljs-keyword">var</span> player, timer, playerProgress;

playerProgress = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    clearTimeout(timer);
    <span class="hljs-keyword">if</span>(
        player.getPlayerState() === YT.PlayerState.PLAYING
        &amp;&amp; player.getCurrentTime() &gt; <span class="hljs-number">60</span>
    ){
        $(<span class="hljs-string">"body"</span>).css(<span class="hljs-string">"background-color"</span>, <span class="hljs-string">"#000"</span>);
        <span class="hljs-keyword">return</span>;
    }
    timer = setTimeout(playerProgress, <span class="hljs-number">100</span>);
};

player = <span class="hljs-keyword">new</span> YT.Player(<span class="hljs-string">"movie"</span>, {
    ...
    events: {
        <span class="hljs-attr">onReady</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
            playerProgress();
        }
    }
});
</code></span></pre>


<p>多用するのはあまり良くなさそうですが、 動画の再生にあわせてページに演出効果を加えたりするなど、ちょっと面白そうですね。</p>



<h2 class="wp-block-heading">埋め込みプレーヤーでAPIを利用可能にする</h2>



<p>Youtube のビデオ再生画面で取得できる「埋め込みコード」による埋込プレーヤーでも、APIが利用可能です。 つまりHTMLに埋め込みコードの <strong>iframe</strong> を直書きして、それを元にインスタンスを生成して操作する事が出来ます。</p>



<p>下の例では、準備が完了した時点でプレーヤーをフェードインさせてみます。</p>



<h3 class="wp-block-heading">HTML/CSS</h3>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">style</span>&gt;</span><span class="css">
<span class="hljs-selector-id">#movie</span> {
    <span class="hljs-attribute">transition</span>: opacity <span class="hljs-number">1s</span> ease <span class="hljs-number">0s</span>;
    <span class="hljs-attribute">opacity</span>: <span class="hljs-number">0</span>;
}
<span class="hljs-selector-id">#movie</span><span class="hljs-selector-class">.show</span> {
    <span class="hljs-attribute">opacity</span>: <span class="hljs-number">1</span>;
}
</span><span class="hljs-tag">&lt;/<span class="hljs-name">style</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">iframe</span>
    <span class="hljs-attr">width</span>=<span class="hljs-string">"320"</span>
    <span class="hljs-attr">height</span>=<span class="hljs-string">"180"</span>
    <span class="hljs-attr">id</span>=<span class="hljs-string">"movie"</span>
    <span class="hljs-attr">src</span>=<span class="hljs-string">"https://www.youtube.com/embed/c5kmKO_gGsc?rel=0<span class="hljs-symbol">&amp;amp;</span>controls=0<span class="hljs-symbol">&amp;amp;</span>showinfo=0<span class="hljs-symbol">&amp;amp;</span>enablejsapi=1"</span>
    <span class="hljs-attr">frameborder</span>=<span class="hljs-string">"0"</span>
    <span class="hljs-attr">allowfullscreen</span>
&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">iframe</span>&gt;</span>
</code></span></pre>


<h3 class="wp-block-heading">JavaScript</h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> player = YT.Player(<span class="hljs-string">"movie"</span>, {
    <span class="hljs-attr">events</span>: {
        <span class="hljs-attr">onReady</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
            $(e.target).addClass(<span class="hljs-string">"show"</span>);
        }
    }
});
</code></span></pre>


<p>埋め込みプレーヤーのURLに <strong>enablejsapi=1</strong> のパラメータを付加しなければならない点に注意しましょう。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>動画の活用は負荷もそれなりなので使い所は考えなければなりませんが、 訴求力を高めるには中々良い手段なので、上手に活用していきたいですね。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CYRIAK氏による愉快な映像達</title>
		<link>https://blog.mach3.jp/2010/08/08/animations-by-cyriak.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Sun, 08 Aug 2010 22:49:00 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[CG]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[YouTube]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/08/08/cyriak%e6%b0%8f%e3%81%ab%e3%82%88%e3%82%8b%e6%84%89%e5%bf%ab%e3%81%aa%e6%98%a0%e5%83%8f%e9%81%94.html</guid>

					<description><![CDATA[先日出会った素敵な映像。 UKのフリーランスアニメーターのCyriak氏のアニメーションがすごく愉快だったのでご紹介。 一番はじめに目についたアニメーションがコレです。 アップテンポな音楽に乗せてキュートなテディベアがト [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>先日出会った素敵な映像。<br />
UKのフリーランスアニメーターのCyriak氏のアニメーションがすごく愉快だったのでご紹介。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TF61jY0_Q8I/AAAAAAAABAA/9dnUdhigSkY/s800/201008082237.png" alt="Cyriak"/></figure>



<p></p>



<span id="more-2252"></span>



<p>一番はじめに目についたアニメーションがコレです。</p>



<p><object width="598" height="361"><param name="movie" value="http://www.youtube.com/v/-0Xa4bHcJu8?fs=1&amp;hl=ja_JP"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/-0Xa4bHcJu8?fs=1&amp;hl=ja_JP" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="598" height="361"></object></p>



<p>アップテンポな音楽に乗せてキュートなテディベアがトコトコ歩いていると思ったら…<br />
あれよあれよと展開していく、実に飽きの来ないアニメーションです。<br />
大変シュール。</p>



<p><object width="598" height="361"><param name="movie" value="http://www.youtube.com/v/FavUpD_IjVY?fs=1&amp;hl=ja_JP"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/FavUpD_IjVY?fs=1&amp;hl=ja_JP" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="598" height="361"></object></p>



<p>横スクロールで牛がどんどん変化していく不思議なアニメーションも。<br />
BGMはずっと聴いてると情緒不安定に陥りそうな雰囲気。</p>



<p>良いセンスしてますね…。<br />
他にも色々ビデオを公開しているので、チェックしておきたいです。</p>



<p><a href="http://www.youtube.com/user/cyriak">YouTube &#8211; ‪cyriak さんのチャンネル‬‎</a><br />
<a href="http://www.cyriak.co.uk/">Cyriak</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Photoshop CS5の新機能「Content-Aware Fill」がすごそうだ</title>
		<link>https://blog.mach3.jp/2010/03/28/photoshop-content-aware-fill.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Sun, 28 Mar 2010 07:14:00 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Photoshop]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[YouTube]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/03/28/photoshop-cs5%e3%81%ae%e6%96%b0%e6%a9%9f%e8%83%bd%e3%80%8ccontent-aware-fill%e3%80%8d%e3%81%8c%e3%81%99%e3%81%94%e3%81%9d%e3%81%86%e3%81%a0.html</guid>

					<description><![CDATA[先日CS5の発表予告がされましたが、 Photoshop CS5の新機能「Content-Aware Fill」のデモ動画がYouTubeで公開されています。 ちょっとすごいですよ、これ。 ただのゴミ取り作業かと思いきや [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="/2010/03/adobe-cs5-4-12.html">先日CS5の発表予告がされました</a>が、<br />
Photoshop CS5の新機能「Content-Aware Fill」のデモ動画がYouTubeで公開されています。<br />
ちょっとすごいですよ、これ。</p>



<span id="more-83"></span>



<p><object width="598" height="473"><param name="movie" value="http://www.youtube.com/v/NH0aEp1oDOI?fs=1&amp;hl=ja_JP"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/NH0aEp1oDOI?fs=1&amp;hl=ja_JP" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="598" height="473"></object></p>



<p>ただのゴミ取り作業かと思いきや、途中からどんどんすごくなっていきます。<br />
選択範囲の周辺画像を解析して、補完できる機能のようですね。<br />
高解像度で見てみないと精度の程はわかりませんが、<br />
樹木や道路がきれいさっぱりなくなったり、雲や森の続きが描かれたりと驚かされます。<br />
中の人はかなりの腕前です。</p>



<p>いつの日か、おおまかな注文を音声でインプットすると<br />
勝手に写真をジェネレートしたりしてくれる日が来たりして…。</p>



<p>そろそろ他のアプリケーションの新機能の情報も欲しいですね！</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
