海外DVD 字幕の付け方 その3

前回の続きです。
ダウンロードしてきた、英語の字幕データは下のような感じです。

00:00:16,727 --> 00:00:19,230
He just looks
like another
ball player to me.

これをDeepLで訳すと

00:00:16,727 --> 00:00:19,230
彼はただ見ているだけ
別のように
私にとってのボールプレーヤー。

こんな感じになってしまいます。
これでは意味が分かりません
しかし、元の英語を下のようにすると

00:00:16,727 --> 00:00:19,230
He just looks like another ball player to me.

00:00:16,727 --> 00:00:19,230
彼は私には別の球児にしか見えない。

と翻訳してきます。
見てわかるようにこちらのほうが、意味が分かりやすいと思います。

つまり
英語の字幕は途中で改行しているため
翻訳ツールを使うと1行ずつ翻訳するので
意味が分かりにくくなるということです。

この複数行になっている部分を1行にして翻訳すると
わかりやすい日本語になりやすいということです。

ただし、文が長くなると日本語の字幕も長くなってしまい
画面上ではみ出してしまうことがあるので
長い分は適当なところで改行する必要が出てきます。

この日本語の長い分を開業する作業は1話の中に
それほどないので手作業でいいのですが

英文を1行にする作業はかなりの手間がかかります。
この超人ハルクの場合1話当たりセリフ以外のデータも含め約3000行の
データがあります。

これをひとつづつ手でするには根気がいるので
下のようなエクセルのマクロを作ってみました。
なお、表示幅が小さいので改行がおかしくなっています。
コピーしてメモ帳などに張り付けていただくと
見やすくなると思います。
Sub Sample1()

    '=======================================================================================
    '
    '  途中で改行しているデータを1行にして出力する
    '
    '=======================================================================================

    '===============================
    ' 使用変数の設定
    '===============================
                
    Dim buf                         As String                                   ' 入力ファイル用のワークエリア
    Dim buf2                        As String                                   ' 出力ファイル用のワークエリア
    Dim filename_w                  As String                                   ' 出力ファイル名用のワークエリア

    '===============================
    ' 入力ファイルを開きます
    '===============================
    
    Open Cells(2, 2) For Input As #1                                            ' 入力ファイル名をcells(2,2)に入れます。つまりB2のセルに
    
    '===============================
    ' 出力ファイル名を編集します
    '===============================
    
    filename_w = Mid(Cells(2, 2), 1, Len(Cells(2, 2)) - 4) & "_out" & Right(Cells(2, 2), 4)     ' 入力したファイル名の後ろに_outを付加する
    
    '===============================
    ' 出力ファイルを開きます
    '===============================
    
    Open filename_w For Output As #2
    
    '===============================
    ' メイン処理出力
    '===============================
    
    buf2 = ""                                                                   ' 出力用ワークエリアの初期化
    
    
    Do Until EOF(1)                                                             ' データがなくなるまで処理を繰り返す
        
        Line Input #1, buf                                                      ' 入力データを読み込みます
                
        If IsNumeric(Mid(buf, 1, 1)) = True And Len(buf) = 1 Then               ' 文字長が1で数字の時
            
            If Len(buf2) > 0 Then                                               ' 出力ワークエリアに値が入っていたら出力します。
               Print #2, buf2
               buf2 = ""
            End If
            Print #2, buf                                                       ' 読み込んだデータをそのまま出力します。
        
        Else
            If IsNumeric(Mid(buf, 1, 2)) = True And Len(buf) = 2 Then           ' 文字長が2で数字の時
                    
                If Len(buf2) > 0 Then                                           ' 出力ワークエリアに値が入っていたら出力します。
                    Print #2, buf2
                    buf2 = ""
                End If
                Print #2, buf                                                   ' 読み込んだデータをそのまま出力します。
        
            Else
                If IsNumeric(Mid(buf, 1, 3)) = True And Len(buf) = 3 Then       ' 文字長が3で数字の時
                    
                    If Len(buf2) > 0 Then                                       ' 出力ワークエリアに値が入っていたら出力します。
                        Print #2, buf2
                        buf2 = ""
                    End If
                    Print #2, buf                                               ' 読み込んだデータをそのまま出力します。
                
                Else
                    If IsNumeric(Mid(buf, 1, 4)) = True And Len(buf) = 4 Then   ' 文字長が4で数字の時
                    
                        If Len(buf2) > 0 Then                                   ' 出力ワークエリアに値が入っていたら出力します。
                            Print #2, buf2
                            buf2 = ""
                        End If
                        Print #2, buf                                           ' 読み込んだデータをそのまま出力します。
                    
                    Else
                    
                        If Len(buf) = 0 Then                                    ' 読み込んだデータがNULLの時
                        
                            If Len(buf2) > 0 Then                               ' 出力ワークエリアに値が入っていたら出力します。
                                Print #2, buf2
                                buf2 = ""
                            End If
                            Print #2, buf                                       ' 読み込んだデータをそのまま出力します。
                        
                        Else
                            
                            If InStr(1, buf, "-->") = 0 Then                    ' 読み込んだデータに"-->"が含まれないとき
                            
                                buf2 = buf2 & " " & buf                         ' 出力用ワークエリアにあるデータの後ろに空白を入れた後、入力ワークエリアのデータを加えます
                                
                                If Right(buf, 1) = "." Or Right(buf, 1) = "?" Or Right(buf, 1) = ")" Then   ' 読み込んだデータの最後の文字が「.」「?」「)」なら出力用ワークエリアを出力します。
                                    Print #2, buf2
                                    buf2 = ""
                                End If
                                
                            Else                                                ' 読み込んだデータに"-->"が含まれていたとき
                            
                                Print #2, buf                                   ' 読み込んだデータをそのまま出力します。
                                
                            End If
                        End If
                    End If
                End If
            End If
        End If
                            
                            
    Loop

    Close #1
    Close #2
    

    
