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" にあるバグ。

続きを読む

YouTube に高音質でアップロードできる動画ファイルを作るシェル・スクリプト (改良 MEncoder 版)

2008-02-17 追記

  • OFPS が指定されない場合のエラーを直した。

改良した

ウェブをさまよってて MEncoder で 2 パス・エンコードする方法がわかったので、"YouTube に高音質でアップロードできる動画ファイルを作るシェル・スクリプト - だらりな。" で書いたシェル・スクリプトをアップデート (ちなみに、ほぼニコニコ動画の転載専用であることに変わりはなし)。他にもいろいろ改良した。

  • MEncoder だけで OK なようにした (前のは FFmpeg も使ってた)。
  • 画質の良くなるエンコード・オプションをつけた (公式ドキュメントの "6.1. Selecting codecs and container formats" の一番下に書いてるやつ)。文字が微妙に読みやすくなったりする感じ。
  • 画質が良くなったかどうかは確認できないけど、なんとなく 3 パス・エンコードするようにした。
  • YouTubeアスペクト比 16:9 の FLV ファイルでも 4:3 で再生しちゃう (縦長になる) みたいなので (sm1852802 で気づいた)、自動で上下に黒い部分を足して 4:3 にするようにした。
  • アスペクト比が設定されてる場合も対応できるようにした (つもりだ) けど、そもそも FLV ファイルではアスペクト比の指定はできないのかもしれない。
  • 静止映像の動画でもシークできるように、10 秒に 1 度はキー・フレームが入るようにした。関係なかった。どうやればシークできるようになるんだろ。
  • いろいろメッセージを出すようにした。
  • しかし、どんくさいシェル・スクリプトであることには変わりなし。非整数の計算方法がわからなかったので、文字列操作で小数点を取り除くとかむちゃくちゃやってる。*1

エンコード例はこんな感じ (結局 The Idolm@ster のリミックスものをエンコードしてる……)。

ところで、YouTube のプレイヤーはデブロッキング・フィルタが入ってるのか (ていうか、それがたぶんふつうなのか)。フィルタを全部はずした MPlayer で見たら、もっとブロック・ノイズが目立ってた。

どんくさいシェル・スクリプト

*1:bc ってのは使いかたがわからなくて、awk でできるのがわかったけど、もうやめた。

続きを読む

YouTube に高音質でアップロードできる動画ファイルを作るシェル・スクリプト (改良 FFmpeg 版)

2008-02-18 追記

外部に MP3 ファイルがなかった場合の処理がおかしかったので修正した。

FFmpeg 版も改良しておく

"YouTube に高音質でアップロードできる動画ファイルを作るシェル・スクリプト (改良 MEncoder 版) - だらりな。" のシェル・スクリプトでうまくエンコードできない動画があって、FFmpeg だとうまくエンコードできたので、FFmpeg を使ったほうも一応改良しておくことにした。ただし、こっちはあくまで非常時用。
たぶん、動画ファイル側のむちゃくちゃな自己申請が悪い。

$ mplayer -vo null -ao null -frames 0 -identify <ファイル名> 2> /dev/null | grep -e ^ID_
ID_VIDEO_ID=0
ID_AUDIO_ID=1
ID_FILENAME=<ファイル名>
ID_DEMUXER=lavfpref
ID_VIDEO_FORMAT=VP6F
ID_VIDEO_BITRATE=0
ID_VIDEO_WIDTH=512
ID_VIDEO_HEIGHT=384
ID_VIDEO_FPS=1000.000
ID_VIDEO_ASPECT=0.0000
ID_AUDIO_FORMAT=85
ID_AUDIO_BITRATE=112000
ID_AUDIO_RATE=44100
ID_AUDIO_NCH=2
ID_LENGTH=188.72
ID_VIDEO_CODEC=ffvp6f
ID_AUDIO_BITRATE=32000
ID_AUDIO_RATE=44100
ID_AUDIO_NCH=2
ID_AUDIO_CODEC=mp3

映像が 1000 fps とか音声が 32 kbps とかむちゃくちゃ。ID_VIDEO_BITRATE=0 ってのは、たぶん MPlayer のその部分が壊れてるか、まだ実装されてないかで、他の動画ファイルでもいっしょだけど。
それはともかく、MEncoder 版とほぼ同じ感じで改良した。

  • 画質改善オプションについては、そんなオプション知らないと怒られてしまったものをハズした。
  • FFmpeg で外部音声ファイルを使う方法もわかったのだけど、うまく mux できないと怒られるケースがあったので、結局その部分は MEncoder を使うことにした。

以下が問題の動画。MEncoderエンコードすると数秒の動画になってしまったのだけど、FFmpeg だとだいじょうぶだった。

どんくさいシェル・スクリプト

続きを読む

YouTube に高音質でアップロードできる動画ファイルを作るシェル・スクリプト

YouTube で再エンコードされないための条件

Vocaloid を使用して作られてるオリジナル曲を、ニコニコ動画から YouTube にかなり聴ける音質で転載してくれてる人たちがいるので、それを利用させてもらって Rimo にチャンネルを作ったりしてるのだけど ("Best of Vocaloid Original Songs" とか)、自分の好きな曲で転載されないものがあったりして、ちょっと歯がゆい思いをしてたのだった。
しかたがないので自分でやってみようかと、YouTube で再エンコードされない条件を Google してみたら、あっさり見つかった。

映像と音声、あわせて 340 kbps ぐらいまでなら OK らしい。
YouTube もそろそろ H.264 + HE-AAC に対応するんじゃないかという今日このごろ、微妙な時期ではあるけど試してみることにした。

試してみた

試してみたら、うまくいったぽい (2008-02-16 追記: 以下の動画は再エンコード版に差し替え済み。旧版はそのうち消すので。画質はわかるかわからないかぐらいに良くなった程度)。

気がつくと、Vocaloid 関連じゃなく The Idolm@ster 関連のリミックスをエンコードしてたけど、それはそれ。The Idolm@ster 関連も著作権者に怒られないぽいし、このリミックス、まともな音質のが YouTube に見つからなかったから (The Idolm@ster がすごいブームだったのはちょっと前だから、今後これをアップロードする人もいなさげだし)。
完全に音質重視で、音声は "http://blog.livedoor.jp/imoutoid/archives/50658756.html" からダウンロードできる MP3 に差し替え、映像は 15 fps、320 x 240 でエンコードした。
ところで、リミキサーの imoutoid 氏は最近 "STUDIO VOICE" 誌に載ったらしい。

作ったシェル・スクリプト

続きを読む