Webサイトでの videoタグのインライン自動再生用に動画の音声トラックを外す方法。

めも。Macです。

brewでffmpegをインストール

依存パッケージエンコーダーいろいろと入ります。

$ brew install ffmpeg

できたらffmpegコマンドで抜く(正確には映像コーデックのみをコピー)

ffmpeg -i input.mp4 -vcodec copy -an output.mp4

いろいろmp4コンテナいじれて面白そう。

Youtube 埋め込み iFrame APIでスマホで動画を自動再生する方法。(一部はできない

Youtube 埋め込み iFrame APIでスマホで動画を自動再生する方法。(一部はできない

基本音声が入っているとできない、古い機種はできない、最近はわりとできるようになってきている。
微妙に悩ましい状況、動画GIFや独自mp4やボタンを置いて再生とかいろいろ検討する。
(本質的なところを掘り下げたい、、昔のIE5とか6とかwindows2000とか思い出す不毛)

ES6の抜粋
ポイントは、onReady で再生準備できたところで、いったん、
this.player.mute();
とミュートしてから再生しているとこ。(音声はYoutubeにかかわらずスマホは全般自動はだめ)

class Hoge { 
    player;
    isPlay=false;
    
    constructor() {
        window.onYouTubeIframeAPIReady = $.proxy(this.loadYoutubeApi,this);
        let scriptEl = document.createElement('script');
        let headEl = document.querySelector('head');
        scriptEl.src = "https://www.youtube.com/iframe_api";
        headEl.appendChild(scriptEl);
    }
        
    loadYoutubeApi(){
        this.player = new YT.Player('bgndVideo', {
            videoId: 'YOUR_LIKE_VIDEO_ID',
            width: '1920',
            height: '1024',
            playerVars: {
                playsinline: 1,
                showControls: 1,
                modestbranding:1,
                showinfo:0,
                controls:0,
                rel:0
            },
            events: {
                'onReady': $.proxy(this.onReadyYoutube,this)
            }
        });
    }

    onReadyYoutube(e){
        this.player = e.target;
        this.player.mute();
        this.playVideo();
        $('#bgndVideo').addClass('ready');
    }

    playVideo(){
        this.player.seekTo(1);
        this.player.playVideo();
        this.isPlay = true;
        setTimeout($.proxy(this.playVideo),19*1000);
    }

全体はこんな感じ、これは実は短い動画をループ再生していて、
最後まで再生するとチラッっと黒くなってピカピカちらつくので、最後に到達する前にループしています。(背景のまぁいめーじなので、大丈夫)

css3,transform: translate3dでのちらつきと、重なり順のバグ表示

css3,transform: translate3dでのちらつきと、重なり順のバグ表示

アニメーションをつくっていたら、最後の方でちょこっとチラついたり、zIndexがおかしくなってみえなくなったりすることが有りました。

結果からいうと、以下で解決。

@keyframes animename
from
transform: translate3d(0,20%,0)
to
transform : none; × これを、→ translate3d(0,0,0) に修正

具体的ところでは、要素の書く順番で、普通はBが上に来る。


animeA,animeB{
    position: absolute;
}
~~
<div id="animeA"></div>
<div id="animeB"></div>

けどアニメーションの途中などで以下のスタイルの状態になると、瞬間的にAが上に重なる。

animeA{
    transform: translate3d(0, 0,0);
}
animeB{
    transform: none;
}
~~

これは、translate3dを使った場合に CPUでなくGPUレンダリングが利用され、その描画レイヤーが通常のCPUレンダリングの上に来てしまうらしい。

高速化と確実性の両立がベストだけど高パフォーマンスをだすためにいろいろ頑張っているそのすきまなのかもしれなない。

gulpタスクランナー、babel(ES6)で、クラスプロパティーを使う。

gulpタスクランナー、babel(ES6)で、クラスプロパティーを使う。

ES6の私用でクラスプロパティーがつかえない、TyepScript,Coffeとかは使える。
Class properties transformプラグインをインストールする。

$ npm install --save-dev babel-plugin-transform-class-properties

Class properties transform
https://babeljs.io/docs/plugins/transform-class-properties/

gulpfile.jsでbabelするときにオプションで渡す。

gulp.task('babel', function() {
  browserify({
    entries: ['src/js/app.js']
  })
    .transform(babelify, {
      presets: ["es2015"],
      plugins: ["transform-class-properties"] // ★ココ , presetsとおなじく渡せばいいだけ
    })
    .bundle()
    .on("error", function (err) {
      console.log("Error : " + err.message);
      this.emit("end");
    })
    .pipe(source('app.js'))
    .pipe(gulp.dest('app/js/'));
});

フルスクリーンで縦にコンテンツごとスライドするJavaScriptを比較しようと思ったけど、fullPage.jsで良さそうなので比較しなかった。

フルスクリーンで縦にコンテンツごとスライドするJavaScriptを比較しようと思ったけど、fullPage.jsで良さそうなので比較しなかった。

タイトルの通り比較しようとしてfullPage.jsからみた。

fullPage.js

https://alvarotrigo.com/fullPage/

DocumentやDemoや有料のExtensionを見ていくと。

  • タブレット可能
  • 横も有り。
  • 縦のドットあり
  • スクロールバー付可能
  • なし

  • 横スクロールのドットあり
  • セクション内でスクロール可能(これ良いかも
  • faceエフェクトもある。

ほとんどなんでもできそうで比較せずにこちら採用で.orz.

全画面背景動画をスマホでも自動再生させる方法を考える。

全画面背景動画をスマホでも自動再生させる方法を考える。

情報を探してましたが散乱していて大変だったのでまとめてみました。(ツッコミなど歓迎)
いきなりですが結果Youtubeのiframeplayer apiが結局よかった。

YoutubeのJavvscriptAPIで自動を実装する。

この方法がお手軽でよいかも。以下のJSのライブラリが簡単。
mp4を直接使う方法などいろいろ見ていたのですが、結局 videoタグ/APIでできることは、YoutubeAPIでもできそうで、ソースを見ると、モバイルブラウザの判定eteもしっかり実装されているので、結局のところこちらを使うことにしました。

Modernize Your Site: Building a YouTube Video Background
https://designmodo.com/demo/videobackground/

MP4のビデオ形式や、videoタグ/APIなどについていろいろ調べたので、ついでにメモを貼っておきます。

以下、Webで使える動画形式などの条件

条件 方式など メモ
ファイルフォーマット(コンテナ) MPEG4 (拡張子が.mp4)
動画の圧縮形式 H.264 昔はFirefoxがNGだったけど今はOK
H.264のProfile high profile ( or main profile) 細かく検証できて無くサイトを調べているとhighprofileでも再生できている箇所が多かった orz..
H.264のレベル 3.1 (4でも行けそうだけど。ちょっと検証不足。)
音声 無し これはモバイルでほとんど自動再生ができないため自動再生の場合は無し

動画のコーデックなどの詳細情報の調べ方。

私は、黒羽製作所さまの“真空波動研Lite” を利用させていただきました。

生産物 黒羽製作所
http://kurohane.net/seisanbutu.html

その他参考サイト

H.264 Wikipedia
https://ja.wikipedia.org/wiki/H.264

動画コーデックの種類と違い(H.264・VP9・MPEG・Xvid・DivX・WMV等)【比較】
http://aviutl.info/ko-dekku-tigai/

HTML5 の audio 要素と video 要素でサポートされているメディアフォーマット
https://developer.mozilla.org/ja/docs/Web/HTML/Supported_media_formats

Android/iOS同時対応動画をエンコードする心得
http://qiita.com/yuya_presto/items/9fed29296dbdc7fd1d5d

Supported Media Formats | Android Developers
https://developer.android.com/guide/topics/media/media-formats.html

番外(動画GIFをという話) 【Web制作】スマホのブラウザでも動画を自動再生する方法
http://www.groovoost.com/blog/web/play-video-sp
Androidで再生できる動画フォーマットを調べてみた Zenfone3編
https://www.timbreofprogram.info/blog/archives/1192

はたして iPhone は iOS 10 なら動画を自動再生できるのか
http://qiita.com/haribote/items/ef7ec97ca059eeb6d9ae

iOS10 Mobile Safariにおけるビデオの自動再生
http://qiita.com/hayakix/items/4c841ea76eab70a66e91

AndroidとiOS両方に対応するならmp4を使う
http://qiita.com/yuya_presto/items/9fed29296dbdc7fd1d5d

Can I use… Support tables for HTML5, CSS3, etc
https://caniuse.com/#search=h264

iPhone Safariで動画をインライン再生する方法
http://qiita.com/hadakadenkyu/items/75162099d0bf7cdcfdc7

スマホでの動画インライン自動再生まわりについて調べたことまとめ
http://kimagureneet.hatenablog.com/entry/2016/10/23/020054

Modernize Your Site: Building a YouTube Video Background
https://designmodo.com/demo/videobackground/

デンソー ブランドサイト
https://brand.denso.com/ja/

スマホではtouchstartイベント、PCではclickイベント両方に対応する方法

スマホではtouchstartイベント、PCではclickイベント両方に対応する方法

Javascriptでクリックイベントだとスマホで反応がおもいので、タッチイベントと、クリックイベント両方を実装する方法。
touchstartイベント後にstopPropagation()でイベントフローをストップします。

    var showSmartPhoneMenu = function (e) {
      e.preventDefault();
      var $target = $(e.currentTarget);
      $target.toggleClass('on');
      e.stopPropagation();
    };
    $('#menuBtn').on('touchstart',showSmartPhoneMenu );
    $('#menuBtn').on('click',showSmartPhoneMenu);

よく忘れるPhotoshopを使ったマークアップ方法

よく忘れるPhotoshopを使ったマークアップ方法

スライスの作成方法

  1. 選択レイヤーを残したまま別レイヤーに統合(Cmd + Alt + E)
  2. レイヤーに名前をつける(log.png)など
  3. [ファイル]メニューの[生成] > [画像アセット] で画像下記出し( psdファイルと同じフォルダに出力) 個人的ショートカット割汗(Cmd+Shift+Ctrl+E)

画像の幅を調べる

  1. 選択して Cmd + T (自由変形) をすると、情報パネルにwidthが出る。

距離を測る

  1. 方法1、選択して Shift + 矢印キーで10px及び、矢印キー 1pxを測る
  2. 方法2 物差しツール Shift + i でツールを変更してなぞる。
  3. 方法3 方法2の応用 ガイドを引いて物差しで測る

EmmetのBEMフィルターが簡単。

EmmetのBEMフィルターが簡単。

emmet(旧zen-coding)のbemフィルターと言うものがあるらしい。
linuxのコマンドふうに パイプでつなぐみたい。

.media-box>.-img | bem

PhpStormで使ってみようと、環境設定パネルをみると。ありました。


早速チェックを入れて使ってみます。


っと、パイプでつなぎ忘れたのですが、こちらは、パイプで繋がなくても自動でBEM認識みたいです。
こっちのほうが何かと便利そうですね。

Photoshopの最速の書出し方法って、レイヤーに基づくスライスと思っていたけど、画像アセットだったのか。

Photoshopの最速の書出し方法って、レイヤーに基づくスライスと思っていたけど、画像アセットだったのか。

最近はWeb界隈はIllustratorを使うことが多いのかな、ずーっとPhotoshopを使うことがなかったのですが(なにかFlashが流行ってた頃がWebでは最盛期だったようなきもする。)

久しぶりに再開っ! Photoshop、元は写真業の会社にいたこともあり、デジタルの画像処理ソフトで一番触っていかもなのですが、フロントエンドエンジニアとして最近はもっぱらイラレでした。

最近のイラレはアセットパネルへドラッグしてどんどん物を移動して一括でバリエーションも含めて書き出せてとても便利、昔つかっていたスライスには戻れない感じでかなりスムーズに作業ができるようになってきています。

Photoshopはアセットの書出しパネルがなかったので、旧来のスライス切ってからかきだす方法ではつらいなとおもって情報あさっていると画像アセットの生成といのあがあるようなので、使ってみたら便利でした。

使い方

まずは書き出すレイヤーを統合するところから(このあたりはレイヤーに基づくスライスを作るのとほとんど一緒、Photoshopの書出しの肝かなとも思う。

「書き出すパーツを1レイヤーにまとめる。」

ってことをします。ここは、選択ツールで範囲指定でさっとかこって、Cmd + Alt + E (winだと Ctrl + Alt + E )で元のレイヤーを残して統合(残しておくのが味噌)。
そして
そのレイヤーにファイル名をつけます。(png,jpgなど)
そのままファイルメニューにひっそりとある、生成から「画像アセット」を選ぶ。


すると psdファイルのとなりにアセットディレクトリができて、そのなかにレイヤーにつけたファイル名で書き出せます。(これはショートカットはもちろん割り当てたほうが早いです。)

あとレイヤーをいじっててもう一つ便利なのが、右クリックからpngでクイック書出しというものとか、書出し形式ってのもありました。(この辺はもう少し使い込んでみないとなんとも。

ですが、今のところ最速なのは画像アセットの生成っぽいのでしばらく使ってみたいと思います。

Page 18 of 46

Powered by WordPress & Theme by Anders Norén