HDTVtoMPEG2 海賊4


メンテナの方には内緒の方向で・・・

追記:スタティックライブラリ版P4の実行形式のみ作ってみました。(2012.10.27)

HDTVtoMPEG2-Pirated4 (H2MP4)

ファイル名に「ソ」を含む場合の不具合を修正しました。

vc2010のソリューションごと梱包。HDTVtoMPEG2-Pirated4.zip。Releaseフォルダにexeが入ってます。

おでこの「P4」が新版の目印です。修正が数箇所に渡るので、動作に問題があるやも知れません。旧版を維持してください。問題があれば、レポしていただけるとありがたいです。修正できそうならば挑戦します。

修正概要

3月6日 海賊3 に対する Shift-JISさんのコメント

ダメ文字に対応する予定とかありませんか?
「ソ」が頻繁に引っかかります

>megtonさん
TRIファイルはHDTVtoMPEG2.iniのTRIOutで指定すると任意の場所に保存できるようですよ
TRIOut=D:\TS\temp\ のようにディレクトリの後ろに\記号を付けないと無視されます
なお、右クリック→configureから設定すると\記号が付きません

Shift-JISさんのコメントに修正方法が的確に指摘されていますので、全文引用しました。
名前(Shift-JIS)もさることながら、ディレクトリの最後に「¥」を打つ、打たない問題が修正方法を端的に現しています。あとは、該当箇所を探して潰すだけでした。

「ソ」に含まれる「0x5C」は、「¥」(バックスラッシュ「\」)なので、フォルダの区切りとバッティングしてますが、H2Mでは、ファイル名を取り出すときに、strrchr(文字を後ろから探す)関数を使っていて、「ソ」の「0x5C」に誘惑されてしまったようです。そこで、shlwapi のPathFindFileName関数でリプレースしてみました。典型的には次のようにしました。

  • オリジナル

  char *p = strrchr(buf, '\\');
  if (p)
  {
    p++;
    *p = '\0';
    char *q = (char*)strrchr(name, '\\');
    if (q)
    {
      q++;
      strcpy(p, q);
    }
  }
  else
    buf[0] = '\0';
  • 修正後
  PathAppend(buf,PathFindFileName(name));

.iniファイル内の「¥」問題は、PathAppend関数を使うことで、あってもなくても対処できるようになりました(はずです)。

累積修正箇所

「ソ」問題の修正(HDTVtoMPEG2Dlg.cpp)
  • CHDTVtoMPEG2Dlg():.iniファイル名を実行モジュール名から取得生成
  • ProcessCmdLine():
    • .triファイル名を入力ファイル名から取得生成
    • m_InputFiles(CListBox-CDragAndDropListBox)から、フォルダ名を取り出して、.iniファイルのPathInに記録しようとしています。しかし、m_InputFilesは、ファイル名しか保持していないようなので、無意味と判断し、該当部分ごっそり削除しました。
  • CreateOutputFilename():PathOutの生成と、連番付加。
  • OnDropFiles():.triファイル名の生成。
  • CreateTSIFileName():.triファイル名の生成。
  • ProcessTRIFile():.tri内のファイル名の拡張子判定。
  • UpdateRegionsUI():TSファイル名の取得。
  • ConvertCallback():ProcessDlgの表示用ファイル名の取得。
  • OnOutputfileBrowse():出力ファイルフォルダの取得。
  • SaveOutputFilePath():.iniファイルに記録するPathOutの生成。
CSliderCtrlのバグ回避(HDTVtoMPEG2Dlg.cpp)
  • ConfigureRegionsUI()
    • CSliderCtrlのバグ(?)回避。SetPos()で、値が変化しないとUIが更新されない問題を回避。
    • 輝度調整(BrightnessSliderCtrl)で、値が「0」の場合、スライダが左に張り付いてしまう不具合。
    • これに伴い、contrast、time(region marker)スライダも修正。
 m_brightnessSlider.SetPos( -99 );
 m_brightnessSlider.SetRange(-5, 5);
 m_brightnessSlider.SetPos( m_Brightness );
その他
  • 不要なプロパティの削除(.vcproj、.vcxproj を手作業で編集)
  • stream files の clear all ボタンに確認ダイアログを付加。
  • CMスキャンで異常終了。解像度を変更した際に、不具合を与えていたようなので、これを修正。オリジナルのH2Mで確認したところ・・・CMカットされない・・・という同じ結果になったので修正ができたような、できないような・・・CMスキャンは元々うまく動かせていなかったので、何が正解かわかりません。