基于 Mac 的媒体中心

iOS 4.3 新增的一个重要的功能是对 home sharing 的支持,这样你可以在一台安装了 iTunes 的机器上共享任何视频和音频而不需要同步到对应的 iDevice 中。这给打造基于 Mac 的家庭媒体中心带来了很大的便利。先前介绍过用 XBMC 构建媒体库的方法,安装了 XBMC 的 Mac mini 是我目前主要使用的视频播放设备,自从 Mac OS X 开放了视频硬件解码支持 之后,用低配置的 Mac mini 播放高码率的 1080p 视频也完全不是问题了。而且对于 iPad 2 和 iPhone 4S 以后的设备,因为已经支持到 H.264 的 High Profile 4.1,所以正常情况下,网上所有能下载到的 MKV 封装的视频,都只需要重新封装一下就可以无损地播放了。这里介绍一下我的配置。 从网上下载到的 mkv 视频,一般先用 MP4tools demux 再封装为 mp4,这是我目前找到的最方便工具。如图所示:

因为前面提到的原因,视频部分可以不转换,所以选择直接 Pass Thru,但音频部分一般是 AC3 或者 DTS 各式的,需要转换为 AAC 才可以给 iDevice 们播放,这里可以任选码率,大部分情况下 192 kbps 绰绰有余。

更新: @RioJot 提醒我有个开源的 Subler 工具也可以完成这个操作,它的界面比 MP4tools 更好一些,支持选择音频 downmix 的类型 (Dolby Pro Logic 2, Dolby Pro Logic, Stereo, Mono),还可以自动抓取元数据和 Artwork。另外它的队列管理也比 MP4tools 好一些。唯一需要注意的是必须安装了 Perian 之后才可以进行音频的 downmix。

转换完之后的 mp4 已经可以直接加入 iTunes 中播放,但比较理想的还是添加一下文件的元数据,比如电影的标题、年份、电视剧的系列名和海报等等。这个工作可以用 iSubtitle 自动完成。只要用 iSubtitle 打开 mp4 文件,它就会根据该文件的名称在网上的对应数据库中匹配获得相关元数据 (比如电影从 themoviedb.org 中搜索)。iSubtitle 还支持的一个重要功能是给 mp4 文件添加软字幕,只需要把 srt/ssa 格式的字幕文件下载下来,取相同前缀,放在 mp4 文件所在的目录下即可。比如 Spartacus.S02E02.720p.HDTV.X264-DIMENSION.mkv 文件转换得到 Spartacus.S02E02.720p.HDTV.X264-DIMENSION.mp4,字幕文件可能是 Spartacus.S02E02.720p.HDTV.X264-DIMENSION.chs.srt。它的界面如图所示:

iSubtitle 执行的只是元数据操作,所以可以在 mp4 上直接保存。然后就可以加入 iTunes 中。iTunes 会根据元数据信息分类存放,比如下面这样:

更新:Subler 也可以完成添加字幕的操作,这样你可以把两步操作合并到一步完成,可是 Subler 必须手工选择字幕文件,而且字幕文件也必须已经转换为 UTF-8 编码才可以添加。

然后,在 iTunes 和 iDevice 中启用家庭共享 就可以在设备的 Video app 上看到这些视频了。根据我的经验,至少 720p 的视频在 wifi 下播放是非常流畅的,也几乎不需要任何缓存时间,如果出现播放缓慢、经常停滞的情况,就应该检查网络或者设备配置问题了。如图:

于此同时,因为 iTunes 已经将文件组织好了,我们还可以将 iTunes 的媒体文件所在目录直接添加到 XBMC 中,这样就可以自由选择是在电视的大屏幕观看还是在 iPad 上观看了 (当然也可以直接用 iTunes 观看,选用 XBMC 主要是习惯和方便用遥控器操作)。对于电视剧文件,因为文件名仅仅是标题,XBMC 无法直接搜索,所以可以在安装了 mp4v2 之后 (brew install --using-llvm mp4v2),使用如下 Python 脚本生成符合 XBMC 需要的符号链接:

#!/usr/bin/python

import sys, os, commands

def linkfile(src):
    output = commands.getoutput("mp4info '%s'" % src)
    season = 0
    episode = 0
    for line in output.splitlines():
        sl = line.strip()
        if sl.startswith("TV Season"):
            season = int(sl.split(":")[1].strip())
        elif sl.startswith("TV Episode"):
            episode = int(sl.split(":")[1].strip())

    if season and episode:
        ext = os.path.splitext(src)[1]
        dst = "%s/%dx%02x%s" % (os.path.dirname(src), season, episode, ext)
        print src, "->", dst
        if not os.path.islink(dst):
            os.symlink(src, dst)

