PT2で録画したデータをエンコードしてiPhoneで再生する

前回に続き、foltia導入の準備。今回はfoltiaGUI環境のインストールではなく、録画したTSファイルをiPhoneで再生できるようにエンコードする部分のメモ。WEBやDBなどを一度に設定すると動作しなかった時に原因の切り分けに時間がかかるので、先に録画→エンコードの動作を確認しておく。この記事から読まれる方は、一度前回の記事を参照して欲しい。

目次
  1. リポジトリの追加
  2. wine、mplayerImageMagick、yasm、ffmpegのインストール
  3. MP4Boxのインストール
  4. TsSplitter.exe、tss.py、neroAacEncの保存
  5. エンコードテスト
  6. ffmpegエンコード設定を確認

リポジトリの追加

wineやmplayerなど、公式リポジトリではインストールできないソフトをインストールできるようにするため、リポジトリを追加する。

[foltia@foltiadev ~]$ su -
パスワード:

[root@foltiadev ~]# vi /etc/yum.repos.d/CentOS-Dag.repo

[root@foltiadev ~]# cat /etc/yum.repos.d/CentOS-Dag.repo
[dag]
name=CentOS-$releasever - Dag
baseurl=http://ftp.riken.jp/Linux/dag/redhat/el$releasever/en/$basearch/dag
        http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
enabled=0
gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt

常にdagリポジトリを使用する場合、上記ファイルのenabled=0をenabled=1に変更する。今回はインストールの都度、リポジトリを指定することとして、enabled=0としている。

wine、mplayerImageMagick、yasm、ffmpegのインストール

yumでインストールできるソフトウェアをインストールする。一度にインストールして問題ない。例としてwineのインストールログを残す。

[root@foltiadev ~]# yum --enablerepo=dag install wine
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * addons: ftp.riken.jp
 * base: ftp.riken.jp
 * dag: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
dag                                                                                      | 1.1 kB     00:00     
dag/primary                                                                              | 3.7 MB     00:45     
dag                                                                                                 10271/10271
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package wine.i386 0:1.0.1-1.el5.rf set to be updated
--> Processing Dependency: wine-twain = 1.0.1-1.el5.rf for package: wine
--> Processing Dependency: wine-esd = 1.0.1-1.el5.rf for package: wine
--> Processing Dependency: wine-jack = 1.0.1-1.el5.rf for package: wine
--> Processing Dependency: wine-capi = 1.0.1-1.el5.rf for package: wine
--> Processing Dependency: wine-nas = 1.0.1-1.el5.rf for package: wine
--> Processing Dependency: wine-core = 1.0.1-1.el5.rf for package: wine
--> Processing Dependency: wine-ldap = 1.0.1-1.el5.rf for package: wine
--> Processing Dependency: wine-cms = 1.0.1-1.el5.rf for package: wine
--> Running transaction check
---> Package wine-capi.i386 0:1.0.1-1.el5.rf set to be updated
---> Package wine-cms.i386 0:1.0.1-1.el5.rf set to be updated
---> Package wine-core.i386 0:1.0.1-1.el5.rf set to be updated
---> Package wine-esd.i386 0:1.0.1-1.el5.rf set to be updated
---> Package wine-jack.i386 0:1.0.1-1.el5.rf set to be updated
---> Package wine-ldap.i386 0:1.0.1-1.el5.rf set to be updated
---> Package wine-nas.i386 0:1.0.1-1.el5.rf set to be updated
---> Package wine-twain.i386 0:1.0.1-1.el5.rf set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================================================
 Package                     Arch                  Version                           Repository            Size
================================================================================================================
Installing:
 wine                        i386                  1.0.1-1.el5.rf                    dag                  3.0 k
Installing for dependencies:
 wine-capi                   i386                  1.0.1-1.el5.rf                    dag                   16 k
 wine-cms                    i386                  1.0.1-1.el5.rf                    dag                   65 k
 wine-core                   i386                  1.0.1-1.el5.rf                    dag                   36 M
 wine-esd                    i386                  1.0.1-1.el5.rf                    dag                   43 k
 wine-jack                   i386                  1.0.1-1.el5.rf                    dag                   13 k
 wine-ldap                   i386                  1.0.1-1.el5.rf                    dag                  252 k
 wine-nas                    i386                  1.0.1-1.el5.rf                    dag                   12 k
 wine-twain                  i386                  1.0.1-1.el5.rf                    dag                   23 k

Transaction Summary
================================================================================================================
Install      9 Package(s)         
Update       0 Package(s)         
Remove       0 Package(s)         

