be kept behind by 〜

「〜によって後手にまわされた」的な意味?「〜の後に続いて」的な意味?

What happened in 2008?

The summer saw heavy rain which affected this year's Salmon migration. From the data, it seems there were two distinct Salmon migrations - those that pressed ahead early on and those that were kept behind by the large volume of fast-flowing water. Our first tagged Salmon, named Wylam, was sadly caught by an angler over the summer but our other two Salmon, Hadrian and Corrie made very slow progress up the Tyne, probably in a bid to conserve energy.

MEncoderで日本語字幕.srtを付けてAVI出力したメモ

入力はXvidとmp3のAVI + 日本語字幕の.srtファイル。MEncoderでうまく焼き込めた。

mencoder INPUT.avi \
-oac copy \
-ovc lavc \
-lavcopts vcodec=mpeg4:vbitrate=960 \
-sub SUBFILE.srt \
-subfont-text-scale 4 \
-utf8 \
-slang ja \
-o OUTPUT.avi
-oac copy

元ファイルの音源を新たにエンコードせずにそのままコピー

-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=960

libavcodecのmpeg4を使用、ビットレート960bps

-sub SUBFILE.srt -subfont-text-scale 4 -utf8 -slang ja

字幕ファイルSUBFILE.srtを使用、文字スケール4、utf8、日本語

  • slangはコンテナによって二文字(ja)だったり三文字(jpn)だったりするらしい
  • 文字スケールのデフォルトは5。
  • フォント指定(-subfont)を省くと、デフォルトのフリータイプフォント ~/.mplayer/subfont.ttf になる。拡張子は.ttfだが、試しにシステムのヒラギノ角ゴ pro W6.otfにシンボリックリンクを貼ってみたら特に問題ないようだ、今の所は。


参考:http://medir.jp/node/751

Firebugを使ってYouTube動画をダウンロードする

Firefoxのアドオン「Firebug」を使ってYouTubeの動画をダウンロードする方法を紹介します。


私は普段、DownloadHelper というアドオンを使っているのですが、ページによっては動画をダウンロード出来ないことがあります。そんな時、Macの場合はSafariでダウンロードするという手もありますが、Safariを開いてURLをコピペして……という作業が嫌な方には、以下の方法が使えるかもしれません。試していませんが、WindowsFirefoxでもおそらく可能だと思います。

1、まず FirebugFirefox にインストールする。

https://addons.mozilla.org/en-US/firefox/addon/1843/
Firebug は主にウェブページ作成に使用されるツールです。

  • アドオンを有効にするには、ブラウザを一旦閉じて、再度開きましょう。
2、YouTubeのダウンロードしたい動画のページを開く
3、FireBugのパネルを開く
  • Macの場合は、メニューのツール > Firebug > Open Firebug をクリックすると開くことが出来ます。
4、「Net」のタブをクリック、タブ内の小さい逆三角をクリックして「Enable」(有効) と「Disable Browser Cache」(ブラウザのキャッシュを無効にする) にチェックを入れる

firebug Net

  • Firebug の Net タブでは、今見ているウェブサイトと自分のブラウザがどんな情報をやりとりしているかをモニタリング出来ます。
5、Flashを選択し、ページを再読み込みする。

ページが読み込まれるにつれて、リストがズラズラズラっと出てきます。URLが「GET videoplayback?...」となっている項目が出るまで待ちます。他の項目より Size が大きいです。
download youtube flv via firebug

6、「GET videoplayback?...」の項目を右クリックしてコンテキストメニューを開き、「Open in New Tab」をクリック

ここでファイルのダウンロードが始まるはずです。

7、ダウンロードが出来たら、先程の「Net」タブの逆三角形をクリックして、「Disable Browser Cache」のチェックを外し、「Disable」をチェックしておきましょう。
  • Firebug パネルは、右上の × をクリックして閉じることが出来ます。


ダウンロードされたファイルは「videoplayback」という名前になっていて拡張子がついていませんが、FLVというフォーマットのファイルです。好きな名前に変更して、最後に「.flv」を付けましょう。


Macの場合、FLVファイルは QuickTime プレイヤーでは再生出来ないかもしれません。そんなときは他のプレイヤーを使ってみましょう。VLCメディアプレイヤー や MPlayer はフリーで入手出来ます。

VLC media player
Official download of VLC media player, the best Open Source player - VideoLAN:
MPlayer
MPlayer - The Movie Player:

MPlayer は Binaries のところからダウンロード出来ます。

DVD→MPEG-4 MEncoderマニュアルメモ

DVD から 高品質MPEG-4 (DivX) へ

