2009年1月16日金曜日

CD/DVD を Mac と Win で共有(承前)

 最終的に,CD から iso イメージを作成できるフリーウェアとして見とかったのは以下の3つ.
  ・CD Manipulator
  ・CDBurnerXP
  ・Magic Iso Maker

CD Manipulator
 CD から .img と .cue なる2つのファイルが生成する..img と .iso は形式が一緒なので拡張子を変えればそれでよいとあちこちに書かれているが,このアプリで作成した .img ファイルは Mac で読めなかった.拡張子を .iso に変えても同様に駄目.

CDBurnerXP
 このアプリでは iso が作成できない CD があった.

Magic Iso Maker
 このアプリでは iso が作成できない CD があった.

2009年1月15日木曜日

CD/DVD を Mac と Win で共有

MacOS X は Windows マシン上の iso ファイルを仮想ドライブとしてデスクトップ上にマウントすることができる.そこで,色々な電子辞書のCDを iso 化して Windows マシン上においておき,Win と Mac から好きなときに好きな辞書にアクセスできるようにしようと考えた(もちろん使用許諾のあるもののみ).

Mac では iso ファイルをダブルクリックするだけで仮想ドライブがマウントされる.
Windows の方は仮想 CD/DVD ドライブマネージャをインストールしておけば良い.定番アプリは DAEMON Tools Lite本家)だろう.→〔解説〕

そこで,CD-ROM の中身を iso 形式にして Windows の HD へ保管する手立てを考える.

MacOS X では「ディスクユーティリティー」を使えば CD-ROM から拡張子 .cdr のディスクイメージが作成でき(例えば AllAboutの記事を参照),この拡張子を .iso に変えるだけで Windows 側でも利用可能になる.

ところが,ある CD-ROM から作成した cdr イメージを Mac 上でマウントすると「壊れている可能性があり,お使いのシステムを壊すかもしれません」というメッセージが表示された.ググッてみると,何件かそういう事例が挙がっていた.使用上問題はなさそうな雰囲気ではあるが,あまり気持ちの良いものではないため,iso ファイルを Windows 側で作ることにした.

検索した結果,使えそうなソフトとして挙がったものは下記の通り.
なお,「はてな」に CD も DVD と同じようにISOイメージを作成できるという書き込みがあったので,信用して DVD 焼きツールを色々漁って見たが,結局,DVD-video 用のツールで CD の iso イメージを作ることはできないようだ.ガセネタを掴まされたらしい.しかし,折角調べたので消さずに残しておく.

◆ CD Manipulator 2.70

 フリーウェア →使用法はこちら
 高性能なCDライティングソフト.マスタリングやCDのバックアップなど幅広い用途に使える.img形式のイメージファイルができるが,どんな形式なのか僕にはまだ不明.

◆ CDBurnerXP 4.2.3

 CD/DVD ライティング ソフトウェア.ブルーレイディスクや HD-DVD もサポート.ISO イメージの作成や書き込みをすることも可能.
 本家HELP〔isoイメージの作り方

◆ burnatone 0.99.5

 フリーウェア →ダウンロードは本家こちらから.使用方法はk本こちら
 シンプルで軽量なCD / DVDライティングソフト.イメージ作成,リッピング,コピーなどの機能がある.音楽ファイルは wav,mp3,mp2,ogg,flac 形式に対応.

◆ DVD Decrypter 3.5.4.0
開発中止/公式サイトは閉鎖
 フリーウェア →ダウンロードは fileforumここそこなどから.
 使い方はこちら
 DVD-Videoのリッピング(チャプター単位も可),バックアップコピー,焼きが行える統合アプリ.DVD Shrink でリッピング中にエラーが出る場合も,DVD Decrypter だと通ることが多いという.

◆ ImgBurn
 CD / DVD / HD DVD / Blu-ray 焼きアプリ.DVD Decrypter から ISO イメージ書き込み機能のみを抜き出したもの.DVD 二層ディスクに公式対応しており書き込みの信頼性が高い.

◆ Magic Iso Maker
 ISOファイルをダイレクトに作成・編集・抽出できるCDイメージファイルユーティリティ.同サイトにはおまけとして仮想CD/DVDドライブ作成ユーティリティー MagicISO Virtual CD/DVD-ROM も置いてある.
 なんか良さそうなアプリなのに,日本語の紹介記事がちっとも無い.どういうこと?