Total download size: 37 M
Is this ok [y/N]: y
Downloading Packages:
(1/9): wine-1.0.1-1.el5.rf.i386.rpm                                                      | 3.0 kB     00:00     
(2/9): wine-nas-1.0.1-1.el5.rf.i386.rpm                                                  |  12 kB     00:00     
(3/9): wine-jack-1.0.1-1.el5.rf.i386.rpm                                                 |  13 kB     00:00     
(4/9): wine-capi-1.0.1-1.el5.rf.i386.rpm                                                 |  16 kB     00:00     
(5/9): wine-twain-1.0.1-1.el5.rf.i386.rpm                                                |  23 kB     00:00     
(6/9): wine-esd-1.0.1-1.el5.rf.i386.rpm                                                  |  43 kB     00:00     
(7/9): wine-cms-1.0.1-1.el5.rf.i386.rpm                                                  |  65 kB     00:01     
(8/9): wine-ldap-1.0.1-1.el5.rf.i386.rpm                                                 | 252 kB     00:02     
(9/9): wine-core-1.0.1-1.el5.rf.i386.rpm                                                 |  36 MB     07:07     
----------------------------------------------------------------------------------------------------------------
Total                                                                            86 kB/s |  37 MB     07:14     
警告: rpmts_HdrFromFdno: ヘッダ V3 DSA signature: NOKEY, key ID 6b8d79e6
dag/gpgkey                                                                               | 1.6 kB     00:00     
Importing GPG key 0x6B8D79E6 "Dag Wieers (Dag Apt Repository v1.0) <dag@wieers.com>" from http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt

Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : wine-core                                                                                1/9 
  Installing     : wine-cms                                                                                 2/9 
  Installing     : wine-jack                                                                                3/9 
  Installing     : wine-twain                                                                               4/9 
  Installing     : wine-esd                                                                                 5/9 
  Installing     : wine-nas                                                                                 6/9 
  Installing     : wine-capi                                                                                7/9 
  Installing     : wine-ldap                                                                                8/9 
  Installing     : wine                                                                                     9/9 

Installed:
  wine.i386 0:1.0.1-1.el5.rf                                                                                    

Dependency Installed:
  wine-capi.i386 0:1.0.1-1.el5.rf     wine-cms.i386 0:1.0.1-1.el5.rf       wine-core.i386 0:1.0.1-1.el5.rf    
  wine-esd.i386 0:1.0.1-1.el5.rf      wine-jack.i386 0:1.0.1-1.el5.rf      wine-ldap.i386 0:1.0.1-1.el5.rf    
  wine-nas.i386 0:1.0.1-1.el5.rf      wine-twain.i386 0:1.0.1-1.el5.rf    

Complete!

以下、同様にしてmplayerImageMagick、yasm、ffmpegをインストールする。

MP4Boxのインストール

MP4Boxはyumではインストールできないため、ソースをコンパイルしてインストールする。ダウンロード、解凍と順調に進んでいたが、コンパイル時にエラーが発生したので修正する。

[foltia@foltiadev ~]$ wget http://downloads.sourceforge.net/gpac/gpac-0.4.5.tar.gz
--2010-04-04 11:17:14--  http://downloads.sourceforge.net/gpac/gpac-0.4.5.tar.gz
downloads.sourceforge.net をDNSに問いあわせています... 216.34.181.59
downloads.sourceforge.net|216.34.181.59|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: http://jaist.dl.sourceforge.net/project/gpac/GPAC/GPAC%200.4.5/gpac-0.4.5.tar.gz [続く]
--2010-04-04 11:17:15--  http://jaist.dl.sourceforge.net/project/gpac/GPAC/GPAC%200.4.5/gpac-0.4.5.tar.gz
jaist.dl.sourceforge.net をDNSに問いあわせています... 150.65.7.130
jaist.dl.sourceforge.net|150.65.7.130|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 4269054 (4.1M) [application/x-gzip]
`gpac-0.4.5.tar.gz' に保存中

100%[======================================================================>] 4,269,054    107K/s 時間 31s     

2010-04-04 11:17:46 (137 KB/s) - `gpac-0.4.5.tar.gz' へ保存完了 [4269054/4269054]

[foltia@foltiadev ~]$ tar xvzf gpac-0.4.5.tar.gz
gpac/

〜(中略)〜

[foltia@foltiadev ~]$ cd gpac

[foltia@foltiadev gpac]$ sh ./configure 

which: no wx-config in (/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/foltia/bin)

** System Configuration
Install prefix: /usr/local
Source path: /home/foltia/gpac
C compiler: gcc
make: make
CPU: x86
Big Endian: no

** GPAC 0.4.5 Core Configuration **
debug version: no
GProf enabled: no
Memory tracking enabled: no
read-only version: no
fixed-point version: no
IPV6 Support: yes
IsoMedia MovieFragments support: yes
SVG Support disabled: no

** Detected libraries **
zlib: system
OSS Audio: yes
ALSA Audio: yes
Jack Audio: no
PulseAudio Audio: no
X11 Shared Memory support: yes (path: /usr/X11R6)
X11 XVideo support: yes
SDL Support: yes
OpenGL support: yes
TinyGL support: no
OpenSSL support: yes
Mozilla XUL/GECKO support: no
Joystick support: no
Renoir enabled: no
DVB Support: yes
XMLPRC Support: no
wxWidgets support: no

** Extra Libraries used **
SpiderMonkey: no
FreeType: system
JPEG: system
OpenJPEG: no
PNG: system
MAD: no
FAAD: no
XVID: no
FFMPEG: no
Xiph OGG: system
Xiph Vorbis: system
Xiph Theora: no
A52 (AC3): no



Creating config.mak
Done - type 'make help' for make info, 'make' to build

