找回密码
 注册
查看: 2286|回复: 13

MPlayer 不能显示SRT字幕,识别ttf字体失败

[复制链接]
发表于 2005-12-5 16:18:01 | 显示全部楼层 |阅读模式
我在Windows下编译MPlayer成功后碰到了和这里很多朋友类似的问题:
不能加载srt字幕。加载.sub正常。
翻看了很多帖子,都没有看明白问题的原因。

之所以不能加载,貌似是这个原因:


c:/winnt/fonts/SimHei.ttf doesn't look like a font description, ignoring.
Cannot load font: d:/software/mplayer/SimHei.ttf
......


但是,SieHei.ttf就在winnt/fonts目录下。
我尝试了以下办法:
把c:/winnt/fonts/的"/"换成"\"
把ttf放到c:/.mplayer/subfont.ttf
都不成功。

因为是在Windows下,所以配置文件的位置在d:/software/mplayer/mplayer/config
修改这个文件,font=SimHei.ttf,不论换哪个ttf都没有用。

-sub *.srt , 还是不能显示,

我用官方下载的mplayer 测试一下,虽然也显示字幕加载失败,但是能显示英文字幕,不能显示中文。

我觉得问题是我在编译的时候少设置了点什么,各位能给指点指点,问题可能在哪儿?
多谢了。
编译的时候加了--enable-freetype --enable-fontconfig
但是--disable-iconv, 因为一旦打开iconv就会出链接错误。


详细的编译选项是
./configure --prefix=D:/MyBuild/MPlayer/i686 --disable-mencoder --disable-gui --enable-largefiles --disable-linux-devfs --disable-termcap --disable-termios --disable-iconv --disable-langinfo --disable-lirc --disable-lircc --disable-joystick --disable-vm --disable-xf86keysym --disable-tv --disable-tv-v4l --disable-tv-v4l2 --disable-tv-bsdbt848 --disable-edl --disable-rtc --disable-network --disable-winsock2 --disable-smb --disable-live  --disable-cdparanoia --enable-freetype --enable-fontconfig --enable-unrarlib --disable-menu --enable-sortsub --disable-fribidi --disable-enca --disable-macosx --disable-macosx-finder-support --disable-macosx-bundle --disable-inet6 --disable-gethostbyname2 --disable-ftp --disable-vstream --disable-pthreads --disable-gif --disable-png --disable-jpeg --disable-libcdio --disable-liblzo  --enable-win32 --enable-dshow --enable-qtx --disable-xanim --disable-real --enable-xvid --enable-x264 --disable-divx4linux --disable-opendivx --enable-libavcodec --enable-libavformat --disable-internal-tremor --disable-tremor-low --disable-external-tremor --disable-vorbis --disable-speex --disable-theora --disable-internal-matroska --disable-external-faad --enable-internal-faad --enable-faac --disable-ladspa --disable-libdv --enable-mad --disable-toolame --disable-twolame --disable-xmms --enable-mp3lib --enable-liba52 --enable-libdts --enable-libmpeg2 --disable-musepack --disable-amr_nb --disable-amr_nb-fixed --disable-amr_wb --disable-vidix --disable-gl --disable-dga --disable-vesa --disable-svga --disable-sdl --disable-aa --disable-caca --disable-ggi --disable-ggiwmh --enable-directx --disable-dxr2 --disable-dxr3 --disable-dvb --disable-dvbhead --disable-mga --disable-xmga --disable-xv --disable-xvmc --disable-vm --disable-xinerama --disable-x11 --disable-fbdev --disable-mlib --disable-3dfx --disable-tdfxfb --disable-directfb --disable-zr --disable-bl --disable-tdfxvid --disable-tga --disable-pnm --disable-md5sum --disable-alsa --disable-ossaudio --disable-arts --disable-esd --disable-polyp --disable-jack --disable-nas --disable-sgiaudio --disable-sunaudio --enable-win32waveout --disable-select --disable-runtime-cpudetection --disable-cross-compile --enable-mmx --enable-mmx2 --disable-3dnow --disable-3dnowex --enable-sse --enable-sse2 --enable-fastmemcpy --disable-debug --disable-profile --disable-sighandler --disable-crash-debug --disable-i18n --disable-dynamic-plugins --enable-gcc-checking --with-extraincdir=/d/MyBuild/MPlayer/INC --with-extralibdir=/d/MyBuild/MPlayer/LIB --with-codecsdir=../../../../software/mplayer/codecs --with-win32libdir=../../../../software/mplayer/codecs --with-reallibdir=../../../../software/mplayer/codecs
发表于 2005-12-5 17:15:17 | 显示全部楼层
要先装libiconv,上面的参数会看死人的
回复

使用道具 举报

发表于 2005-12-5 18:38:08 | 显示全部楼层
估计在 Windows 里要装很多基础东西的。
回复

使用道具 举报

 楼主| 发表于 2005-12-5 18:56:21 | 显示全部楼层