■参考サイト
DVD・CDコピーソフト/ライティングソフト一覧@フリーソフト紹介所
 良く整理されていて便利.

DVDコピーについて
 こちらはDVDメディアの説明に始まり,吸出し+焼きアプリの紹介まで詳しい.参考になる.

 

2009年1月13日火曜日

rm → avi 変換

■ 前説

 Real Video の再生に Real Player を使うのはちと憚られる.スパイウェア疑惑は過去のものかもしれないが,「もう大丈夫だ」というお墨付きが得られないとやはり使う気になれない.
 加えて,最近個人的に avi形式(DivX or XviD + mp3)が好きなので,できれば手持ちの動画をこの形式に統一したいという気持ちもある.

 この形式を好む理由には2つある.
【1.編集が容易】
 DivX or XviD + mp3 なら Virtual Dub で簡単に追加・削除などの編集ができる.ram も切り貼りできないことは無いが,インターフェィスの使い勝手が悪いので作業をしていても楽しくない.

【2.Macで待たずに再生可】
 ASF や WMV を Mac で再生する時には先読みが必要なので再生時にストレスを感じる.DivX or XviD + mp3 なら Mac 上でも素で再生できるので都合が良い.なお,rm は Mac と相性が良いので特に問題はないのだが,1の理由で優先順位が下がってしまう.

 ちなみに,OS X は Windows マシン上のファイルを直接アプリケーションで開くことができるので,ものすごく便利.動画も例外ではなく,Windows マシンにつないだ HD を動画サーバーに見立てて使うことができるのだ.そういう使い方をするのなら,Mac でも扱い易い動画形式にしておく方が良いに決まっている.を Mac で先読み無しに再生できる DivX or XviD + mp3 や ram にしておきたくなるのが人情というものだろう.

■ 変換

 Super で rmvb を avi に変換するテストを実施してみた.
 結論から言うと, ram を avi に変換するときは avi のビットレートを ram のビットレートの2倍位にしなければ画質が維持できないようだ.

 Super での設定は
  avi (XviD+mp3)
  MEncoder + DirectShow Decode
が良さそう.XviD は DivX よりもエンコードに時間を要するが,同一ビットレートにて変換した結果を比較してみると,DivX の方が得られる動画ファイルの容量は若干小さくなり,かつ画質も良いようだ.

■ 変換

 ImTOO RM Converter というシェアウェアがある.
 

2009年1月11日日曜日

エンコード時の画質維持

先の投稿「尻切れ動画の修復」に基づいて動画を再エンコードしている時に気づいたのだが,Super を用いて再エンコードした動画の画質が低下してしまうようだ(これはエンコーダの選定が悪かったためと後で判明).

例えば,MMname2で

 [codec] XviD 1.1.2   [bit rate] 1481Kbps   [frame rate] 29.97fps
 [codec] MPEG1-Layer3  [sampling rate] 48KHz  [bit rate] 128Kbps

と表示されるファイルを,Superで

output container: avi
output video codec: XviD
output audio codec: mp3
MEncoder

[VIDEO]
video scale size: No Change
Aspect: -
Frame/sec: 29.97fps
Bitrate: 1488kbps

[AUDIO]
Sampling frequency: 48000Hz
Channels: 2
Bitrate: 128kbps

のような設定(すなわち元ファイルと同じ条件)で再エンコードすると,得られた動画の画質が元のファイルより悪くなってしまうのだ.

自分なりに原因を調べた結果,分かったことを挙げておく.

可変ビットレートの動画をMMname2で解析したとき得られるビットレートの情報は平均値ではないか? それに対し,Super で設定するビットレートは最大値のような気がする.したがって,ビットレートを MMname2 の表示どおりに設定してエンコードすると,できたファイルのビットレートは全体的に低くなってしまう.

ゆえに,ビットレートは大きめに設定して変換した方がよさそう.

次に,これも確証は無いが,DirectShow Decide にチェックを入れてエンコードした方が画質は良くなるようだ.今までこのスイッチはオフにしていたが,たまたまオンにしてエンコードしたところ,オフの場合よりも良くなったような気がするのだ.とりあえず,今後,このスイッチはオンで行くことにしよう.


 