[foltia@foltiadev gpac]$ make
make -C src all
make[1]: ディレクトリ `/home/foltia/gpac/src' に入ります
gcc -O3  -fno-strict-aliasing -Wno-pointer-sign -I/home/foltia/gpac/include  -I../ -DGPAC_HAVE_CONFIG_H  -c -o utils/os_divers.o utils/os_divers.c 

〜(中略)〜

gcc -O3  -fno-strict-aliasing -Wno-pointer-sign -w -I/home/foltia/gpac/include -c -o mcrypt/sha1.o mcrypt/sha1.c 
ar cr ../bin/gcc/libgpac_static.a utils/os_divers.o utils/os_net.o utils/os_module.o utils/os_thread.o utils/list.o utils/base_encoding.o utils/bitstream.o utils/color.o utils/configfile.o utils/downloader.o utils/error.o utils/math.o utils/path2d.o utils/path2d_stroker.o utils/module.o utils/token.o utils/uni_bidi.o utils/url.o utils/utf.o utils/xml_parser.o mcrypt/cbc.o mcrypt/cfb.o mcrypt/ctr.o mcrypt/des.o mcrypt/ecb.o mcrypt/g_crypt.o mcrypt/ncfb.o mcrypt/nofb.o mcrypt/ofb.o mcrypt/rijndael-128.o mcrypt/rijndael-192.o mcrypt/rijndael-256.o mcrypt/stream.o mcrypt/tripledes.o mcrypt/sha1.o  scenegraph/base_scenegraph.o scenegraph/mpeg4_animators.o scenegraph/commands.o scenegraph/mpeg4_nodes.o scenegraph/mpeg4_valuator.o scenegraph/vrml_interpolators.o scenegraph/vrml_proto.o scenegraph/vrml_route.o scenegraph/vrml_script.o scenegraph/vrml_smjs.o scenegraph/vrml_tools.o scenegraph/x3d_nodes.o scenegraph/svg_attributes.o scenegraph/svg_types.o scenegraph/svg_smjs.o scenegraph/smil_anim.o scenegraph/smil_timing.o scenegraph/svg_properties.o scenegraph/dom_events.o  scenegraph/dom_smjs.o scenegraph/xbl_process.o scenegraph/xml_ns.o ietf/rtcp.o ietf/rtp.o ietf/rtp_packetizer.o ietf/rtp_pck_3gpp.o ietf/rtp_pck_mpeg12.o ietf/rtp_pck_mpeg4.o ietf/rtsp_command.o ietf/rtsp_common.o ietf/rtsp_response.o ietf/rtsp_session.o ietf/sdp.o ietf/rtp_depacketizer.o bifs/arith_decoder.o bifs/bifs_codec.o bifs/bifs_node_tables.o bifs/com_dec.o bifs/com_enc.o bifs/conditional.o bifs/field_decode.o bifs/field_encode.o bifs/memory_decoder.o bifs/predictive_mffield.o bifs/quantize.o bifs/script_dec.o bifs/script_enc.o bifs/unquantize.o isomedia/avc_ext.o isomedia/box_code_3gpp.o isomedia/box_code_apple.o isomedia/box_code_base.o isomedia/box_code_isma.o isomedia/box_code_meta.o isomedia/box_dump.o isomedia/box_funcs.o isomedia/data_map.o isomedia/hint_track.o isomedia/hinting.o isomedia/isma_sample.o isomedia/isom_intern.o isomedia/isom_read.o isomedia/isom_store.o isomedia/isom_write.o isomedia/media.o isomedia/media_odf.o isomedia/meta.o isomedia/movie_fragments.o isomedia/sample_descs.o isomedia/stbl_read.o isomedia/stbl_write.o isomedia/track.o isomedia/tx3g.o  odf/desc_private.o odf/descriptors.o odf/ipmpx_code.o odf/ipmpx_dump.o odf/ipmpx_parse.o odf/oci_codec.o odf/odf_code.o odf/odf_codec.o odf/odf_command.o odf/odf_dump.o odf/odf_parse.o odf/qos.o odf/slc.o  media_tools/av_parsers.o media_tools/avilib.o media_tools/gpac_ogg.o media_tools/img.o media_tools/ismacryp.o media_tools/isom_hinter.o media_tools/isom_tools.o media_tools/media_export.o media_tools/media_import.o media_tools/mpeg2_ps.o media_tools/text_import.o media_tools/saf.o media_tools/mpegts.o media_tools/vobsub.o scene_manager/loader_bt.o scene_manager/loader_isom.o scene_manager/loader_qt.o scene_manager/loader_xmt.o scene_manager/scene_dump.o scene_manager/scene_manager.o scene_manager/scene_stats.o scene_manager/swf_parse.o scene_manager/swf_bifs.o scene_manager/text_to_bifs.o scene_manager/encode_cbk.o scene_manager/encode_isom.o scene_manager/loader_svg.o terminal/channel.o terminal/clock.o terminal/decoder.o terminal/term_node_init.o terminal/inline.o terminal/input_sensor.o terminal/media_control.o terminal/media_manager.o terminal/media_memory.o terminal/media_object.o terminal/media_sensor.o terminal/network_service.o terminal/object_browser.o terminal/object_manager.o terminal/terminal.o terminal/svg_external.o compositor/audio_input.o compositor/audio_mixer.o compositor/audio_render.o compositor/bindable.o compositor/camera.o compositor/compositor.o compositor/compositor_2d.o compositor/compositor_3d.o compositor/compositor_node_init.o compositor/drawable.o compositor/events.o compositor/font_engine.o compositor/hardcoded_protos.o compositor/mesh.o compositor/mesh_collide.o compositor/mesh_tesselate.o compositor/mpeg4_animstream.o compositor/mpeg4_audio.o compositor/mpeg4_background.o compositor/mpeg4_background2d.o compositor/mpeg4_bitmap.o compositor/mpeg4_composite.o compositor/mpeg4_form.o compositor/mpeg4_geometry_2d.o compositor/mpeg4_geometry_3d.o compositor/mpeg4_geometry_ifs2d.o compositor/mpeg4_geometry_ils2d.o compositor/mpeg4_gradients.o compositor/mpeg4_grouping.o compositor/mpeg4_grouping_2d.o compositor/mpeg4_grouping_3d.o compositor/mpeg4_layer_2d.o compositor/mpeg4_layer_3d.o compositor/mpeg4_layout.o compositor/mpeg4_lighting.o compositor/mpeg4_path_layout.o compositor/mpeg4_sensors.o compositor/mpeg4_sound.o compositor/mpeg4_text.o compositor/mpeg4_textures.o compositor/mpeg4_timesensor.o compositor/mpeg4_viewport.o compositor/navigate.o compositor/offscreen_cache.o compositor/svg_base.o compositor/svg_font.o compositor/svg_geometry.o compositor/svg_grouping.o compositor/svg_media.o compositor/svg_paint_servers.o compositor/svg_text.o compositor/texturing.o compositor/texturing_gl.o compositor/visual_manager.o compositor/visual_manager_2d.o compositor/visual_manager_2d_draw.o compositor/visual_manager_3d.o compositor/visual_manager_3d_gl.o compositor/x3d_geometry.o laser/lsr_enc.o laser/lsr_dec.o laser/lsr_tables.o
ranlib ../bin/gcc/libgpac_static.a
gcc -shared "-Wl,-soname,libgpac.so" -Wl --warn-common -o ../bin/gcc/libgpac.so utils/os_divers.o utils/os_net.o utils/os_module.o utils/os_thread.o utils/list.o utils/base_encoding.o utils/bitstream.o utils/color.o utils/configfile.o utils/downloader.o utils/error.o utils/math.o utils/path2d.o utils/path2d_stroker.o utils/module.o utils/token.o utils/uni_bidi.o utils/url.o utils/utf.o utils/xml_parser.o mcrypt/cbc.o mcrypt/cfb.o mcrypt/ctr.o mcrypt/des.o mcrypt/ecb.o mcrypt/g_crypt.o mcrypt/ncfb.o mcrypt/nofb.o mcrypt/ofb.o mcrypt/rijndael-128.o mcrypt/rijndael-192.o mcrypt/rijndael-256.o mcrypt/stream.o mcrypt/tripledes.o mcrypt/sha1.o  scenegraph/base_scenegraph.o scenegraph/mpeg4_animators.o scenegraph/commands.o scenegraph/mpeg4_nodes.o scenegraph/mpeg4_valuator.o scenegraph/vrml_interpolators.o scenegraph/vrml_proto.o scenegraph/vrml_route.o scenegraph/vrml_script.o scenegraph/vrml_smjs.o scenegraph/vrml_tools.o scenegraph/x3d_nodes.o scenegraph/svg_attributes.o scenegraph/svg_types.o scenegraph/svg_smjs.o scenegraph/smil_anim.o scenegraph/smil_timing.o scenegraph/svg_properties.o scenegraph/dom_events.o  scenegraph/dom_smjs.o scenegraph/xbl_process.o scenegraph/xml_ns.o ietf/rtcp.o ietf/rtp.o ietf/rtp_packetizer.o ietf/rtp_pck_3gpp.o ietf/rtp_pck_mpeg12.o ietf/rtp_pck_mpeg4.o ietf/rtsp_command.o ietf/rtsp_common.o ietf/rtsp_response.o ietf/rtsp_session.o ietf/sdp.o ietf/rtp_depacketizer.o bifs/arith_decoder.o bifs/bifs_codec.o bifs/bifs_node_tables.o bifs/com_dec.o bifs/com_enc.o bifs/conditional.o bifs/field_decode.o bifs/field_encode.o bifs/memory_decoder.o bifs/predictive_mffield.o bifs/quantize.o bifs/script_dec.o bifs/script_enc.o bifs/unquantize.o isomedia/avc_ext.o isomedia/box_code_3gpp.o isomedia/box_code_apple.o isomedia/box_code_base.o isomedia/box_code_isma.o isomedia/box_code_meta.o isomedia/box_dump.o isomedia/box_funcs.o isomedia/data_map.o isomedia/hint_track.o isomedia/hinting.o isomedia/isma_sample.o isomedia/isom_intern.o isomedia/isom_read.o isomedia/isom_store.o isomedia/isom_write.o isomedia/media.o isomedia/media_odf.o isomedia/meta.o isomedia/movie_fragments.o isomedia/sample_descs.o isomedia/stbl_read.o isomedia/stbl_write.o isomedia/track.o isomedia/tx3g.o  odf/desc_private.o odf/descriptors.o odf/ipmpx_code.o odf/ipmpx_dump.o odf/ipmpx_parse.o odf/oci_codec.o odf/odf_code.o odf/odf_codec.o odf/odf_command.o odf/odf_dump.o odf/odf_parse.o odf/qos.o odf/slc.o  media_tools/av_parsers.o media_tools/avilib.o media_tools/gpac_ogg.o media_tools/img.o media_tools/ismacryp.o media_tools/isom_hinter.o media_tools/isom_tools.o media_tools/media_export.o media_tools/media_import.o media_tools/mpeg2_ps.o media_tools/text_import.o media_tools/saf.o media_tools/mpegts.o media_tools/vobsub.o scene_manager/loader_bt.o scene_manager/loader_isom.o scene_manager/loader_qt.o scene_manager/loader_xmt.o scene_manager/scene_dump.o scene_manager/scene_manager.o scene_manager/scene_stats.o scene_manager/swf_parse.o scene_manager/swf_bifs.o scene_manager/text_to_bifs.o scene_manager/encode_cbk.o scene_manager/encode_isom.o scene_manager/loader_svg.o terminal/channel.o terminal/clock.o terminal/decoder.o terminal/term_node_init.o terminal/inline.o terminal/input_sensor.o terminal/media_control.o terminal/media_manager.o terminal/media_memory.o terminal/media_object.o terminal/media_sensor.o terminal/network_service.o terminal/object_browser.o terminal/object_manager.o terminal/terminal.o terminal/svg_external.o compositor/audio_input.o compositor/audio_mixer.o compositor/audio_render.o compositor/bindable.o compositor/camera.o compositor/compositor.o compositor/compositor_2d.o compositor/compositor_3d.o compositor/compositor_node_init.o compositor/drawable.o compositor/events.o compositor/font_engine.o compositor/hardcoded_protos.o compositor/mesh.o compositor/mesh_collide.o compositor/mesh_tesselate.o compositor/mpeg4_animstream.o compositor/mpeg4_audio.o compositor/mpeg4_background.o compositor/mpeg4_background2d.o compositor/mpeg4_bitmap.o compositor/mpeg4_composite.o compositor/mpeg4_form.o compositor/mpeg4_geometry_2d.o compositor/mpeg4_geometry_3d.o compositor/mpeg4_geometry_ifs2d.o compositor/mpeg4_geometry_ils2d.o compositor/mpeg4_gradients.o compositor/mpeg4_grouping.o compositor/mpeg4_grouping_2d.o compositor/mpeg4_grouping_3d.o compositor/mpeg4_layer_2d.o compositor/mpeg4_layer_3d.o compositor/mpeg4_layout.o compositor/mpeg4_lighting.o compositor/mpeg4_path_layout.o compositor/mpeg4_sensors.o compositor/mpeg4_sound.o compositor/mpeg4_text.o compositor/mpeg4_textures.o compositor/mpeg4_timesensor.o compositor/mpeg4_viewport.o compositor/navigate.o compositor/offscreen_cache.o compositor/svg_base.o compositor/svg_font.o compositor/svg_geometry.o compositor/svg_grouping.o compositor/svg_media.o compositor/svg_paint_servers.o compositor/svg_text.o compositor/texturing.o compositor/texturing_gl.o compositor/visual_manager.o compositor/visual_manager_2d.o compositor/visual_manager_2d_draw.o compositor/visual_manager_3d.o compositor/visual_manager_3d_gl.o compositor/x3d_geometry.o laser/lsr_enc.o laser/lsr_dec.o laser/lsr_tables.o -lm -L/usr/local/lib -L/usr/X11R6/lib -lGL -lglut  -lz -lssl -lcrypto -ljpeg -lpng -lpthread -ldl
/usr/bin/ld: cannot find -lglut
collect2: ld はステータス 1 で終了しました
make[1]: *** [libgpac.so] エラー 1
make[1]: ディレクトリ `/home/foltia/gpac/src' から出ます
make: *** [lib] エラー 2