End Sub
簡単に内容を書くと
エクセルのB2セルにファイルのパスとファイル名を入れます。
c:\翻訳\01.srt という感じです。

実行すると1行ずつ読んでいき「.」「?」「)」が分の最後に出てくるまで
文字を繋げます。文字と文字の間には空白を入れます。「.」「?」「)」が
出てきたら1行のデータとして出力します。
数字や空行、時間等はそのまま出力します。
処理が終わると元のファイル名に「_out」とついたファイルができます。
この場合だと「c:\翻訳\01_out.srt」というファイルができます

簡単なマクロなので例外的なデータがあった場合は上手く編集できないかも
しれませんが、今のところ問題なく使えています。

まあ、参考程度でご利用ください。
問題が発生しても関知いたしませんのでご容赦ください。

 なお、翻訳はあくまでも自分で購入した海外のDVD等の動画を個人で
楽しむために翻訳するものであって、それを一般に公開する目的で翻訳
してはいけません。
 実際、自分で日本未公開の映画を自分で翻訳してインターネットで
公開した人が著作権違反で逮捕されています。くれぐれもそのようなことは
行わないように。

もし、この「海外DVD 字幕の付け方」の解説について問題等が
ございましたらコメントにてご連絡ください。削除もしくは非公開の対応をさせていただきます。

2020/8/5 追加
 上のマクロでは9999行までしか対応していません。
 もし、それ以上ある場合はマクロを修正してお使いください。

ACCESS2003でテーブルを開こうとしたら「不明」というメッセージが出て処理が出来ない

ACCESS2003でテーブルを開こうとしたら「不明」というメッセージが出て処理が出来ないということが起こった。

VBAでファイルを開けるときにも同じメッセージが出て処理が止まる状態であった。

調べると対処方法があった

1.ウインドウズのスタートボタンから「ファイル名を指定して実行」を開ける。

2.regsvr32.exe C:\WINNT\system32\msjtes40.dll を入力して実行

3.成功すると、「DLLRegisterServerは成功しました」のメッセージが出れば成功

