SubRip Subtitle Extender(.srt)

人が外国語でコミュニケーションを取り、耳で理解する練習をしている場合、彼の字幕は助けにすぎません。その意味は、画面上の明瞭度、規範性、複雑さ、およびスピーチの速度に依存します。 しかし、ある人が外国語で合理的に十分に読めば、彼の字幕が主な情報源になります。



残念ながら、2番目のケースでは、タイトルを表示する通常の時間では十分ではありません。 多くのプログラム(例えば、 SubtitleEdit )でそれを長くすることができます-しかし、この延長は合理的な制限によって制限される場合があり、そのような単純なアクションのための本格的なエディターの実行は必ずしも便利ではありません。



したがって、私はこの目的のためだけに簡単なスクリプトを作成しようとし、時間を延長するために2つの原則を選択しました。



1.一方向の延長:各字幕の表示の終わりは、次の字幕の始まりまで延長されます(1ミリ秒少ないため、重複しません)。 これは簡単な方法ですが、時間が一方的に分散されるため、それほど効果的ではありません。 一方、この方法はより身近です。



2.両方向の伸び:最初に、2つの字幕間の休止時間が計算され、次にこの休止が半分に分割されます-半分は現在の字幕の最後に追加され、もう1つは次の字幕の先頭から減算されます。 したがって、各字幕は可能な限りそのサウンドレプリカに先行し、可能であれば、その後の画面上で可能な限り遅延します。 この形式に少し慣れる必要がありますが、時間はより均等に分散され、視聴者は事前に重要なフレーズを読んで理解する相対的な機会があります。



スクリプトは、JavaScript(ネットワークバージョン)とPerl(ローカルコンソールバージョン)の2つの形式で実装されます。



ネットワークバージョンは、字幕ソーステキストの水域と延長バージョンの出力域を含むページで表されます。 それほど便利ではありません(テキストエディターで字幕を開き、テキストをコピーし、スクリプトを使用して変更し、変更したバージョンを貼り付けて保存する必要があります)が、簡単で公開されています(最新バージョンのChrome、Firefox、Opera、Safariで作業を確認しました)。 ページはディスクに保存でき、ローカルで機能します。



コンソールバージョンは、ソースファイルへの引数を取るPerlスクリプトによって表され(引数を指定しない場合、スクリプトは対話モードでそれについて尋ねます)、表示時間を延長した新しいファイルを作成し、名前に.longテールを追加します。 入力と出力でUTF-8エンコーディングを使用します(異なるエンコーディングを受け取ったため、インタープリター自体がエラーを報告するはずです-この場合、元の字幕をUTF-8に保存します)。



コードを説明するのはほとんど意味がありません。すべてが非常に単純です。両方のスクリプトがソーステキストを配列の配列に変換し、一時停止を分析し、時間を延長し、すべてを字幕テキストに戻します。 一部の疑わしい好奇心は、 SubRipタイムコードをミリ秒に、またはその逆に変換して計算を簡素化する2つの小さな関数でしか表現できませんが、それらは非常に明白です。



スクリプトは、テキストが形式に準拠しているかどうかをチェックせず、元のタイミングエラー(重複するタイムコード、負の表示時間など)を修正しません。したがって、疑わしい字幕の場合、すべてのチェックは、本格的なエディター(たとえば、同じSubtitleEdit )で事前に行うのが最適です。 コンソールバージョンはファイル拡張子のみをチェックし(.srtではない場合、警告を出して終了します)、誤って大きなものの処理を開始します。



スクリプトコードはアマチュア以上のものなので、申し訳ありません。 必要に応じて好みに合わせて改善します(たとえば、各字幕の長さに応じて、拡張の時間を制限したり、より複雑なアルゴリズムを発明したりできます)。



JavaScriptブラウザーのバージョン:



字幕ブラウザ拡張(.srt):一方向

字幕ブラウザ拡張機能(.srt):両側



ローカルPerlバージョン:



カンチレバー字幕拡張(.srt):1つの方法

カンチレバー字幕拡張子(.srt):両側



PS Node.jsの両方向に延長コードを追加しました。 少し追加しても同じように機能します。UTF-8とUTF-16 LEの両方でファイルを読み取ることができます。 純粋なASCIIファイルは、コードを簡単にするためにUTF-8ファイルとして読み取られます(とにかく違いはありません)。 スクリプトは複数の引数を取ることができます。つまり、複数のファイルをバッチで処理します。



カンチレバー字幕エクステンダー(.srt):Node.jsの両方の方法



All Articles