カテゴリー別アーカイブ: ソフトウェア

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を購入。こちらもおいおい触って行きたいです。 続きを読む

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の代替として一番におすすめできるソフトウェアになると思います。

ディスクの故障とデータのサルベージ

ディスクの故障、ある日突然やってきます。残念ですが、ハードディスクは消耗品であり、ある日突然データが読めなくなっても不思議ではありません。現在普及しているUSBメモリ・SDカード・SSDも物理的には安定とはいえ、何らかのトラブルが起これば読み込みができなくなることも多々あります。

自分がトラブルに陥った時に、たいへん助かったツールをご紹介いたします。

まずはじめに・・・

あなたがこのサイトを、Googleで探し当てたということは、おそらくデータのバックアップを取っていなかったということを意味するのだと思います。

今回を契機に、適切なバックアップ環境の構築をおすすめします。データの復旧は、バックアップの何倍もコストが掛かり、時間を浪費し、また確実にデータが戻ってくるとは限りません。

データ復旧専門の会社

復旧には手間も時間もかかります。もし自信がなければ、お金がかかりますがデータ復旧専門の会社、たとえば日本データテクノロジーさんなどの専門会社さんへ依頼するのがお勧めです。

注意: 以後のソフトウェアはプロフェッショナル向けです。使い方を間違えると、復旧できるはずだったデータが戻らなくなるだけではなく、現在確保できているデータさえ失う可能性があります。

GNU ddrescue

辛うじてデータが読み込みできているディスクに頻繁にアクセスを行うと、それだけでディスクに負担をかけてしまうことになります。まずはディスクをイメージとして確保しましょう。 続きを読む

Pixelmatorの新機能 新しくなった修復ツールがすごすぎる

repair_nosheep

この画像、実は、あるものを消しているのです。どこに何があったか分かりますか?

続きを読む

タブ文字はもう使うべきではない (Python + vim編)

Ubuntu 12.04 LTSからUbuntu 14.04 LTSにアップグレードしたところ、vimの設定ファイルが変わったのか、自分の.vimrcの設定に関わらず、tabstopが8で表示されるようになってしまいました。

tab8

続きを読む

gitのお気に入りコマンドなど

お気に入りのgitの設定およびコマンドです。

git status -sb

[alias]
st = status -sb

と登録しておくのがお勧めです。git status –short –branchの省略形です。

通常の場合、

$ git status

を実行すると、

gitstatus

と、本来必要である情報以上にたくさんのメッセージが表示されます。もちろん、なれないうちは大変助かるメッセージではありますが、慣れてくると冗長すぎてむしろ見通しの悪さを感じてきます。

$ git status -sb

では、

gitstatussb

と、本来必要な情報を簡潔に表示してくれます。

git 1.8.4以上をお使いならばGitの更新ログにあるようにstatus.shortとstatus.branchというconfigがありますのでそちらを利用するのもお勧めです。

pager = less -r

(参考: どせいけいさんきより)

git diffなどの結果は、core.pagerで設定したコマンドに送られます。現在の設定が不明な場合は

$ git config --get core.pager

で調べることができます。おそらく、設定していない場合はlessが標準のページャとして使用されていると思います。

標準のlessは長い行を折り返してくれないので、

gitless

こんなかんじで、長い文は右側にはみ出してしまって見通しが悪いです。

.gitconfigに

[core]
pager = less -r

と設定することで、

gitlessr

長い行は自動的に折り返してくれるので見通しが良くなります。

git diff –word-diff

長い行も一度に表示できるようになって少し見通しが良くなったとはいえ、上記のdiffでは結局どこが変わったのか調べるのはかなり大変です。

$ git diff --word-diff

を使うと

gitworddiff

変更になった部分だけをハイライトして表示してくれます。知っていると便利なコマンドです。

git commit -v

コミットログの記載画面にコミット内容を表示することができます。

gitcommitv

こんな感じでコミットログ記載部分の下部に今回のコミットではどの部分が変更されたかが表示されます。

git log –graph

僕のおすすめは

$ git log --graph --date=short --pretty=format:'%Cgreen%h %cd %Cblue%cn %Creset%s'

です。

gitloggraph

こんなかんじで履歴をコンソール上でグラフィカルに表示してくれます。いろいろ設定オプションがありますが僕は上記を使っています。

もちろん、vim上でgregsexton/gitvを使うという手もあります。

僕がMacBookで必ず使う43のソフトウェア達

macapps

最近良く見かけるのでやってみました。

よくあるやつです。

僕がMacを使っていて、なかったら困るソフトウェアをまとめてみました。

続きを読む

文字列をゴミ箱に入れる

本当にあった脱力PC話」に、

わたしがこれまで最も感心した話は、オヤジBさんがワープロソフトを使っているとき、削除したい部分を範囲指定し、ドラッグしてゴミ箱に捨てようとした話だ。もちろん、ゴミ箱に捨てられるのはファイルとフォルダだけで、文字列は捨てられない。Bさんは何度も試し、たびたびPCを再起動したが、らちがあかない。だれかが「それは無理だ」と教えてあげたのだが、Bさんは「文字を小さくしたのに」とフォントサイズを下げたのにゴミ箱に入らないことが許せなかったようだ。この話を20世紀末に知人から教えてもらったとき、MacとWindowsの別なくGUIの致命的欠陥を知った。メタファーは難しいのだ。

と、書いてありましたので実際やってみました。出来ました。

環境はMac OS X 10.6.4 Snow Leopard + Microsoft Word 2008 for Mac。Windowsで出来るかどうかは知りません。

IS01とIS03で標準プレーヤ以外でもFMトランスミッタを使用する。

IS01の話題ばっかりですが。

IS01にはFMトランスミッタが内蔵されています。にもかかわらず使えるのは標準搭載のメディアプレーヤーのみでした。このソフトは設定画面を直接表示して、その他のソフトウェアでもFMトランスミッタを使用できるようにします。

ただし、メモリが足りなくなるとLMKがトランスミッタ自体を殺しますので送信が止まることかも。

注意点

  • IS01専用です。
  • タスクマネージャーソフトを利用してできるだけ空きメモリを作ってから使用することを推奨します。
  • メモリが足りなくなるとトランスミッタが追い出されて音が本体から出始めます。注意。
  • トランスミッタがオンだと本体から音が出ません。

Android Marketにうpしようかとも考えたけど、たいしたことやってないしアイコンしょぼいしでここで野良アプリで公開しておきます。気が向いたらMarketにあげようかな。

IS01 FMTransmitter 設定

注意:なんだかIS01から直アクセスだとインストールがうまくいかないようです。一度ダウンロードしてDropboxやSDカード経由で渡してみると大丈夫みたいです。

追記(2010/12/3)
なんだかIS03でも動作するらしいです。inashiroさんありがとうっ。