我已经安装libiconv了。然后在编freetype2的时候用到了iconv
但是在编译MPlayer的时候不能enable iconv,不然会有链接错误。有人在开发者的邮件列表里提过这个问题,但是没有找到解决方案。
回复

使用道具 举报

发表于 2005-12-5 21:00:11 | 显示全部楼层
你用的什么版本的mplayer,我用pre7/pre7try2和cvs都没有问题啊,mingwin 3.x+msys1.x,4.0的没试过.
回复

使用道具 举报

发表于 2005-12-5 21:01:08 | 显示全部楼层
估计是编译的时候没有引用到 iconv 的 header
回复

使用道具 举报

发表于 2005-12-5 21:05:34 | 显示全部楼层
是不是没注意--prefix=之类的参数.
MP的官网上有篇win32下编译的how-to,照那个来,应该不会出错.
回复

使用道具 举报

 楼主| 发表于 2005-12-6 11:19:56 | 显示全部楼层
我确实是照着how-to做的。但是出现如下链接错误
windres -o osdep/mplayer-rc.o osdep/mplayer.rc
gcc -I../libvo -I../../libvo  -fno-PIC -O4 -march=pentium4 -mtune=pentium4 -pipe -ffast-math -fomit-frame-pointer -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/d/MyBuild/MPlayer/INC  -I. -I/d/MyBuild/MPlayer/i686/include/freetype2 -I/d/MyBuild/MPlayer/i686/include -I/d/MyBuild/MPlayer/INC           -o mplayer.exe mplayer.o mp_msg.o cpudetect.o codec-cfg.o spudec.o playtree.o playtreeparser.o asxparser.o vobsub.o subreader.o sub_cc.o find_sub.o m_config.o m_option.o parser-cfg.o m_struct.o edl.o unrarlib.o mixer.o parser-mpcmd.o subopt-helper.o osdep/mplayer-rc.o libvo/libvo.a libao2/libao2.a    libmpcodecs/libmpcodecs.a loader/libloader.a loader/dshow/libDS_Filter.a loader/dmo/libDMO_Filter.a libaf/libaf.a libmpdemux/libmpdemux.a input/libinput.a postproc/libswscale.a osdep/libosdep.a -Llibmpdvdkit2 -lmpdvdkit libavcodec/libavcodec.a libavformat/libavformat.a  -lmad      -lxvidcore -lm -ldts -lm  -lz     -L/d/MyBuild/MPlayer/i686/lib -lfreetype -lz    -lgdi32 -lwinmm  -ladvapi32 -lole32       libfaad2/libfaad2.a  mp3lib/libMP3.a liba52/liba52.a libmpeg2/libmpeg2.a                 -L/d/MyBuild/MPlayer/LIB      -lm
subreader.o:subreader.c.text+0x393c): undefined reference to `libiconv_open'
subreader.o:subreader.c.text+0x3995): undefined reference to `libiconv_close'
subreader.o:subreader.c.text+0x3a32): undefined reference to `libiconv'
subreader.o:subreader.c.text+0x3b6c): undefined reference to `libiconv'
subreader.o:subreader.c.text+0x4175): undefined reference to `libiconv_open'
subreader.o:subreader.c.text+0x41e4): undefined reference to `libiconv_close'
subreader.o:subreader.c.text+0x433e): undefined reference to `libiconv_close'
subreader.o:subreader.c.text+0x4c4a): undefined reference to `libiconv_close'
libvo/libvo.a(font_load_ft.o):font_load_ft.c.text+0x1bee): undefined reference to `libiconv_open'
libvo/libvo.a(font_load_ft.o):font_load_ft.c.text+0x1bff): undefined reference to `libiconv_close'
libvo/libvo.a(font_load_ft.o):font_load_ft.c:(.text+0x1c0b): undefined reference to `libiconv_open'
libvo/libvo.a(font_load_ft.o):font_load_ft.c:(.text+0x1c71): undefined reference to `libiconv'
libvo/libvo.a(font_load_ft.o):font_load_ft.c:(.text+0x1cd3): undefined reference
to `FcNameParse'
libvo/libvo.a(font_load_ft.o):font_load_ft.c:(.text+0x2677): undefined reference to `FcConfigSubstitute'
libvo/libvo.a(font_load_ft.o):font_load_ft.c:(.text+0x267f): undefined reference to `FcDefaultSubstitute'
libvo/libvo.a(font_load_ft.o):font_load_ft.c:(.text+0x2697): undefined reference to `FcFontMatch'
libvo/libvo.a(font_load_ft.o):font_load_ft.c:(.text+0x26b9): undefined reference to `FcPatternGetBool'
libvo/libvo.a(font_load_ft.o):font_load_ft.c:(.text+0x26cc): undefined reference to `FcNameParse'
libvo/libvo.a(font_load_ft.o):font_load_ft.c:(.text+0x26e6): undefined reference to `FcConfigSubstitute'
libvo/libvo.a(font_load_ft.o):font_load_ft.c:(.text+0x26ee): undefined reference to `FcDefaultSubstitute'
libvo/libvo.a(font_load_ft.o):font_load_ft.c:(.text+0x2706): undefined reference to `FcFontMatch'
libvo/libvo.a(font_load_ft.o):font_load_ft.c:(.text+0x272: undefined reference to `FcPatternGetString'
libmpcodecs/libmpcodecs.a(ad_acm.o):ad_acm.c:(.text+0x340): undefined reference to `sleep'
collect2: ld returned 1 exit status
make: *** [mplayer.exe] Error 1


看起来是程序里用到了libiconv的一些API但是libiconv的.a里面没有实现这些API,所以编译的时候没有错但是链接的时候找不到。

但是我确实是把iconv.a编译出来了并且放在了path里面。
困惑,为什么mplayer 的make会找不到这个.a,难道这个.a编译的不对?可是.a编译出来也有1M多,而且是configure, make, make install, 步骤标准的很。
回复

使用道具 举报

发表于 2005-12-6 14:29:02 | 显示全部楼层
估计是编译器没有找到 libiconv 的库文件,应该是还有 FontConfig 的也没找到。
回复

使用道具 举报

 楼主| 发表于 2005-12-6 21:49:21 | 显示全部楼层
我用nm 看了编译出来的.a文件,
$ nm libiconv.a|grep iconv
iconv.o:
00000000 D __libiconv_version
0000f350 T _libiconv
0000f3b0 T _libiconv_close  :似乎有这个函数啊,郁闷ing
0000ed70 T _libiconv_open
0000f3d0 T _libiconvctl
0000f510 T _libiconvlist
000000d0 T _libiconv_relocate
00000000 T _libiconv_set_relocation_prefix

用AR看.a包含哪些.o
$ ar -t libiconv.a           
iconv.o
localcharset.o
relocatable.o

再看.o里包含哪些函数的定义我就不知道用什么命令了。Unix上ld 就可以,但是mingw下ld好像看不了,或者我不知道用什么参数。
回复

使用道具 举报

发表于 2005-12-6 22:26:06 | 显示全部楼层
是你装的 iconv 放错地方了???
so 文件在什么地方?

你试试(先进入相应的目录,具体地址自己找吧~~)

gcc -I../libvo -I../../libvo -fno-PIC -O4 -march=pentium4 -mtune=pentium4 -pipe -ffast-math -fomit-frame-pointer -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/d/MyBuild/MPlayer/INC -I. -I/d/MyBuild/MPlayer/i686/include/freetype2 -I/d/MyBuild/MPlayer/i686/include -I/d/MyBuild/MPlayer/INC -o mplayer.exe mplayer.o mp_msg.o cpudetect.o codec-cfg.o spudec.o playtree.o playtreeparser.o asxparser.o vobsub.o subreader.o sub_cc.o find_sub.o m_config.o m_option.o parser-cfg.o m_struct.o edl.o unrarlib.o mixer.o parser-mpcmd.o subopt-helper.o osdep/mplayer-rc.o 在这里加上你的 libiconv.so的地址 libvo/libvo.a libao2/libao2.a libmpcodecs/libmpcodecs.a loader/libloader.a loader/dshow/libDS_Filter.a loader/dmo/libDMO_Filter.a libaf/libaf.a libmpdemux/libmpdemux.a input/libinput.a postproc/libswscale.a osdep/libosdep.a -Llibmpdvdkit2 -lmpdvdkit libavcodec/libavcodec.a libavformat/libavformat.a -lmad -lxvidcore -lm -ldts -lm -lz -L/d/MyBuild/MPlayer/i686/lib -lfreetype -lz -lgdi32 -lwinmm -ladvapi32 -lole32 libfaad2/libfaad2.a mp3lib/libMP3.a liba52/liba52.a libmpeg2/libmpeg2.a -L/d/MyBuild/MPlayer/LIB -lm
回复

使用道具 举报

 楼主| 发表于 2005-12-7 16:26:06 | 显示全部楼层
都是.a文件,不是.so
不过我强行加入.a的地址后还是出错。而且出的错误更多。
libmpdemux/libmpdemux.a(demux_lavf.o):demux_lavf.c.text+0x8e4): undefined reference to `ff_gcd'
libavformat/libavformat.a(utils.o):utils.c.text+0xbc1): undefined reference to `av_rescale'
libavformat/libavformat.a(utils.o):utils.c.text+0x224a): undefined reference to `av_rescale'
libavformat/libavformat.a(utils.o):utils.c.text+0x246a): undefined reference to `av_rescale'
..........

看来这不是解决办法。对libiconv投降。

是不是不enable libiconv就无法显示srt?
回复

使用道具 举报

发表于 2005-12-7 20:30:14 | 显示全部楼层
呵呵,不要字幕了,当练听力
回复

使用道具 举报

发表于 2005-12-7 20:53:46 | 显示全部楼层
我觉得就是 so 文件存放地址有问题导致的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-5-14 17:16 , Processed in 0.049068 second(s), 16 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表