素材がDVDやTV放送のものだった場合、大抵はNTSC(北米、日本など)かPAL(欧州など)のフォーマットに格納されている。

ソースのフレームレート

  • スタンダードフィルム: シアターディスプレイ向け。24fps
  • PAL video: PALビデオカメラで50フィールド/秒で撮影されている
  • NTSC video: NTSCビデオカメラで60000/1001フィールド/秒で撮影。
  • アニメーション: 通常は24fpsだがミックスされている場合もある
  • CG: NTSCの場合24fpsか30fps、PALの場合25fpsが一般的
  • 1フレーム = 2フィールド

フレームで構成される映像:progressive
独立したフィールドで構成される映像:interlaced または video


テレビに映すための映像は(DVD含む)、フィールドベースのフォーマットに変換しないといけない。これをtelecineと呼ぶ。

  • PALとNTSC間の変換は劣化が激しい


DVDのvideoは連続したフィールドがフレームとしてグループ化されている。


DVDやデジタルTVのスタンダードであるMPEG-2は、オリジナルのプログレッシブフレームにエンコードする方法と、いくつかのフィールドをフレームに格納する方法の二つを提供する。これらはsoft-telecinedとよばれ、高い品質が保持される。一方、hard-telecineと呼ばれるものはフィールドを複製してエンコードする。

CBR (Constant BitRate) と Multipass (ABR, or Average BitRate)

CBRはビットレートが一定だが、multipassは前回の統計によって決められる。
ABRをサポートしているコーデックは通常two passエンコードのみをサポートしているが、x264, XviD, libavcodec等はmultipassをサポートしている。
quantizerは一つのフレームを16x16ピクセルのマクロブロック(macro block)に分けたものに適用される。quantizer値を下げると、品質が上がりビットレートも上がる。


CBR:
コーデックは映像をエンコードし、指定されたビットレート以下にするために詳細を捨てる。
大きなビットレート値が指定された場合(10000Kbitとか)は、それぞれのマクロブロックに適用するquantizerの最低値が使われる。(※libavcodecの場合はvgminで指定。デフォルト: 2)
クオリティ重視の場合はCBRを避けること。


Constant quantizer:
vgscaleオプション(libavcodecの場合)で指定されたquantizer値を全てのマクロブロックに対して同様に適用する。
PSNR(peak signal-to-noize ratio)


two passエンコード:
一回目はCBRのように行なうが、それぞれのフレームのログを残す。二回目でそれらを用いて、どのquantizerを使うか決める。早い動きや詳細のシーンでは高いquantizerを、遅い動きや詳細でないシーンでは低いquantizerを。重要なのは詳細よりもモーションである。


ビットレートの計算:
ビットレート(kbps) = (ファイル全体のサイズ(MB) - 音源サイズ(MB)) * 1024 * 1024 / 時間(秒) * 8 / 1000

効率的なエンコーディングのための制約

MPEGは動画を16x16のマクロブロックにわける。マクロブロックは、luma(明度)ブロックとchroma(色)ブロックから構成される。

  • 16の倍数を動画の画面サイズに使わないと、ファイルサイズの無駄。
  • エッジに黒い部分を残すと、エンコードの効率性が損なわれるのでクロップした方がよい
  • MPlayerはビデオの縁のクロップセッティングを表示する機能がある。-vf cropdetect


スケール時、ビットレートは解像度に比例するわけではない。
(320x240の200kbpsと、640x480の400kbpsのビデオのクオリティーは同じではない!)
ビットレートは解像度の二乗に比例するとした方がより正確。ただし実証されてはいない。
(320x240 400kbpsと680x480 800kbps)


CQ (Compression Quality): 1ピクセル当たりのビットと、フレーム当たりのビットを表わす。高い方がより良いクオリティになるが、0.30以上は無駄。

フィルター

クロップ、スケール、色調整、ノイズ除去、sharpening、インターレース解除(deinterlacing)、telecine、inverse telecine、ブロック解除(deblock)など。


例) 左上の隅(12,4)から、688x464にクロップ、640x464にスケール

-vf crop=688:464:12:4,scale=640:464


以下のようなフィルターは最初の方に書かれなければならない。

  • pp (postprocessing: deblockやderingをするときに使用)
  • spp (MPEGの産物を取り除くときに使用するpostprocessor)
  • pullup (inverce telecine)
  • softpulldown (soft telecine から hard telecine に変換)


元のDVDソースに近づけるために、フィルターは少ない方がよい。クロップは必要になることが多いが、スケールは避けるべき。ガンマ、コントラスト、明度の調節は避けるべき。再生時に行なった方がよい。対して、軽いノイズ除去フィルター(-vf hqdn3d=2:1:2 など)は効果的。

