ffmpegをGoogle Compute Engine経由で使ってみた

ffmpeg、便利ですよね。ただ、どうしてもエンコード作業という物はCPUパワーと時間を消費します。

背景

つい最近、Panasonic の4Kビデオカメラ VX980Mを購入しました。画質もよく、大変満足しているのですが、4K画質はとにかくファイルサイズが大きくて大変です。10分程度の動画でも約5GBになってしまい、普段の取り回しにはやや不便です。

そこで、もともとの4K動画は将来使用できるようにクラウド上へとバックアップし、ローカルには960×540 30fpsにエンコードしたものを置いておくことにしました。

しかし、僕のメインマシンはMacBook Pro 12″ (1.3 GHz Intel Core m7)なので、どう考えても本格的なエンコード作業には向いていません。

そこで、ffmpegをGoogle Compute Engineで動かし、クラウドでのエンコードを行ってみたので、引っかかった点も踏まえて、ここに報告させていただきます。

方法

まず、Google Compute Engineが使用できるようになっているのが大前提です。まだの人は導入を済ませてください

まずは、インスタンスを作ります。今回はエンコード作業が目的ですので、CPUを強化した設定として、n1-highcpu-8を使用します。また、ちょっとお高いですが、近い方が通信コストも少ないでしょうから、asia-northeast1-cを選ぶことにしてみました。

% gcloud compute instances create cloudencode --image-family cos-stable --image-project cos-cloud --zone "asia-northeast1-c" --machine-type "n1-highcpu-8"

もちろん、UbuntuやCentOSを選んでも良いですが、Dockerを使った方が後々の取り回しも楽だと思いますので、Container-Optimized OSを選ぶことにします。

まずは、dockerでffmpegを動かすのを試してみましょう。イメージは人気のあるjrottenberg/ffmpegを選ぶことにします。

% gcloud compute ssh cloudencode --command="docker run -i --rm jrottenberg/ffmpeg"
Unable to find image 'jrottenberg/ffmpeg:latest' locally
latest: Pulling from jrottenberg/ffmpeg
c62795f78da9: Pulling fs layer
d4fceeeb758e: Pulling fs layer
5c9125a401ae: Pulling fs layer
...
...
Status: Downloaded newer image for jrottenberg/ffmpeg:latest
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
...
...
ffmpeg version 3.3 Copyright (c) 2000-2017 the FFmpeg developers
 built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609
...
...

これでffmpegを動かすことができました。ここまではスムーズ。

と言うわけで、stdinとstdoutを用いてエンコード作業ができないかを試してみます。

% cat input.mp4 | gcloud compute ssh cloudencode --command="docker run -i --rm jrottenberg/ffmpeg -i pipe:0 -s 960x540 -r 30 -vsync passthrough -vcodec libx264 -acodec aac -ac 2 -ab 128k -threads 0 -f mp4 pipe:1" > output.mp4
ffmpeg version 3.3 Copyright (c) 2000-2017 the FFmpeg developers
...
...
[mp4 @ 0x7f890685a600] muxer does not support non seekable output
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Error initializing output stream 0:1 --
...

どうやらだめなようです…。調べてみると、パイプを使った場合は、MPEG-PSでの出力はできないことが分かりました。ので、残念ながら、そのままmp4にはできないようです。

MPEG-TSならパイプへの出力にも対応しているので、こうすれば大丈夫です。

% cat input.mp4 | gcloud compute ssh cloudencode --command="docker run -i --rm jrottenberg/ffmpeg -i pipe:0 -s 960x540 -r 30 -vsync passthrough -vcodec libx264 -acodec aac -ac 2 -ab 128k -threads 0 -f mpegts pipe:1" > output.ts
ffmpeg version 3.3 Copyright (c) 2000-2017 the FFmpeg developers
...
...

これでクラウドでの変換はうまいこといきました!

ただ、tsファイルのままだと、取り回しがまた面倒なので、こちらもローカルで再変換しましょう。

% ffmpeg -i output.ts -vcodec copy -acodec copy output.mp4

これで取り回しのしやすい小さいサイズのmp4ファイルのできあがり、です。

ただ、tsファイルをローカルにいったん保存するのは美しくない……。そう思うようであれば下記を試しましょう。zshが必要です。

% ffmpeg -i pipe:0 -vcodec copy -acodec copy output.mp4 2> /dev/null < <(gcloud compute ssh cloudencode --command="docker run -i --rm jrottenberg/ffmpeg -i pipe:0 -s 960x540 -r 29.970030 -vsync passthrough -vcodec libx264 -acodec aac -ac 2 -ab 128k -threads 0 -f mpegts pipe:1" < <(cat input.mp4 ) )

環境とバージョンによっては、inの方もMPEG TSである必要があるようです。その場合は残念ながら、さらに入れ子にして、

