なんとな~くしあわせ?の日記

JavaとかAWSの設定とかをメモする技術ブログ

ffmpegを使ってみる

Windowsで鳴らした俺たちドザーは、OSがタダだからという理由でLinuxを使うことにしたが、
UbuntuFedoraと比べてCentosはデスクトップ用途に使いにくいようだ。
しかし、単なるサーバー用途でくすぶってるような俺たちじゃあない。
コンパイルさえ通りゃリソース次第でなんでもやってのける命知らず、
不可能を可能にし、巨大な悪を粉砕する、
俺たち特攻野郎Cチーム!

 俺たちは、makeの通らぬソースコードに敢えて挑戦する、
頼りにならない有象無象の特攻野郎Cチーム!

 助けを借りたいのは俺の方だ!”

今度は宗子時空さんの記事を頼りにエンコードしてみた。必要なソフトは省略。
生TSからiPod H.264 MP4にLinuxでトラコンできた日 :宗子時空

とりあえず自分が入力したコマンド。

[ffmpegで動画のみエンコ]
$ffmpeg -threads 2 -i koko_ni_video_ireru.ts -deinterlace -croptop 6 -cropbottom 6 -cropleft 8 -cropright 8 -s 480x272 -r 29.97 -vcodec libx264 -vpre default -g 300 -b 400000 -level 13 -sc_threshold 60 -refs 3 -maxrate 700000 -async 50 -f h264 koko_ha_output_desu.264

[mplayerで音声抜き出し]
$mplayer koko_ni_video_ireru.ts -vc null -vo null -ao pcm:file:kokoni_video_namae.wav:fast

追記:BSのファイルからwavを抜き出そうとすると

[root@localhost video]# mplayer oni-chan.ts
MPlayer SVN-r31628-4.1.2 (C) 2000-2010 MPlayer Team
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.

Playing oni-chan.ts.
TS file format detected.
VIDEO MPEG2(pid=320) AUDIO AAC(pid=321) NO SUBS (yet)! PROGRAM N. 211
VIDEO: MPEG2 1920x1080 (aspect 3) 29.970 fps 24000.0 kbps (3000.0 kbyte/s)
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Selected video codec: [ffmpeg2] vfm: ffmpeg (FFmpeg MPEG-2)
==========================================================================
==========================================================================

上のようなメッセージが出た後30分ぐらい処理が続き、何もファイルが生成されない、または0バイトのwavファイルが作られるという現象が起こるかもしれない。
ヒントになったのはこのサイトでした。
404 Not Found

結果から言えばオプションとして「-sid + 物理チャンネル」を付け加えてやれば問題なく音声が抽出できる。と言うかすでにrecpt1のほうでこのオプションが使えるので事前にdo-record.shにスクリプトを書いていたほうがいいのかもしれない。拡張子をmp4に変える。中身がH.264だったらmp4でもmkvでも変わらんだろうと判断。外人がmkvをよく使ってるのは字幕のオプションが優れてるからだと思う。

[root@localhost video]# MP4Box -fps 29.97 -add oni-chan.264 -new oni-chan-base.mp4
AVC-H264 import - frame size 848 x 480 at 29.970 FPS
AVC Import results: 54536 samples - Slices: 727 I 20081 P 33728 B - 1 SEI - 533 IDR
Stream uses forward prediction - stream CTS offset: 2 frames
Saving oni-chan-base.mp4: 0.500 secs Interleaving

faacを使ってwav→aac変換

[root@localhost video]# faac -o oni-chan.aac oni-chan.wav
Freeware Advanced Audio Coder
FAAC 1.26.1 (Nov 10 2008) UNSTABLE

Quantization quality: 100
Bandwidth: 16000 Hz
Object type: Low Complexity(MPEG-2) + M/S
Container format: Transport Stream (ADTS)
Encoding oni-chan.wav to oni-chan.aac
frame | bitrate | elapsed/estim | play/CPU | ETA
85285/85285 (100%)| 138.1 | 66.5/66.5 | 27.37x | 0.0

最後にaacをmp4にくっつけて完成!

[root@cathymaiden video]# MP4Box -add oni-chan.aac oni-chan-base.mp4
AAC import - sample rate 48000 - MPEG-2 audio - 2 channels
Saving oni-chan-base.mp4: 0.500 secs Interleaving

再生してみる。

音ズレとかもないし、画質も自分的には満足。しかし・・・


サイズ: 1.5 Gバイト (1643361920 バイト)

?!



ーーー

宗子さんのところでは「-rc_eq ‘blurCplx^(1-qComp)’」となっているが、どうやらそのコマンドを入れなくてもよくなったらしいので省略。エラーが出るので-vpreをdefaultに設定。後はビットレート(-b)を変えたり。ffmpegがTSファイルを食えてしまえば、後は画質が問題。参考にネットに転がってるファイルを見てるとビットレートが「23,000,000」とかなってる…そして解像度が848x480。このへんをいじっていけば理想的なファイルができそう。

むー、そしてそのファイルは400MBぐらい。1TB(1000GB)(のHDD)÷0.4GB(アニメ1話) = 2500話ぐらい…?
2500÷12 = 208タイトル?まあ十分かな。




追記:容量圧縮できてねえ・・・どうやったらあのクオリティが出せるんだろう