4.ACCESSを起動して確認

このページを参照して対応した http://support.microsoft.com/kb/317708/ja

ボタンなどの色や属性を変えるとき用の参考資料

英語表記 日本語表記

AllowAutoCorrect オートコレクト
AsianLineBreak 禁則処理
AutoActivate 自動アクティブ
AutoExpand 自動拡張
AutoRepeat 自動繰り返し
AutoTab 自動タブ
BackColor 背景色
BackStyle 背景スタイル
BorderColor 境界線色
BorderStyle 境界線スタイル
BorderWidth 境界線幅
BottomMargin 下余白
BoundColumn 連結列
Cancel キャンセルボタン
CanGrow 印刷時拡張
CanShrink 印刷時縮小
Caption 標題
Class クラス
ColumnCount 列数
ColumnHeads 列見出し
ColumnWidths 列幅
ControlSource コントロールソース
ControlTipText ヒントテキスト
DecimalPlaces 小数点以下桁数
Default 既定のボタン
DefaultValue 既定値
DisplayType OLE表示の種類
DisplayWhen 表示対象
Enabled 使用可能
EnterKeyBehavior Enter キー入力時動作
FilterLookup ルックアップ列
FontItalic フォント斜体
FontName フォント名
FontSize フォントサイズ
FontUnderline フォント下線
FontWeight フォント太さ
ForeColor 前景色
Format 書式
FuriganaControl ふりがな
Height 高さ
HelpContextId ヘルプコンテキストID
HideDuplicates 重複データ非表示
HyperlinkAddress ハイパーリンクアドレス
HyperlinkSubAddress ハイパーリンクサブアドレス
IMEHold IME 入力モード保持
IMEMode IME 入力モード
IMESentenceMode IME 変換モード
InputMask 定型入力
IsHyperlink ハイパーリンクあり
KeyboardLanguage キーボードの言語
Left 左位置
LeftMargin 左余白
LimitToList 入力チェック
LineSlant 線傾斜
LineSpacing 行間
LinkChildFields リンク子フィールド
LinkMasterFields リンク親フィールド
ListRows リスト行数
ListWidth リスト幅
Locked 編集ロック
MultiRow 複数行タブ
MultiSelect 複数選択
Name 名前
NumeralShapes 数値の形態
OLEClass OLEクラス
OLEType OLEタイプ
OLETypeAllowed 作成可能OLE
PageIndex ページインデックス
Picture ピクチャ
PictureAlignment ピクチャ配置
PictureTiling ピクチャ全体表示
PictureType ピクチャタイプ
PostalAddress 住所入力支援
ReadingOrder 読みの順序
RightMargin 右余白
RowSource 値集合ソース
RowSourceType 値集合タイプ
RunningSum 集計実行
ScrollBarAlign スクロール バーの配置
ScrollBarAlign スクロールバーの配置
ScrollBars スクロールバー
ShortcutMenuBar ショートカットメニューバー
SizeMode OLEサイズ
SourceDoc OLE元ファイル名
SourceItem OLE元データ名
SourceObject ソースオブジェクト
SpecialEffect 立体表示
StatusBarText ステータスバーテキスト
Style スタイル
TabFixedHeight タブ高さ
TabFixedWidth タブ幅
TabIndex タブ移動順
TabStop タブストップ
Tag タグ
TextAlign 文字配置
Top 上位置
TopMargin 上余白
Transparent 透明
TripleState トリプルステート
UpdateOptions OLE更新設定
ValidationRule 入力規則
ValidationText エラーメッセージ
Verb 動作
Vertical 縦書き
Visible 可視
Width 幅

エクセルでファイル変換 こっちを使った方がお手軽

エクセルでファイル変換
ホームページは下記
http://www.vector.co.jp/soft/winnt/util/se474835.html
エクセルで複数のファイルのリネーム・移動・コピー・圧縮といった一括変換を行う。
複数ファイルの揉み込みしてから変換が出来るので便利