% ffmpeg -i pipe:0 -vcodec copy -acodec copy output.mp4 2> /dev/null < <(gcloud compute ssh cloudencode --command="docker run -i --rm jrottenberg/ffmpeg -i pipe:0 -s 960x540 -r 29.970030 -vsync passthrough -vcodec libx264 -acodec aac -ac 2 -ab 128k -threads 0 -f mpegts pipe:1" < <(ffmpeg -i input.mp4 -vcodec copy -acodec copy -f mpegts pipe:1 2> /dev/null ) )

これで、input.mp4 -> TS -> cloudのffmpeg -> TS -> output.mp4と変換することができます。

結果

肝心の性能です。

まずはlocalで実行している場合。

うーん、0.547x, 16 fpsと出ています。10分の動画の変換に約20分かかることになります。

それではクラウドではどうでしょう。

リアルタイム変換より速い速度で変換できています。4K動画の変換なので、Uploadが速度のボトルネックになる場合もあるかもしれませんが、ローカルの2.3倍の速度でエンコードできたようです。

注意点

Google Cloud Computingなので、料金がかかります。また、リソースの割当量にも注意が必要です。

MacBookやその他のNetBookなどでも、この方法なら動画のエンコードを行うことができます。ただ、巨大なファイルをアップロードする必要もあり、思ったより速度がかせげない、というのが正直な感想です。今後H.245/HEVCなどさらに負荷のかかる動画形式が一般的になってくれば、有用になるかもしれません。

Pocket C.H.I.P. が届いた

Pocket C.H.I.P.が届きました。2016年5月に申し込みをしているので、実に半年かかったことになります。(当時はまだ49$でした)

プチプチに包まれたPocket C.H.I.P.

こんな感じのプチプチに包まれて香港からやってきました。

C.H.I.P.とPocket C.H.I.P.

Pocket C.H.I.P.にあわせて、C.H.I.P.とHDMI DIPを購入。こちらもおいおい触って行きたいです。 続きを読む

妊娠前と妊娠中の葉酸

妊娠前と妊娠中の葉酸 (folic acid)

葉酸はビタミンB類の一種で、DNAの生合成に強く関わっています。

日本人の食事摂取基準(2015年版)によると成人(18~29 歳)の推定平均必要量は200μg/日、推奨量は、240μg/日です。ただし、妊娠中は需要が増大するので、さらに240μg/日(付加量推奨量)を追加しましょう。

妊娠中の葉酸の補充が重要である理由は、神経管閉鎖障害が予防できるからです。 続きを読む

「情熱価格」のACプラグ付充電器を試してみた。

ドン・キホーテのプライベートブランドの「情熱価格」のACプラグ付充電器 が出ていたので試してみました。インターネット上で検索しても、全く情報がなかったので、少しレビューを書いておきます。

jk1454899315-1-main
商品概要
型番 MJ-LI309/310/311
内蔵電池 リチウムイオンポリマー
電池定格容量 3.7V/3000mAh
入力 AC 100V-240V
出力 USBポート / DC 5V 最大 2A
収納式microUSBコネクタ / DC 5V 1A
 サイズ  幅5.4×縦8.4×厚さ1.9 [cm]
重量 105g
(ドン・キホーテのホームページより)

パッケージの製造元を見ると、株式会社アルファとなっており、こちらの商品のようです。 続きを読む

岡山のお店100選

100は嘘です。岡山でオススメのお店を自分のメモを兼ねて書いておきます。異論は認める。

和食

和楽 (岡山市北区表町)

天満屋から少し歩いたところにあります。

岡山の地物を使っており、かつ季節を感じることのできる店です。料理は日本酒にあうもので流れが出来ており、次に出てくる品が楽しみになります。北区津高にお弟子さんの店もあるそうです。

両備グレースタワーの2階の店も美味しいですが、個人的にはこちらの方が好きです。ただし、大将は必ず会話に入ってきます。

食べログ公式サイト

割烹 動 (岡山市北区磨屋町)

動と書いて「いぶり」と読むそう。場所はゴリラビルの1階。

和楽よりは大変リーズナブルですがいろいろ楽しめます。

食べログ 続きを読む

「クリエイター独立マニュアル」の表紙

先日書店に行った時、グラフィック社編集部 (編集)の「クリエイター独立マニュアル」を見てびっくりしました。

表紙の一部を引用しますが、

cover_cross

このように、中央上部にでかでかと赤十字マークが入っています。

赤十字マークは、赤十字の標章及び名称等の使用の制限に関する法律でその使用に強い制限がかかっています。

第一条  白地に赤十字、赤新月若しくは赤のライオン及び太陽の標章若しくは赤十字、ジュネーブ十字、赤新月若しくは赤のライオン及び太陽の名称又はこれらに類似する記章若しくは名称は、みだりにこれを用いてはならない。
第四条  第一条の規定に違反した者は、六月以下の懲役又は三十万円以下の罰金に処する。

また、日本赤十字社のサイトにも、赤十字マークの意味と約束事としてこうあります。

