nicovideo-dl が Debian 公式パッケージになったので試してみた

"#462083 - ITP: nicovideo-dl -- download videos from www.nicovideo.jp - Debian Bug report logs" が Fixed になってパッケージになってたので、とりあえず sudo aptitude install nicovideo-dl した。
man nicovideo-dl して -n --netrc / use .netrc authentication data なんてオプションがあるので試してみたのだけど、~/.netrc にこんなふうに書いておけばいいみたい。

machine		nicovideo
login		<メール・アドレス>
password	<パスワード>

nicovideo-dl -n http://www.nicovideo.jp/watch/sm2080937 とかしてダウンロードできた。でも、SWF ファイルも拡張子 flv で保存しちゃうみたい。/usr/bin/nicovideo-dl を grep して mp4 もヒットしないから、たぶん MP4 ファイルも。あと、タイトル取得オプションがあるけど失敗する。
Python は (も) まったくわからないし、直せません。

bash-completion が壊れっぱなしなので zsh を導入した

Debian Sid に bash-completion というパッケージができて (bash から分割されて) 以来、bash の補完機能がずっと壊れてる ("#468254 - bash-completion: strange behavior on ls and spaces - Debian Bug report logs")。マルチメディア・ファイルを中心に、ふつうにファイル名にスペースを入れてるので非常に困ってたところ、今日、それが直ったという 20060301-4 が来た。
直ってない (T_T
というわけで、ここはへたれユーザらしく、しばらく bash を使わないことにして、以前から興味はあったけど、めんどうで手を出してなかった zsh をインストールした。
zsh すると zsh-newuser-install というのが立ち上がって、インタラクティヴに設定開始。とりあえず、いろんな機能をがんがん有効にした。
作成された設定ファイルを source ~/.zshrc して読みこませると、プロンプトにホスト名しか出ない (カレント・ディレクトリが出ないと迷子になる……)。bash パッケージについてた /etc/skel/.bashrc とかは親切だったのだなぁと思いながら、/usr/share/doc/zsh/examples/zshrc.gz からプロンプト設定部分をコピペしたのだけど、これ、右端にカレント・ディレクトリを表示するようになってたのだった。
使えない (T_T
gnome-terminal をかなり大きく開いて使ってるので、カーソルと右端のカレント・ディレクトリ表示部分が離れすぎてて、いちいち視線移動が必要で全然うれしくないのだった。
しかたがないので "http://journal.mycom.co.jp/column/zsh/022/index.html" というのを探し出してきて、とりあえずここからコピペさせてもらった。
zsh のパッケージは、自分でごりごりカスタマイズしたりしない人間用には作られてないのか。でも、コマンドのオプションの補完とかで、パワフルさはさっそく体感したので、少しずつ .zshrc その他を書いていくべし。
bash のときのように ls --color=auto の出力をカラフルにしたいのに、その方法がいきなりわからなかったりするけど (dircolors に zsh 用の出力がない)、そのうちなんとかなるだろう。

昨日のメンテナンスで YouTube のプレイヤーがちょっと変わったらしい

They changed their swf player application, now it doesn't upscales vertically videos to fit the entire player box size as they did before, I thought that they were hardcoding that aspect ratio by adding black bars at the transcoding stage.

or in better words the Youtube flash video player now upscales while preserving the original aspect ratio, from now I don't have to add black bars to a video if I want to employ aspect ratio correction for the youtube flash video player

YouTube offering higher quality video / Stage6 ends services! - Page 9 - VideoHelp Forum

アスペクト比を保つようになった (16:9 の映像を 4:3 で再生したりすることがなくなった ) らしい。いまさらとはいえレターボックス化が不要になったというわけで、4:3 より横長のままにした (上下に黒い帯をつけないままにした) FLV ファイルをふたつアップロードしてみたのだけど、正しいアスペクト比で再生されたのはひとつだった。
しかも、うまくいったほうをここに貼ってみたら、4:3 に (縦長に) 引き延ばされて再生された。まだいろいろ対応途中らしい。

YouTube に再エンコードされない FLV ファイルを作るシェル・スクリプト (汎用)

2008-03-21 追記

  • LAME に渡す設定をプリセットにした。たしか LAME はこのへん賢いという話だったので。
  • アスペクト比の指定がある動画、あるいはアスペクト比を強制的に指定した場合に自動クロップを行う処理がおかしかったので修正した。

改良した

YouTube でも余命短い FLV だけど、ついでなんで "ニコニコ動画の FLV ファイルを音質劣化なしで YouTube 用 FLV ファイルに変換するシェル・スクリプト - だらりな。" のシェル・スクリプトを汎用化した。

  • 音声もエンコードできるようにして、ニコニコ動画の FLV ファイルなど、音声が MP3 の動画ファイル以外でも FLV に変換できるようにした。
  • FFmpeg でパッドのサイズも偶数じゃないといけないのに気づき、そうなるように修正した。
  • 画質が良くなる (らしい) エンコード・オプションを追加した (しかし、これのおかげでエンコード時間は激延び)。

マルチ・パス・エンコーディングするのは映像だけだから、音声のエンコードは最後のパスだけでいいんだけど、まあいいかなと思って毎回やってる。
ところで、うちの MEncoder (Debian 非公式パッケージ 1:1.0.rc2svn20071207-0.3) は AVI ファイルの音声をリサンプリングしようとすると (?)、"Blocktype == 0 and window-switching == 1 not allowed." とかいうエラーを何度も吐いたすえに "セグメンテーション違反です" といって落ちる感じ。FFmpeg だとだいじょうぶだけど。

エンコード

ちょっと AMV を試してみた。Tsukin "Bittersweet Desire"。"コゼットの肖像" 使いで、音楽は Vast の "Pretty When You Cry" って曲らしい。なにもこんな低ビットレート向きじゃない動画で試すことはないのだけど、好きなので……。
まず、このシェル・スクリプトを使ってエンコードしたもの。

作者 (編集者) 本人が YouTube おまかせエンコードで公開してるもの (しばらくすると H.264 + AAC になって、キレイになっちゃってるかもしれない)。

上の、このシェル・スクリプトを使ってエンコードしたほうは、ブロック・ノイズを抑えるために解像度を 160 x 120 にしてしまった。ほとんど音声のことしか考えずにエンコードしてるときは気にしなかったのだけど、映像を気にしてみると、ブロック・ノイズが出てるよりはぼやけてるほうがいいと思ったので。解像度を思いきって落としたおかげで、YouTube おまかせエンコードよりは見れるものになったと思う。
FPS も落とそうと思ったのだけど、映像と音声のシンクロに命かけてる AMV でそれをやると残念な結果になってしまったので、やめておいた。うまい方法もあるのかもしれないけど。
音声は 80 kbps。実はこのビットレートは厳しい。同じ "コゼットの肖像" 使いの SenshiMamoru "Darkglow" (曲は Mute Math の "Chaos") をエンコードしてみたら、80 kbps だとノイズが入ってしまった (2008-03-21 追記: 元動画ファイルの音声にノイズが入ってて、それが増幅されちゃうみたい)。他に、これも大好きな、"Animatrix" 使いの Ileia "Don't Break" (曲は Venus Hum の "Do You Want to Fight Me?") をエンコードしてみたときも、音がおかしくなった。
ついでにもうひとつ。エンコード条件は "Bittersweet Desire" と同じ。

余命短いシェル・スクリプト

続きを読む

ニコニコ動画の FLV ファイルを音質劣化なしで YouTube 用 FLV ファイルに変換するシェル・スクリプト

2008-03-19 追記

  • どんくさいミス (シェル・スクリプトなのに数値比較を不等号でやってた) を修正。
  • FFmpeg のサイズ指定はパッド部分を含まないものなのに含めてたのを修正。
  • FFmpegエンコード・オプションにクロップ処理をつけ忘れてたのを修正。

改良した

なんとなくタイトルを内容にそったものに変えたけど、"YouTube に高音質でアップロードできる動画ファイルを作るシェル・スクリプト (改良 MEncoder 版) - だらりな。" の改良版。
ニコニコ動画がついに MP4 (H.264 + AAC) 対応し ("http://blog.nicovideo.jp/niconews/2008/03/000956.html")、YouTube も同様に対応しはじめてる ("YouTube Videos in High Quality") 今日このごろ、余命は短いけどちまちまといじってたものをメモがわりに残しておく。
以下、改良点。

  • MEncoder 版と FFmpeg 版にわけてたのをひとつに統合。設定でどちらのエンコーダを使うか選べるようにした。ちょっとすっきり。
  • 設定やファイルの妥当性をチェックするようにした。
  • 元動画ファイルと外部の音声ファイルで長さがちがう場合、どこで合わせるか指定できるようにした。
  • awk の使いかたをちょっと憶えたので、どんくさいハックはやめて小数を扱う計算を awk でやるようにしたりした*1。すっきり。
  • 元動画ファイルのアスペクト比を強制指定できるようにした。アスペクト比の狂った映像用。
  • 元動画ファイルの黒枠を自動でクロップできるようにした。
  • 指定した FPS が元動画ファイルの FPS より大きい場合、自動で元動画ファイルの FPS に合わせるようにしたり、柔軟に FPS を指定できるようにしたりした。
  • MEncoder を使う場合、エンコードのパス数を指定できるようにした。
  • FFmpeg のバグが修正された*2ので、FFmpeg を使う場合、MEncoder を併用しなくていいようにした。すっきり。

たぶんこれくらい。
エンコード例も貼っておく。オリジナルは "【初音ミク】ソニック☆サイクラー【オリジナル】 - ニコニコ動画"。

これ、ニコニコ動画の FLV ファイルだと 512 x 389 になってて (ふつうは 512 x 384)、アスペクト比を保ったまま 4:3 にしようとすると左右にも黒帯がついちゃって、なんだかみっともないから、このために自動でクロップできるようにしたのだった。zoome の MP4 ファイルを使えばいいというのはあとで気づいた。Stage 6 に高画質版が公開されてたというのを知ったときには、Stage 6 はもう店じまいしてた。
ところで、FFmpeg はいろいろ不親切。たとえば、映像サイズが縦横それぞれ偶数じゃないとエラーを吐く。MEncoder は勝手に良きにはからってくれるのに。
あとは、音声もコピーだけじゃなくエンコードもできるようにしよう。

ちょっとどんくささの減ったシェル・スクリプト

*1:bc を使う方法もわかったけど awk のほうが条件式とか便利だし、なによりうち bc 入ってなかったから。awk のほうが計算式は見にくくなるけど、汎用性があるのでこれでいいかと。

*2:Debian 非公式パッケージ 3:20071206-0.1 唯一の変更点。"http://www.nabble.com/Remux-problem-td15137531.html" にあるバグ。

続きを読む

MPlayer を使って動画ファイルの情報を表示する

これ、ホントは "YouTube に高音質でアップロードできる動画ファイルを作るシェル・スクリプト (改良 MEncoder 版) - だらりな。" の一部を改良しただけなのだけど、awk の使いかたがちょっとわかってうれしかったので、ムダにメモしておく。

mplayer -vo null -ao null -frames 0 -identify "$1" 2> /dev/null | awk '/^=+$/ { exit; } /^ID_/ { print; }'

MPlayer の出力から単純に ID_ ではじまる行を grep すると、音声デコーダの出力が入っちゃって、これがよくまちがった音声ビットレートを出力してくれるものだから (もともとおかしい音声ストリームのヘッダ情報をすなおに出力したりしてるだけなのかもしれないけど)、この部分を省きたいなと思ってたのだった。
欲しい情報といらない情報の間に "=" が 74 個ってだけの行があるので、これ以後を捨てればいいのだけど、どうすればシンプルにできるのかがわからなくて調べてたら、awk でやればいいとわかった。

続きを読む

YouTube に H.264 でアップロードして再エンコード回避は無理なんじゃないかな (今のところは?)

簡単なテストをしてみた。YouTubeエンコードされた MP4 ファイル (H.264 + AAC) をダウンロードし、それをアップロードして今度はそこから MP4 ファイルをダウンロードする。
結果は、みごとにエンコードしなおされてしまったのだった (2008-03-13 現在)。

$ ls -ltr
合計 35540
-rw-r--r-- 1 ******* ******* 19357697 2008-03-08 02:00 v3DG4vC0n5Q.mp4
-rw-r--r-- 1 ******* ******* 17030101 2008-03-13 18:27 kXCp51APAq4.mp4

FLV ファイルの場合は、あらかじめ 350 kbps 以下におさめておけば YouTube によるエンコードをほぼ回避できるけど*1、MP4 ファイルの場合は、YouTubeエンコードしないと制限内におさまらないかどうかの判定自体やってないんじゃないかな。少なくとも今のところは。

*1:他にも条件があるぽい。一度だけだけど全然だいじょうぶなはずのファイルをエンコードしなおされた。

続きを読む