尻切れ動画の修復

ネットからダウンロードした動画の末尾が完結していないという場面にしばしば遭遇する.ストリーム動画のダウンロードが途中で停止してしまった場合や,元のファイル自体に何らかの不都合(エンコード時やアップロード時のミス)がある場合などにこういう問題が発生するようだ.Gom Player で再生すると画面下のプログレスバーが動画の途中までしか表示されず,数秒先に移動するなどの操作が実行できないファイルがこれだ.MMname2 で解析すると「尻切れファイル」と診断される.

基本的には再度ダウンロードし直せば良いのだが,元ファイル自体が壊れていたり,ダウンロード元が既に存在しない場合は,手元のファイルを修復するしか手がない.そこで,尻切れファイルを修復する方法について考えてみた.修復とはファイルに書き込まれた再生時間の情報と実際の再生時間を一致させるという事である.

【方法1】ストリームコピーで新しいファイルを作る
Super や Virtual Dub のストリームコピー機能を使用して新しいファイルを作成すると,尻切れ状態が解消されることがある.

【方法2】再エンコードする
上の方法でも尻切れが解消されない場合は,Super 等を使って再エンコードすれば良い.
ただし,再エンコードだから時間はかかる.もっと手短に済ます方法は無いものだろうか.今の所,良い方法は見つからない.
 

2008年12月10日水曜日

OSXでWindows上のプリンタに印刷

■ 前説

我輩のIT環境は,マシンが Windows2000,WindowsXP,MacOSX Tiger の3台に対し,プリンタは Canon LBP3300(レーザープリンタ)の1台のみ.普段はプリンタを 2000に USB 接続しておき,プリンタの共有をオンにして XP からも印刷できる様にしてある.

以前,OSX のプリンタ設定に「Windowsプリント」という項目があるのに気づいて「こりゃすげー」と感動し,早速試してみたがだめだった.「プリンタの機種」の一覧に Canon プリンタのリストは表示されるが,肝心の LBP3300 が存在しないのだ.この一覧に表示される機種だったら Windows に接続されていても難なく印刷できるのかと思うと(真偽の程は定かでない)大いに残念だが,無いものは仕方ない.

※確か,gimp-print ドライバをインストールしたら一覧に表示されるプリンタが増えたと記憶している.

そもそもこのプリンタは CAPT という Canon 独自のプロトコルを使うので,いささか特殊である.Canon の提供するドライバが「Windowsプリント」に対応していないようなので Windows 上のプリンタで印刷することはまず無理であろう.そう思いつつも,幾つか考え付く方法を試してみたが,やはりOSXが「Windowsプリント」を可能にするのか仕組みが分からないままあがいても仕方が無いので,結局あきらめた.

そういう訳で,OSXでプリンタを使うときは,わざわざUSBケーブルを Windows から Mac に繋ぎ直して印刷するという面倒なことをせざるをえなかった.それが面倒なので普通は,Macのファイルを PDF や PS にして Windows に持っていき,Windowsから印刷する,という方法に甘んじることにした.

それから1年ほどたったが,こういう使い方はやはり面倒である.OSX から Windows 上のプリンタで印刷したいという思いは消えない.

そこで,あらためて調査したところ,Mac から Windows 上のプリンタに出力できる方法があることを発見.実際に試したところ,紆余曲折はあったものの最終的に筆者の環境でも実現することができた.以下,その要約.

■ 設定手順

Windows 上で Ghostscript と RedMon を組合せてやると,Macからも印刷できる.原理は次の通り.

Windows上に仮想PSプリンタを作り,Macからはネットワーク経由でこのプリンタにアクセスする.仮想PSプリンタに来たデータは Ghostscript が橋渡しとなって現実のプリンタに送られる.
詳細な解説や設定手順は以下のページに詳しい.

【参考ページ】
1. WindowsマシンにつながったWindows専用プリンタでWindows用ドライバを使ってLinuxマシン(やMacから)から印刷を行う方法
2. Windows機を仮想PSプリンタ・サーバにする by 小川弘和
3. MacOSXからWindows経由でのプリンタ印刷 by くいくい
  [2009/10/2 追記]本家消失.Googleキャッシュのコピー