また赤十字マークは、病院や医療を象徴するマークだと思っている方も少なくないようですが、このようにとても大切な意味をもつマークであり、その使用については赤十字社と法律等に基づいて認められている組織に限られています。もちろん、一般の病院や医薬品などに使用することは禁止されています。

今一度気をつけましょう。

第8回 小児科専門医試験 2014年の記録

第8回(2014年) 小児科専門医試験を受けてきました。

病院によっては近くに試験を受けた人がいなくて、どんな試験であったか話を聞けない場合もあると思いますので、第9回(2015年) 小児科専門医試験を受ける人のためにも少し記録として残しておきます。

受験票が届くまで

受験資格

当然ですが、小児科専門医を受けるためには、受験資格と受験の申し込みが必要です。

受験資格としては

  • 2014 年 8 月 31 日までに,会員歴が連続 3 年以上,もしくは通算 5 年以上である者.
  • 2004 年以降の医師国家試験合格者で,2 年間の卒後臨床研修を修了後,学会の指定した研修施設(研修施設が予め登録した関連施設を含む)において 2014 年 8 月 31 日までに 3 年以上の研修を修了,または修了見込みの者.

とあります。要は、後期研修医になる時に普通に学会に加入していれば、3年間の研修を終えた時には施設に問題なければ受験資格があることになります。施設が専門医研修施設かどうかは、小児科学会のホームページ (要ログイン)で調べることができます。

出願までの流れ

2014年の書類について説明しています。2015年に必要な書類が同じであるとは限らないので、必ず小児科学会の公式資料で確認しましょう。

続きを読む

Affinity Designer で pdf を編集してみる

serifのAffinity Designerはシェアウェアで¥5000もしますが、トップレベルのベクターグラフィック編集ソフトです。

demoを見てもらうとどんなソフトウェアか分かってもらえると思います。

イラストを描く方にはもちろん便利なソフトウェアだと思いますが、pdfの編集にも大変威力を発揮します。

IGF1SDbyGroup_raw

たとえば、Rやその他のソフトウェアでこんな出力が得られたとします。何の変哲のない箱ひげ図で、このままでも充分使用はできますが、よく見ると色々と不満が出てきます。

affinity

実際にこういった画像を綺麗に編集するのは難しく、グラフィックソフトウェアでちまちま編集するか、PowerPointやKeyNoteに貼り付けた後、上から覆いかぶせるように図形やテキストを駆使しして見栄えを調整するか、もしくは最終的には諦める、という風になっていたと思います。

もちろん、Adobe Illustratorは選択肢の一つですが、高価であり個人用途で簡単に手を出せるものではありません。

Affinity Designerはpdfのファイルを開くことができ、色々と編集した上で、pdfやpngなどで保存することができます。

先程の例でも、

screenshot

必要に応じて、テキストの大きさ・色・内容を変更して…

IGF1SDbyGroup

グラフの色や線の太さなども簡単に調整して保存することができます。このくらいの作業なら慣れたら3分もかかることなく簡単に行うことができます。

現時点では、日本語化されておらず、一部フォントで日本語の表記が乱れるようですが、画像の編集は問題なく行えています。

近いうちに日本語化すれば、Adobe Illustratorの代替として一番におすすめできるソフトウェアになると思います。

Manual – iOS 8 でシャッター速度の調整できるカメラアプリ

iOS8では、アプリケーションからカメラのシャッター速度や感度などいろいろな項目を変更することが出来るようになっています。

iPhone/iPad用にシャッター速度などを調整して撮影ができるアプリはいろいろありますが、Manual (Little Pixels)は、有償アプリ(日本: 200円)ですが大変わかり易くて便利です。

manual_icon

アプリを起動すると…

manal_operation

いろいろと操作項目のあるカメラ画面が出てきます。ここからフラッシュ・フォーカス・色温度・ISO感度・シャッター速度・露出を調整できます。

たとえば、フォーカスを押すと・・・

focus

こんな感じで、画面の上部にフォーカスの設定部分が出てきます。

また、シャッター速度の変更ができるのが便利です。

例えば、ファンがこんな感じで回っていたとして・・・

標準のカメラで撮影した場合はこんな感じです。明るい部屋ですが、回転するファンの羽はブレたものになってしまいました。

normalsetting

Manualを使用して、シャッター速度と感度を調整するとまるで羽が止まっているように撮影することができます。

highspeed

もちろん、普通のデジカメと同じように、とまでは行きませんが、調整できる幅が広がることで、今まで取れなかった写真を取ることもできるのではないでしょうか。

Google Chrome Canary を デフォルトブラウザに変更する方法 (Mac Yosemite)

 

Google Chromeインストール後にChrome Canaryをインストールした場合、「この Google Chrome はセカンダリ インストールのため、既定のブラウザには設定できません。」と表示され、デフォルトブラウザにすることができません。

defaultbrowser↑こんな感じで表示されます。

この場合でも、システム環境設定から設定することでデフォルトブラウザにすることができます。

一般システム環境設定の「一般」から・・・

defbrowser

デフォルトWebブラウザを変更することができます。