インターレースとtelecine

ほぼ全てのムービーは24fpsで撮影されている。
それをNTSCのフレームレート(30000/1001fps)で再生するために行なうプロセスを3:2 pulldown、一般的にはtelecineと言う。(pulldownはtelecineプロセス内で行なわれるから。)
PAL DVD(25fps)向けのビデオには何も行なわれない。24fpsを25fpsで再生すると少しだけ早くなるが、人間にはわからない程度である。音源トラックの再生時間はNTSC DVDと比べて4%短かくなる。


PAL DVDの場合、フレームレートは25fpsでよい。
NTSC DVDの場合は、inverse telecineを適用する。


24fpsで撮影された映像でNTSC DVDのものは、30000/1001でtelecineされているか、progressive 24000/1001fpsでDVDプレーヤーによってtelecineされる。しかし、TV番組はinterlaceされているのみで、telecineはされていない。


インターレース解除を行なうと、コンピュータのモニターやプロジェクターといったプログレッシブスキャンのディスプレイで便利。しかし動きの大きな場面で、およそ半分の情報が失なわれる。そのため、インターレース解除はしないほうがよい。インターレース解除は再生時にも可能である。

映像コーデックの選択方法

圧縮効率:
MPEG-4 AVC (H.264) > MPEG-4 ASP (libavcodec, XviD) > MPEG-2


対応ハードウェア:
新しいものは再生出来なかったりすることを考慮する。MPEG-1 (VCD, XVCD, KVCD), MPEG-2 (DVD, SVCD, KVCD), MPEG-4 ASP (DivX, libavcodec's LMP4, Xvid) 等のコーデックはサポートされていることが多い。


品質とエンコード時間:
公開されてから長いコーデック(libavcodec MPEG-4Xvid等)はスマートなアルゴリズムで最適化されているのでエンコード時間に対してクオリティーが高め。エンコードを高速にしたい場合は、各コーデックのデフォルト設定を利用するとよい。


マルチスレッドでの実行をサポートしているコーデックも選択肢の一つ。

  • libavcodec MPEG-4は速度向上は限られている。画質が少し低下する。
  • Xvidは僅かなな画質の低下で40-60%早くなる。
  • x264はPSNRを下げることで96%まで高速化する。

Muxing

例) input_audio.mp2とinput_video.aviを一つのコンテナに格納し、output_movie.aviを作成する。

mencoder -oac copy -ovc copy  -o output_movie.avi \
    -audiofile input_audio.mp2 input_video.avi


例) 音源とビデオをasfコンテナに格納する

mencoder -oac copy -ovc copy -o output_movie.asf -audiofile input_audio.mp2 \
    input_video.avi -of lavf -lavfopts format=asf
  • libavformat: いろいろなコンテナのmuxingとdemuxingをサポートする、ffmpegプロジェクトのライブラリ


muxingで音ズレが発生し、それがinverse telecine filterなどでフレームを落としたり複製したりしている時などは、harddupフィルターを-vfの最後に追加すると解決することがある。

AVIコンテナの制限事項

  1. fpsが固定していなければならない。NTSCと映画素材がミックスされている時などに問題がある。
  2. 音源はCBRか固定フレームサイズでなければならないので、Vorbisが使用不可。効率で劣るMP3やAC-3を使用しなければならない。

Matroska container (MKV)

Matroskaコンテナは無料でオープンスタンダードなコンテナフォーマット。AVIに格納出来ないものが格納可:
VBRの音源、variable framerate (VFR)、チャプター、字幕、ファイル添付、複数の音源トラック、エラー検知コード(EDC: error detection code)、AAC (advanced audio coding)、Vorbis, MPEG-4 AVC (H.264) など

  • Matroskaファイルの作成には、主にmkvtoolnixというツールが使われる。

MEncoderマニュアル(基本)のメモ

メモを取りながら目を通した。

コーデックの選択は、-oac(オーディオコーデック)と-ovc(ビデオコーデック)で

サポートされてるコーデックの確認

mencoder -ovc help

出力コンテナフォーマットの確認

mencoder -of help
  • AVIがMEncoderのネイティブなのでベスト
-of lavf で、出力ファイルの拡張子からコンテナを決定

(lavf = livavformat。これによってMEncoderが色々なコンテナにmuxできる)

two pass MPEG4 (DivX) は二回エンコードする方法を取っている。

一回目のエンコードで一時ファイル(*.log)が作られ、二回目のエンコードに利用される。画像品質が高い。