4. Windows 機を仮想 PS プリンタにする by たちゃな@巫研
5. Ghostscript + GSview + RedMon によるPostScript互換プリンタで印刷 by <不明>
6. Windows用ドライバしかない非ポストスクリプトプリンタをLinuxのCUPS経由で使う by <不明>
7. [fol] Re: gs driver for ESC/PageS?
8. MacOS X 10.3 (Panther) + MacOSXからWindows共有プリンタに印刷

筆者の2000には Ghostscript が既に入っているので,新たにインストールしたのは RedMon のみ.

上記1~3のサイトを参考に仮想プリンタを設定し,Windows 上でこの仮想プリンタに出力してみたがうまくいかない.相当試行錯誤した結果,筆者の環境では以下の設定により動作するようになった.

1.rspファイルの作成

Ghostscript に渡すパラメータを書いたファイル(拡張子 'rsp')を準備し,好きな所に置いておく.以下は筆者の設定例.
ファイル "LBP3300.rsp'' の中身
-q
-dBATCH
-sDEVICE=mswinpr2
-dNOPAUSE
-dSAFER
-sPAPERSIZE=a4
-r600
-sOutputFile="\\spool\Canon_LBP3300"

Ghostscript の lib フォルダや fonts フォルダを指定するオプションは記述する必要がなかった.環境設定で既にパスを通してあるからだろう.

2.仮想PSプリンタのポートを構成

仮想PSプリンタの出力ポート RPT1 の「ポートの構成」の設定
〔注〕太字の部分が実際に入力する事項
〔注〕path_name は当該ファイルのパス

Redirect this port to the program:
C:\path_name\gswin32c.exe

Arguments for this program are:
@C:\path_name\LBP3300.rsp -

Output:
Program handles output

Run:
Hidden, Run as User チェック

また,仮想PSプリンタのドライバには "Apple LaserWriter Pro 600" を用いた.
最初は "Apple Laser Write II NT" を選択していたが,これは解像度600dpi に対応していないようだったので,採用を取りやめた.

3.レジストリの追加

参考ページ7に書かれた通りに,レジストリを変更する.
具体的には,レジストリエディタ regedit を使って,
[HKEY_USERS\.DEFAULT\Software\Microsoft\Windows NT\CurrentVersion\Devices]
"EPSON LP-800S"="winspool,LPT1:"
といったエントリを追加する.なお regedit の使用は危険なので十分注意.

4.Mac側でプリンタを設定

参考ページ3の通りに設定すればヨシ.

■ 実行結果

本当に OS X から Windows 上のプリンタに印刷できるようになった!!!

参考ページ3には「範囲指定で印刷すると最初のページしか印刷されない」とあったが,筆者の場合そのような問題は生じなかった.
また,プリンタが動き出す時間も,Mac にプリンタを直接つないだ場合より短くなった.
すばらしい!!
RedMon様々である.

両面印刷やページレイアウトなど,LBP3300 の機能が活用できないという問題があるが,それはまたいつか考えよう.無理かもしれないし.

参考ページ4にある通り,LPD (line printer daemon) を動かすと,仮想PSプリンタをIPプリンタとして使用することもできる.これも動作検証済み.
 

2008年12月4日木曜日

enumerate環境のカスタマイズ

jsarticle.cls使用時のenumerate環境内で,複数行にわたる段落が
1.昔々ある処にお爺さんとお婆さんが住んでいました.お爺さ
んは山へ芝刈りに,お婆さんは川へ洗濯に行きました.お婆
さんが川で洗濯していると・・・
のようになり,字下げされない.これはイヤだ.どうにも気に食わない.
1.昔々ある処にお爺さんとお婆さんが住んでいました.お爺さ 
んは山へ芝刈りに,お婆さんは川へ洗濯に行きました.お婆さ 
んが川で洗濯していると・・・
のようにしたい.そこでカスタマイズすることに.

enumerate 環境のカスタマイズ例は以前「list環境前後の空白を調整する方法」でもやった.この環境のベースになっているのは list 環境なので,list 環境関連のパラメータを設定しなおす必要がある.list 環境のカスタマイズについては吉永徹美の LaTeX 研究室の例も参考になる.