for root, dirs, files in os.walk(sys.argv[1]):
    for name in files:
        linkfile(os.path.join(root, name))

这样在 XBMC 上看到的效果如图:

顺带一说,在即将发布的 XBMC 11 “Eden” 中,还支持将 XBMC 作为 AirPlay 接收端,这样 iDevice 上保存的图片、音乐和视频也可以直接用 wifi 发送到 Mac 上观看了。


15 Comments

用 1st generation Time Capsule 的表示 720p 在 WiFi 下绝对卡成屎。。。我现在都是用一个 ext3 的 16G U 盘拷到 WDTV 上看了。

Posted by fishy on 12 March 2012 @ 10am

影片信息可以试试 MetaX : )

via: http://www.kerstetter.net/index.php/projects/software/metax

Posted by Wao on 12 March 2012 @ 1pm

@fishy: 我用的是 TP-Link 的一个路由器,表示还好啊…

Posted by jjgod on 12 March 2012 @ 3pm

可能我那个 time capsule 太老了吧,现在就是稍微远一点,看片的地方基本连墙都没穿 (或者穿了一道墙),就卡得一塌糊涂。 但是如果把 mbp 拿到 tc 跟前拷片速度就很正常。

Posted by fishy on 12 March 2012 @ 5pm

@fishy: 我那个 TP-Link 的性能已经到了恐怖的程度,我家在 4 楼,距离地面大概 20 米左右吧,拿到楼下去走出 50 米开外还有微弱信号,经常就是刚从车站走到家一半路就连上 wifi 了…

Posted by jjgod on 12 March 2012 @ 6pm

我家在 5 楼然后我在楼下偶尔也能有微弱信号。。。我觉得信号不是问题主要就是衰减得太厉害了。

Posted by fishy on 12 March 2012 @ 6pm

@jjgod 的TP-Link啥型号啊?现在很需要啊

Posted by HUan on 13 March 2012 @ 10am

@HUan: http://www.tp-link.com/en/products/details/?model=TL-WR1043ND

Posted by jjgod on 13 March 2012 @ 6pm

你好, 请教个问题, 我用mkvwatch把mkv视频脱壳成m4v后, 再在episode里H.264重编码为mp4/m4v文件(包括resize到iPhone分辨率), 随后导入isubtitle的时候程序显示movie data size is zero, isubtitle告诉我不能保存或输出…. 如果不用episode重编码, mkvwatch脱壳后的m4v直接导入isubtitle却没有这个警告信息

Posted by Avin on 14 March 2012 @ 1pm

@jjgod 多谢!

Posted by HUan on 14 March 2012 @ 4pm

@Avin: 没用过你说的 mkvwatch 和 episode。

Posted by jjgod on 14 March 2012 @ 5pm

@jjgod 已经用上你说的1043路由了,信号果然很好,3堵墙后依旧7,8成信号,正常使用

Posted by HUan on 16 March 2012 @ 12pm

[...] 如果不限于命令行的话,我发现这个帖子的提到的GUI解决方案还是很不错的。 [...]

Posted by ffmpeg一条命令重新封装mkv转换iPad iPhone视频 « 幻肢 on 23 March 2012 @ 6am

[...] 如果不限于命令行的话,我发现这个帖子的提到的GUI解决方案还是很不错的。 [...]

Posted by ffmpeg一条命令重新封装mkv转换iPad iPhone视频 | rainbird's blog on 23 March 2012 @ 8am

MP4tools、iSubtitle 、Subler我都试了,各有优缺点;

Subler完全免费,MP4tools4.99刀,iSubtitle19.99刀;

MP4tools不注册也能用,只是会有烦人的弹出窗口,也可以手动添加字幕(SRT+UTF-8),队列功能能看到转换的进程。缺点是不能抓取视频文件的元数据和Artwork,而且转完的文件在iTunes里也不能手动添加信息,一编辑艺术家等信息iTunes就挂掉,强制退出后这个视频文件也就废了,是的,任何方法都打不开,只能重新转,

Subler虽然功能不错,又完全免费,但是转换大一点的文件耗时太长了,而且没有进度条没有百分比显示,就一个圈在那转啊转,1G左右的720P美剧倒是很快,但是一个22G的1080P电影转了两个多小时都没完,看都看完了(ii7+8G内存+256SSD)

iSubtitle不注册只能转3分钟的,但是效果很好,有钱就MP4tools+iSubtitle吧

Posted by orange on 7 May 2012 @ 3pm

Leave a Comment