ムービーの画像サイズ変更は、スケールビデオフィルターによって行なわれる。

スケール指定は、-vf scale=幅:高さ
クオリティは-swsオプションで指定(省略時は2:bicubic)

MEncoderは入力ストリームのエンコードの他に、コピーすることも出来る。

ビデオストリームのコピー:-ovc copy

  • オーディオストリームのみをエンコードする時などに使える(未圧縮のPCMからMP3にする等)

オーディオストリームのコピー:-oac copy

  • 音声ファイル(MP3等)をmuxして出力したいときとか←-audiofile filenameオプションで指定。
  • 別のコンテナフォーマットに変更する際に-oac copyを用いる場合、元ファイルのオーディオフォーマットタグを保持するために、-fafmttagの指定が必要になることがある。オーディオフォーマットタグはcodecs.confでリストを確認できる。
その他
  • JPEGPNGといった画像から動画を作成出来る。
  • DVDの字幕を抜き出してVOBsubファイル(.idxと.subからなる)を作れる。

MacPortsのまとめ

毎回使おうとするたびに「コマンド何だっけ?」→googleとなるので、まとめる。

よく使うコマンド

レポジトリから最新情報を取得(-vで詳細出力)
sudo port -v selfupdate
ソフトウェアがMacPortsでインストール可能か確認
port search php5
ソフトウェアの詳細情報を確認
port info php5
インストールオプションの詳細を確認
port variants php5
インストールする(+でインストールオプションの指定)
sudo port -v install php5 +apache2 +mysql5
ビルドに失敗したら
sudo port clean php5

で作業ディレクトリをクリアする

以下、勉強メモ

参考:MacPorts Guide

MacPortsって何?
  • オープンソースのソフトウェアのコンパイル、インストール、管理が簡単に出来るシステム
  • 一つのコマンドでダウンロード、コンパイル、アプリケーションとライブラリのインストールが行なえる
  • 依存するソフトウェアも一緒にインストールしてくれる
  • アンインストールやアップグレードも出来る
  • インストールされたソフトウェアは、OSやベンダーのソフトウェアと衝突しない。(/opt/local/にインストールされる)
  • Mac OSXで開発されている。BSDUnixなOSで使える
selfupdate : 自己更新

portツリーの更新(MacPortsポートレポジトリの内容と同期させる)
このときMacPorts本体も最新にアップグレードされる。

sudo port -v selfupdate

vオプションで詳しく出力(verboseのv)。もっと詳しく知りたい場合は-dオプション(debugのd)。

  • sudoを忘れないようにする!

※syncはportツリーの更新のみ行ない、MacPortsの更新はしない。Mac OSX以外のOSでselfupdateの代わりに使用する。OSXの場合はselfupdateが推奨される。

search : ポートの検索。

部分文字列でもマッチする

port search vim 
info : ポートの説明やメンテナー等の表示
port info vim
variants : バリアント(インストール時のオプション)の表示
port variants vim
install : インストールする
sudo port -v install vim

sudoを忘れないようにする!-vオプションで詳しく出力
バリアントを指定するには、

sudo port install fetchmail +ssl
uninstall : アンインストールする
port uninstall vim

ただしそのポートが他のポートから依存されている場合は、削除されない。

clean : ビルドに使われるファイルの削除
  • --work 作業ファイルの削除(オプションを省いたときのデフォルト)
  • --dist 配布ファイルの削除(tarball等)
  • --archive archiveファイルの削除
  • --all 上の三つを削除
port clean --all vim
installed : インストール済みポートのバージョン、バリアント、状態を表示
port installed vim

ポート名を省略するとインストールしたもの全て表示

contents : インストールされたポートの各ファイルのパスを表示
port contents vim
deps : そのポートが依存するポートを表示
port deps vim
dependents : そのポートに依存しているポートを表示
port dependents openssl
outdated : アップデート可能なポートを表示
port outdated

※selfupdate後に使用しなければ意味がない

upgrade : ポートとその依存ファイルをアップグレードする。
sudo upgrade vim

古いバージョンはアンインストールされず、非アクティブ化される。
古いバージョンをアンインストールするには、-uオプションを付ける。

MacPortsのポートファイルとは

  • ポートの名称、バージョン、説明、メンテナの名前、配布元、依存、バリアント、configure引数、と言ったものが書かれている
  • TCLというスクリプト言語が使われている
フェイズ:
  1. Fetch
  2. Extract
  3. Patch パッチファイル(diff等で作成されたもの)の適用
  4. Configure
  5. Build ※一般で言うmakeのこと
  6. Destroot ※一般で言うmake installのこと