list 環境で使用されるパラメータは下表の通りであるが,重要なのは,これらのパラメータを本文中で

\setlength{\itemsep}{1zw}

のように設定しても反映されないということ.プレアンブルで list 環境を再定義する必要がある(他にも方法があるのかどうか私は知らない).

パラメータ 説明
\itemindent ラベルの前に入るスペース。
\labelsep ラベル右端から項目までの長さ。負の値も可。
\labelwidth ラベルを含めたボックス幅。
\listparindent 一項目内の、第2段落以降で用いられるインデント量。
\leftmargin 左マージンから項目内容までの長さ。負の値は不可。
\rightmargin 右マージンから項目内容までの長さ。負の値は不可。
\parsep 各段落間のスペース。
\itemsep 新規項目の前に\parsepと共に入る行間スペース。
\parskip 段落の前に入る縦方向スペース。デフォルトは、ゼロ。
\topsep 前の段落と第一項目までの距離、次の段落と最後の項目までの距離。
\partopsep \parskip\topsepを加えた長さ。

いずれも \setlength\addtolength により値を設定する.
上表は以下の情報を参考に作成.pLaTeX2e handbook熊澤先生のページ


図にすると,こんな感じ↓になるんではなかろうか.なお,解釈が間違えているかも知れないので悪しからず.


それでは,実際のカスタマイズ結果.

jsarticle.cls ではlist 環境を次のように定義している.
\def\@listi{\leftmargin\leftmargini
  \parsep \z@
  \topsep 0.5\baselineskip
  \itemsep \z@ \relax}
\let\@listI\@listi
\@listi
ここには \itemindent\listparindent などが設定されていないので,それを追記した上で,プレアンブルに書いておけばよい.例を示す.

\def\@listi{\leftmargin\leftmargini
 \itemindent 1zw      % 追加
 \parindent\itemindent   % 追加
 \listparindent\parindent % 追加
 \parsep \z@
 \topsep 0.5\baselineskip
 \itemsep \z@ \relax}
\let\@listI\@listi
\@listi

なお,理由は不明だが \labelsep は本文中で設定した値がちゃんと反映されるので,上の例では list 環境の定義内では値を設定しなかった.

この定義を用いると
1.昔々ある処にお爺さんとお婆さんが住んでいました.お爺さ 
んは山へ芝刈りに,お婆さんは川へ洗濯に行きました.お婆さ 
んが川で洗濯していると・・・
のようになり,目的が達せられる.

1.昔々あるところにお爺さんとお婆さんが住んでいました.お爺
さんは山へ芝刈りに,お婆さんは川へ洗濯に行きました.お婆さ
んが川で洗濯していると・・・


しかし,これで話は終わらない.list環境をプレアンブルで再定義しても,それが small環境内のenumerate環境には反映されないことが発覚したのだ. jsarticle.cls を覗いて small 環境の定義を見てみて驚いた.

\newcommand{\small}{%
 \ifnarrowbaselines
  \@setfontsize\small\@ixpt{11}%
 \else
  \@setfontsize\small\@ixpt{13}%
 \fi
 \abovedisplayskip 9\p@ \@plus3\p@ \@minus4\p@
 \abovedisplayshortskip \z@ \@plus3\p@
 \belowdisplayskip \abovedisplayskip
 \belowdisplayshortskip \belowdisplayskip
 \def\@listi{\leftmargin\leftmargini
       \topsep \z@
       \parsep \z@
       \itemsep \parsep}}

となっているのだ.なんと,smallの定義内で list環境が独自に定義されているではないか.これにはやられた.footnotesizeについても同様だった.何ゆえ一々定義するのか不明だが,そうなっている以上, small 環境内の list 環境をカスタマイズしたければ small 環境も再定義するしかない.先と同様に

 \itemindent 1zw      % 追加
 \parindent\itemindent   % 追加
 \listparindent\parindent % 追加

の三行を追加することにより,問題が解決した.
それにしても何故,jsarticle では文字サイズを変えるたびに list 環境を再定義してあるのだろうか(jarticle.cls の場合どうなっているのかは面倒だから確認していない).謎である.