libgpac.soがないためにエラーが発生した模様。libglut.soが存在するか確認し、シンボリックリンクを作成してコンパイルが通るようにする。

[foltia@foltiadev gpac]$ ls /usr/lib | grep glut
libglut.so.3
libglut.so.3.8.0

[foltia@foltiadev gpac]$ su -
パスワード:

[root@foltiadev ~]# ln -s /usr/lib/libglut.so.3 /usr/lib/libglut.so

[root@foltiadev ~]# exit
logout

これで再度インストール。

[foltia@foltiadev gpac]$ make clean
〜(ログは省略)〜

[foltia@foltiadev gpac]$ make
〜(中略)〜
make[2]: ディレクトリ `/home/foltia/gpac/modules/x11_out' から出ます
make[1]: ディレクトリ `/home/foltia/gpac/modules' から出ます

[foltia@foltiadev gpac]$ su -
パスワード:

[root@foltiadev gpac]# make install
install -d "/usr/local"
install -d "/usr/local/bin"
install  -m 755 bin/gcc/MP4Box "/usr/local/bin"
make -C applications install
make[1]: ディレクトリ `/home/foltia/gpac/applications' に入ります
set -e; for i in mp4client ; do make -C $i install; done
make[2]: ディレクトリ `/home/foltia/gpac/applications/mp4client' に入ります
rm -f main.o extract.o ../../bin/gcc/MP4Client
make -override BUILD_INSTALL=yes all
make[3]: ディレクトリ `/home/foltia/gpac/applications/mp4client' に入ります
gcc -O3  -fno-strict-aliasing -Wno-pointer-sign -I/home/foltia/gpac/include -DGPAC_MODULES_PATH=\"/usr/local/lib/gpac\" -c -o main.o main.c 
gcc -O3  -fno-strict-aliasing -Wno-pointer-sign -I/home/foltia/gpac/include -DGPAC_MODULES_PATH=\"/usr/local/lib/gpac\" -c -o extract.o extract.c 
gcc -Wl --warn-common -o ../../bin/gcc/MP4Client main.o extract.o -L../../bin/gcc -lgpac -lz -L/usr/X11R6/lib -lGL -lglut -L/usr/local/lib -ljpeg -lpng
make[3]: ディレクトリ `/home/foltia/gpac/applications/mp4client' から出ます
install -m 755  ../../bin/gcc/MP4Client "/usr/local/bin"
make[2]: ディレクトリ `/home/foltia/gpac/applications/mp4client' から出ます
make[1]: ディレクトリ `/home/foltia/gpac/applications' から出ます
install -d "/usr/local/lib/gpac"
install bin/gcc/*.so "/usr/local/lib/gpac"
rm -f /usr/local/lib/gpac/libgpac.so
rm -f /usr/local/lib/gpac/nposmozilla.so
strip bin/gcc/libgpac.so
install  -m 755 bin/gcc/libgpac.so /usr/local/lib/libgpac-0.4.5.so
ln -sf libgpac-0.4.5.so /usr/local/lib/libgpac.so
ldconfig || true
install -d "/usr/local/man"
install -d "/usr/local/man/man1"
if [ -d  doc ] ; then \
	install -m 644 doc/man/mp4box.1 /usr/local/man/man1/ ; \
	install -m 644 doc/man/mp4client.1 /usr/local/man/man1/ ; \
	install -m 644 doc/man/gpac.1 /usr/local/man/man1/ ; \
	install -d "/usr/local/share/gpac" ; \
	install -m 644 doc/gpac.mp4 /usr/local/share/gpac/ ; \
	fi

[root@foltiadev gpac]# exit
logout

TsSplitter.exe、tss.py、neroAacEncの保存

TSファイルを分割して不要なストリームを削除するTsSplitter.exeとtss.py、AACエンコードを行うためのneroAacEncを準備する。これらはダウンロードして、ファイルを格納するだけ。neroAacEncはコマンドのみでは不可能なので、まとめてGUI環境で操作してしまった(そのうち追記できたら追記する)。

TsSplitter.exe

 下記URLからダウンロードし、解凍する。
 http://2sen.dip.jp/cgi-bin/dtvup/source/up0140.zip

tss.py

 下記URLからダウンロードし、tss.pyにリネームする。
 http://10.dtiblog.com/a/allegro/file/tss.py.txt

neroAacEnc

 下記URLからダウンロードし、解凍したフォルダからneroAacEncを探す。
 http://www.nero.com/jpn/technologies-aac-codec.html


後でfoltiaを導入することを考慮して、ファイルは3つのファイルは全て、/home/foltia/perl/tool 配下に格納しておく。以降、エンコードテストはこのフォルダ配下で行う。

エンコードテスト

準備は整ったのでエンコードテスト。foltiaの動作の順番で実行する。まず録画から。

[foltia@foltiadev tool]$ recpt1 --b25 --strip 211 20 test.m2t
using B25...
enable B25 strip
pid = 15328
C/N = 16.450137dB
Recording...
Recorded 21sec

次に録画したTSファイルをH.264エンコードする。オプションはfoltiaのipodtranscode.plを参考に、iPhoneで再生できるように指定した。

[foltia@foltiadev tool]$ ffmpeg -y -i test.m2t -croptop 6 -cropbottom 6 -cropleft 8 -cropright 8 -s 640x352 -deinterlace -r 29.97 -vcodec libx264 -vpre default -g 100 -b 600000 -level 13 -sc_threshold 60 -rc_eq 'blurCplx^(1-qComp)' -refs 3 -maxrate 700000 -async 50 -f h264 test.264
FFmpeg version 0.5, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: --prefix=/usr --libdir=/usr/lib --shlibdir=/usr/lib --mandir=/usr/share/man --incdir=/usr/include --enable-libamr-nb --enable-libamr-wb --enable-libdirac --enable-libfaac --enable-libfaad --enable-libmp3lame --enable-libtheora --enable-libx264 --enable-gpl --enable-nonfree --enable-postproc --enable-pthreads --enable-shared --enable-swscale --enable-x11grab
  libavutil     49.15. 0 / 49.15. 0
  libavcodec    52.20. 0 / 52.20. 0
  libavformat   52.31. 0 / 52.31. 0
  libavdevice   52. 1. 0 / 52. 1. 0
  libswscale     0. 7. 1 /  0. 7. 1
  libpostproc   51. 2. 0 / 51. 2. 0
  built on Nov  6 2009 19:05:03, gcc: 4.1.2 20080704 (Red Hat 4.1.2-46)

Seems stream 0 codec frame rate differs from container frame rate: 59.94 (60000/1001) -> 29.97 (30000/1001)
Input #0, mpegts, from 'test.m2t':
  Duration: 00:00:19.20, start: 14981.095711, bitrate: 19097 kb/s
  Program 211 BS11
    Stream #0.0[0x140]: Video: mpeg2video, yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 24000 kb/s, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0.1[0x141]: Audio: aac, 48000 Hz, stereo, s16, 183 kb/s
Output #0, h264, to 'test.264':
    Stream #0.0: Video: libx264, yuv420p, 640x352 [PAR 44:45 DAR 16:9], q=10-51, 600 kb/s, 90k tbn, 29.97 tbc
Stream mapping:
  Stream #0.0 -> #0.0
[libx264 @ 0x9bd8130]using SAR=44/45
[libx264 @ 0x9bd8130]frame MB size (40x22) > level limit (396)
[libx264 @ 0x9bd8130]DPB size (3 frames, 1013760 bytes) > level limit (2 frames, 912384 bytes)
[libx264 @ 0x9bd8130]MB rate (26373) > level limit (11880)
[libx264 @ 0x9bd8130]using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64
[libx264 @ 0x9bd8130]VBV maxrate specified, but no bufsize.
[libx264 @ 0x9bd8130]profile Baseline, level 1.3
Press [q] to stop encoding
[mpeg2video @ 0x9b8f430]ac-tex damaged at 47 63=18.95 bitrate= 669.6kbits/s    
[mpeg2video @ 0x9b8f430]Warning MVs not available
[mpeg2video @ 0x9b8f430]concealing 600 DC, 600 AC, 600 MV errors
frame=  574 fps= 15 q=-11059904.7 Lsize=    1556kB time=19.15 bitrate= 665.7kbits/s    
video:1556kB audio:0kB global headers:0kB muxing overhead 0.000000%
[libx264 @ 0x9bd8130]slice I:8     Avg QP:24.24  size: 16868
[libx264 @ 0x9bd8130]slice P:566   Avg QP:26.67  size:  2576
[libx264 @ 0x9bd8130]mb I  I16..4: 15.8%  0.0% 84.2%
[libx264 @ 0x9bd8130]mb P  I16..4:  2.3%  0.0%  2.4%  P16..4: 53.1%  9.4%  2.9%  0.0%  0.0%    skip:30.0%
[libx264 @ 0x9bd8130]final ratefactor: 25.69
[libx264 @ 0x9bd8130]coded y,uvDC,uvAC intra:50.5% 58.4% 23.0% inter:10.4% 15.9% 0.4%
[libx264 @ 0x9bd8130]ref P L0  76.7% 14.1%  9.2%
[libx264 @ 0x9bd8130]kb/s:665.4

録画したTSファイルから音声を抜き出す。

[foltia@foltiadev tool]$ mplayer test.m2t -vc null -vo null -ao pcm:file=test.wav:fast
MPlayer SVN-r29417-4.1.2 (C) 2000-2009 MPlayer TeamCan't open joystick device /dev/input/js0: No such file or directory
Can't init input joystick
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 test.m2t.
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)
==========================================================================
Forced video codec: null
Opening video decoder: [null] Null video decoder
VDec: vo config request - 1920 x 1080 (preferred colorspace: BGR 24-bit)
VDec: using Planar YV12 as output csp (no 0)
Movie-Aspect is undefined - no prescaling applied.
VO: [null] 1920x1080 => 1920x1080 Planar YV12 
Selected video codec: [null] vfm: null (NULL codec (no decoding!))
==========================================================================
==========================================================================
Opening audio decoder: [faad] AAC (MPEG2/4 Advanced Audio Coding)

Unsupported LATM configuration: 3 programs/ 55 subframes, 2 layers, allstreams: 1

Unsupported LATM configuration: 3 programs/ 45 subframes, 7 layers, allstreams: 1
FAAD: compressed input bitrate missing, assuming 128kbit/s!
AUDIO: 48000 Hz, 2 ch, s16le, 128.0 kbit/8.33% (ratio: 16000->192000)
Selected audio codec: [faad] afm: faad (FAAD AAC (MPEG-2/MPEG-4 Audio))
==========================================================================
[AO PCM] File: test.wav (WAVE)
PCM: Samplerate: 48000Hz Channels: Stereo Format s16le
[AO PCM] Info: Faster dumping is achieved with -vc null -vo null -ao pcm:fast
[AO PCM] Info: To write WAVE files use -ao pcm:waveheader (default).
AO: [pcm] 48000Hz 2ch s16le (2 bytes per sample)
Starting playback...
A:14984.1 V:14983.9 A-V:  0.220 ct: -0.254  77/ 77  0%  0%  1.6% 70 0 

           ************************************************
           **** Your system is too SLOW to play this!  ****
           ************************************************

Possible reasons, problems, workarounds:
- Most common: broken/buggy _audio_ driver
  - Try -ao sdl or use the OSS emulation of ALSA.
  - Experiment with different values for -autosync, 30 is a good start.
- Slow video output
  - Try a different -vo driver (-vo help for a list) or try -framedrop!
- Slow CPU
  - Don't try to play a big DVD/DivX on a slow CPU! Try some of the lavdopts,
    e.g. -vfm ffmpeg -lavdopts lowres=1:fast:skiploopfilter=all.
- Broken file
  - Try various combinations of -nobps -ni -forceidx -mc 0.
- Slow media (NFS/SMB mounts, DVD, VCD etc)
  - Try -cache 8192.
- Are you using -cache to play a non-interleaved AVI file?
  - Try -nocache.
Read DOCS/HTML/en/video.html for tuning/speedup tips.
If none of this helps you, read DOCS/HTML/en/bugreports.html.

TS_PARSE: COULDN'T SYNC:  0.262 ct: -0.345 545/545  0%  0%  1.3% 492 0 
FAAD: error: Maximum number of bitstream elements exceeded, trying to resync!
FAAD: error: Unable to find ADTS syncword, trying to resync!
FAAD: error: Unable to find ADTS syncword, trying to resync!
FAAD: error: Unable to find ADTS syncword, trying to resync!
FAAD: error: Unable to find ADTS syncword, trying to resync!
〜(中略)〜
FAAD: error: Unable to find ADTS syncword, trying to resync!1.2% 492 0 
FAAD: error: Unable to find ADTS syncword, trying to resync!
FAAD: error: Unable to find ADTS syncword, trying to resync!
FAAD: error: Unable to find ADTS syncword, trying to resync!
FAAD: error: Unable to find ADTS syncword, trying to resync!
FAAD: error: Unable to find ADTS syncword, trying to resync!
FAAD: error: Unable to find ADTS syncword, trying to resync!
FAAD: error: Unable to find ADTS syncword, trying to resync!
FAAD: error: Unable to find ADTS syncword, trying to resync!
FAAD: error: Unable to find ADTS syncword, trying to resync!
FAAD: Failed to decode frame: Unable to find ADTS syncword 
A:15000.1 V:15000.2 A-V: -0.027 ct: -0.295 564/564  0%  0%  1.2% 492 0 

Exiting... (End of file)

なんだかエラーが発生しているようだが、WAVファイルは生成され、再生もできていたのでひとまずOKとして先に進む。引き続き、AACエンコードする。

[foltia@foltiadev tool]$ ./neroAacEnc -br 128000 -if test.wav -of test.aac
*************************************************************
*                                                           *
*  Nero AAC Encoder                                         *
*  Copyright 2009 Nero AG                                   *
*  All Rights Reserved Worldwide                            *
*                                                           *
*  Package build date: Feb 18 2010                          *
*  Package version:    1.5.4.0                              *
*                                                           *
*  See -help for a complete list of available parameters.   *
*                                                           *
*************************************************************

Processed 18 seconds...

ここまで実行すると、元のm2tファイルから264ファイル、wavファイル、aacファイルが生成されていることが確認できる。後はmp4ファイルにするだけ。

[foltia@foltiadev tool]$ ls -aFl
合計 51368drwxrwxr-x 2 foltia foltia     4096  4月  4 14:23 ./
drwxrwxr-x 3 foltia foltia     4096  4月  4 12:54 ../
-rwxrwxrwx 1 foltia foltia   192512  3月 11 22:36 TsSplitter.exe*
-rwxrwxr-x 1 foltia foltia   910988  3月 11 22:36 neroAacEnc*
-rw-rw-r-- 1 foltia foltia  1593729  4月  4 14:22 test.264
-rw-rw-r-- 1 foltia foltia   313962  4月  4 14:23 test.aac
-rw-rw-r-- 1 foltia foltia 45842672  4月  4 14:20 test.m2t
-rw-rw-r-- 1 foltia foltia  3649580  4月  4 14:22 test.wav
-rwxrwxr-x 1 foltia foltia     3124  3月 11 22:37 tss.py*

MP4Boxコマンドでmp4ファイルを生成する。

[foltia@foltiadev tool]$ MP4Box -fps 29.97 -add test.264 -new test.base.mp4
AVC-H264 import - frame size 640 x 352 at 29.970 FPSImport results: 574 samples - Slices: 8 I 566 P 0 B - 1 SEI - 8 IDR
Saving test.base.mp4: 0.500 secs Interleaving

[foltia@foltiadev tool]$ MP4Box -fps 29.97 -add test.aac test.base.mp4
IsoMedia import - track ID 1 - Audio (SR 48000 - 2 channels)Saving test.base.mp4: 0.500 secs Interleaving             

[foltia@foltiadev tool]$ MP4Box -ipod test.base.mp4
Setting up iTunes/iPod file...Forcing AVC/H264 SAR to 1:1...
Saving test.base.mp4: 0.500 secs Interleaving

最後に生成されたファイルをiPhoneに転送し、再生できることを確認する。が、このままでは再生できなかった・・・。

ffmpegエンコード設定を確認

iPhoneで再生できるH.264のプロファイルはベースラインプロファイルでなければならない。試行錯誤の結果、下記のプリセットを変更することで、iPhoneで再生できるようになった。

[root@foltiadev ~]# cat /usr/share/ffmpeg/libx264-default.ffpreset 
coder=1 ←ここを0に変更
flags=+loop
cmp=+chroma
partitions=+parti8x8+parti4x4+partp8x8+partb8x8
me_method=hex
subq=6
me_range=16
g=250
keyint_min=25
sc_threshold=40
i_qfactor=0.71
b_strategy=1
qcomp=0.6
qmin=10
qmax=51
qdiff=4
directpred=1
flags2=+fastpskip

ここのオプションに関してはもっと適切な対処法があるかもしれない。この部分はffmpegを詳しく調べてみないとわからない部分だが、foltia実行の上では最低限の設定はできた!ということで。