用 MeGUI 压制 BDrip

这篇文章已在 2015 年 5 月 16 日和 2016 年 6 月 10 日做了比较大幅度的修订。因为最近压 BD 的时候发现去年写的这篇文章有很多错误也跳了许多坑,在此给大家表示歉意。本次修订后几乎所有的文字和图片都进行了更新。

 
三年前写了一篇压制 DVDrip 的文章还挺受欢迎。如今已经到了蓝光的时代,差不多是时候补一篇压制 BDrip 的文章了。总体的流程上两者的区别不大,尤其是 x264 压制和音视频 muxing 部分。如果你之前已经看过这篇 用 MeGUI 压制 DVDrip 入门 则会感到非常容易上手。

注意:大部分 BD 是有版权的。请不要使用本文介绍的内容做违法的事。

这里面向有 DVDrip 经验的同学,简单说一下 BDrip 与 DVDrip 主要的不同:
1. 如果是原盘,则蓝光光驱必不可少。虽然这货不算贵但由于国内基本无蓝光发售,请量力购买;
2. 因为不是DVD,所以不使用 DVD Decrypter (废话)。蓝光原盘通常由 AACS 或 BD+ 算法加密,使用解密软件抓流有法律风险而且该类软件几乎全部为商业软件( AnyDVD HD , DVDFab Passkey 等),同样请量力购买;
3. DVD 是 720×480 的 MPEG2 源,压制时需要调整 DAR 或 SAR 来设置播放分辨率,并且由于是隔行扫描,需要设置反交错;BD 则是 16:9 的 H.264 源且通常已经是逐行扫描,不需要这些操作[1];
4. 所以说压制 BDrip 更简单,除了需要钱、一台更加强劲的电脑和数不清的爱(死。

 

error: jump to label crosses initialization [-fpermissive]

今天在编译 C++ 的时候出现了这个错误。代码里有 goto 这个恶心的东西:

[lineno]: error: jump to label ‘...’ [-fpermissive]
[lineno]: error: from here [-fpermissive]
[lineno]: error: crosses initialization of ‘...’

于是在 stackoverflow [1] 上查到了相应的原因,简单归结为两点:

1) goto 不能跨作用域使用;
2) goto 不能使用在任何同作用域变量声明之前。

当然,还有永恒不变的真理:

永远不要用 goto

 

[1] Statement goto can not cross pointer definition?. Stackoverflow. http://stackoverflow.com/questions/14274225/statement-goto-can-not-cross-pointer-definition

单个删除 OSX 废纸篓中的文件

OSX 的交互设计我从总体上来说还是满意的。操作系统本就是个互相借鉴的产物,有些操作在 OSX 上比较习惯,有些我则更喜欢 Windows 。比如接下来要说到的这个就是我一直耿耿于怀为什么 Apple 一直不去做好的东西:废纸篓。

说 Apple 没有做好废纸篓其实是有些冤枉的:OSX 的废纸篓可以快速查看,可以拖曳还原,UI 又漂亮。问题在于有一个 Windows 回收站里很容易实现的操作在 OSX 上是不能实现的:选择单个或多个文件彻底删除——而 OSX 上只有可怜的一个按钮叫做“清空废纸篓”。这对于废纸篓里面全是文件但是又急于腾出硬盘空间的人来说简直是苦了命了。解决方法一般有两个:一是先把需要保留的文件全部移到其它目录下去,清空废纸篓,然后把这些文件拖回去;二是用终端到 $HOME 下的 .Trash 目录下去找到需要的东西 rm 掉。这两种方法的便利性先不考虑,至少一点都不 Mac 。

这次我要介绍的当然是很 Mac 的办法。你猜对了,遇到这种事情首先想到的一定是 Automator :

osx_shift_delete-06

解决引导分区格式化导致的 BOOTMGR is missing 问题

前一阵鱼尾换了 SSD ,想把原来的两块硬盘当作存储来用。新硬盘安上,开机装系统,然后调整设置装一堆软件,忙活几个小时,装完后顺便把旧硬盘格式化。重启之后,杯具发生了:

IMG_0186

Handle != Handler

最近的工作邮箱里寄来一封这样的邮件,觉得很有益,而且不牵涉秘密。所以处理一下翻译成中文贴在这里作为一个笔记与大家互相学习吧。

====

Handle 和 handler 混用的错误在国内程序员当中非常普遍。这不是什么大的问题,但是对于以英语为母语的人来说,如果这两个词被混用就很容易傻傻找不到北。虽然说这么多年下来我们多少也习惯了。

在一个标准的程序中,handle 和 handler 是有很大区别的。

解决 Xmarks 与 iCloud 书签同步时的冲突

Xmarks 是一个著名的书签同步工具,相比 Chrome 等自带的同步功能,Xmarks 的优势在于跨浏览器和跨平台,对于有这方面需求的人士很方便。但是 Xmarks 的 iOS 版需要开通高级会员,而且由于 iOS 的原因有很多限制;iCloud 自带的书签同步又只支持 Safari 和 IE ,对于平时用 Chrome 的同学来说,要在 Chrome 和 iOS 之间同步书签,很火大。

或许你已经想到先用 Xmarks 同步 Chrome 书签到 IE/Safari 然后用 iCloud 同步到 iOS。但是很遗憾,Xmarks 与 iCloud 有功能上的冲突:由于 iCloud 采用的是增量同步机制,Xmarks 对 IE/Safari 书签的更新并不会也永远不会反映到 iCloud 上,也就是说 iCloud 上的仍然是旧的书签内容;甚至接下来如果你对 IE/Safari 的书签进行手工调整(比如增加一个书签),那么 iCloud 会将这个调整“增量”到旧的书签上(即在旧的书签基础上增加一个书签),造成整个书签系统严重混乱。

目前尚没有办法解决 Xmarks 与 iCloud 的机制冲突,但是书签的同步可以交由一些手工操作来解决。本文以 PC 上的 Chrome 用 Xmarks 同步到 Mac 上的 Safari 为例,说明怎样将书签正确同步到 iCloud 上。

本文的做法理论上也可以支持 PC 的 Chrome 通过 IE 同步到 iCloud,但是未测试,欢迎大家反馈。