■ HOME

字幕タイムライン自動作成ツール

cue2srt.bat ver.1.1.1
label2srt.bat ver.1.1.0
xx_line_cut.bat ver.1.2.0

■ お読みください Crayonzen ■

cue2srt.bat ver.1.1 by crayonzen [2019-05-01]
「mp3DirectCut_v2.25 キューシート.cue」を「字幕ファイル .srt」にコンバート、変換する

label2srt.bat ver.1.1 by crayonzen
「Audacity v2.1 ラベルトラック.txt」を「字幕ファイル .srt」にコンバート、変換する

xx_line_cut.bat ver.1.1 by crayonzen
cue2srt.bat や label2srt.bat で作成した代台詞を一括削除する。
行頭に XX (大文字)の2文字がある行を一括削除。


フリーで配布も許可なくOKですが、いつもながら毎度のことではあるが。。。
これらのプログラムは自己責任で使用して下さい。
配布の時は基本的に必ず現状のままで、かつ、このファイル「作り方readme.txt」を添付してください。
しかしながら、至らぬところもあるかと思うので。。。
不具合などで改変して配布する場合は追加の添付ファイルを用意し、その旨を記載してから配布して下さい。

■ はじめに ■
字幕作成で .srt のタイムの開始時間と終了時間をタイミングよく入力するのは
なかなか骨の折れる作業である。

そこで
「mp3DirectCut」の「無音区間の検出」を使いタイム(音のある頭出し時間)を自動作成する。
だが言語を解してるわけでないので必ずしも一致しない。
取れたり取れなかったりするが、非常に多くのタイムラインを
作成するにあたって、字幕を作成するのに少しでも役立つかもしれない。

■「mp3DirectCut_v2.25」の「無音区間の検出」は
無音部分で音声を分割して保存したり、不要な無音部分をカットする機能であるが、
デシベルの数値を上げれば波形の山を取れるのでは? 台詞とか、効果音とか。。。
という思い付きで取り組んだものである。。。2019-04-19
「cue2srt.bat」を使って字幕ファイルに変換する

追加で
■「Audacity v2.1」にも「無音区間の検出」があり、後で知ったので使ってみたら
非常に使いやすく、制限もなく、良好なので併せて紹介する。
追加の形ではあるが、こちらがおすすめだ。
「label2srt.bat」を使って字幕ファイルに変換する

-------------------------------------------------------------------
□ 動画の編集 □
 色々あるだろうが。。。
 Avidemux 2.7 フレーム位置による無劣化編集が可能でその場合の出力は速い。コマ編集で通常のエンコードも可。
 Aviutl 1.00 定番 avi での編集 mp4もプラグインがあればOK?。
 Shotcut 17.10.02 mp4 を扱える。簡単な編集なら。

 あたりを便利でよく使っている。

-------------------------------------------------------------------

Download

label2srt_cue2srt/label2srt_cue2srt.7z

label2srt_cue2srt/label2srt_cue2srt.zip

7z と zip はどちらも同じ [2019-05-12] (圧縮解凍アプリは https://www.7-zip.org/

■ 作り方の動画はこちら https://youtu.be/FbMAxu6Repw

-------------------------------------------------------------------
■ 作り方 1 ■ mp3DirectCut > ■ cue2srt.bat > ■ .srt

■ X-Winff 動画を音声ファイルにする
 まず動画を X-Winff などのツールを使って .mp3 に変換する。
 変換できるものであれば、なんでもいい。
 mp3DirectCut は mp3
 Audacity は基本 wav であるが mp3 も 動画の mp4 もそのまま読み込んでくれる

■ mp3DirectCut v2.25(※これより前のバージョンだと32分までしか検出しない)
 .mp3 の編集ソフト。
 .mp3 ファイルを読み込む
 メニューから 特殊 - 無音区間の検出
  設定(例)
   レベル -17 dB
   長さ >0.5 sec
   オフセット -10 frames
   チェックなし 全ての無音区間をカット
   無音区間の検出後のスキップ(秒) 1
 
 音声によって違うので音量レベルの数値を調整して波形の谷を越えるように取る。
 中くらい位置なら(例 -17dBなど)それを実行する。
 出来上がったキューを横スクロールしてを確認をしてみる。
 効果音や音楽で高い位置の波形(音量が全体に大きい場合)が取れてない時は
 その場所を選択状態にし、高い位置の波形が取れるように(-11dBなどに設定)して実行する。
 低すぎる場合も同様だ。
 ※選択範囲の頭の方に作成されたキューが入っていると上手く処理してくれないので注意。
  また、キューの数が1000を超えないみたいなので長時間の動画などは分けて保存するしかない。
  結合は SubtitleWorkshop でできるので .srt に変換したらタイムラインはそのままで結合する。
 メニューの「ファイル」から「プロジェクトファイル/キューシートの保存」
 で Cue Sheet(*.cue) を選択してファイル保存する。

 SubtitleWorkshop のツールからファイルの結合で結合する。
 (「結合ファイルの時間を自動的に再計算」にチェックはしない=指定時間のまま)

Subtitle_02_mp3DirectCut


作成したキューシートはこのままでは使えないので。。。
このキューシートから .srt のタイムラインを作成するバッチファイルを作った( cue2srt.bat )。
どちらもテキストと同じなのでメモ帳などで開ける。

■ cue2srt.bat
 mp3DirectCut v2.25 の キューシート を 字幕の .srt ファイルに変換する。
 キューシート.cuet を cue2srt.ba と同じ場所に置く。(またはファイルのドラッグ&ドロップも可)
 ※保存したキューシートのファイル名は空白や特殊記号などは避けてください(一応処理してみたが)
   改名しておくと確実?(「x xx.cue」を「xxx.cue」などに)
   エラーがでても一応処理されるみたい。。。何故だ?
 起動して変換するファイル名(拡張子を含む)を入力する(コピー&ペーストでOK)。
 Enter キーで確認。
 Enter キーで開始。
 同じディレクトリにファイル名 xxx.cue.--time--.srt が出来上がる。

 開始時間は そのままであるが、
 終了時間は 開始時間 +2秒 に設定し、次の頭出しが超える場合はコンマ秒数を ,000 に設定している。
       また、台詞や効果音の長さに準じていないので、
       SubtitleWorkshop 6.0b または v6.0e で調整する必要がある。
 代台詞は XX と XXX を交互に、1~8の通し番号の繰り返しを同時記入している。
 テキスト文が無いと SubtitleWorkshop が読まない理由もあるが、
 同じ XX だけだと変化が分かりにくい。また番号は編集する箇所を見やすくするためだ。
 メモ帳などで開けるので必要なら秒数、代台詞を変更していい。秒数の指定は整数のみだ。
 また開始時間を全体にずらしたい場合などは SubtitleWorkshop にツールがあるので活用されたい。
 あとはとりあえず台詞や効果音などの字幕文字を入れるだけだ。

Subtitle_03_cue2srt

-------------------------------------------------------------------
□ 字幕の編集 □

■ SubtitleWorkshop v6.0b v6.0e
 SubtitleWorkshop などの字幕編集ソフトで .srt ファイルを読み込み編集する。
 表示時間が長いところは音声が取れていない可能性もあるので下記の処理の前にチェックしよう。
 編集-時間関連 で「表示時間制限」などで表示時間を調整する。
 足りないところは足し、余分なところは削除する。
 文字の書き込みができたら「自動表示時間調整(文字数などで表示時間を調整)」で調整してもいい。

 .srtファイルの文字コードはANSI(日本だとShift_JIS)であるが、
 韓国語は UTF-8 の文字コードにしておき v6.0e で編集する。
 Unicode はどちらのバージョンも扱えない。
 また、字幕ファイルの結合ができるので
 足りない所のキューを取り直して字幕ファイルに変換し、結合してもいいかもしれないが、動作の確認ができていない。
 mp3DirectCut で出力したキューシートの読み込みがあるので、そちらで確認した方が確実かもしれない。

 動画の再生には コーデックとスプリッターが必要
 ffdshow_beta6_rev2527_20081219安定版 コーデック
 Win7DSFilterTweaker_v6.3 スプリッター (名前はwin7だがwin10でも動く。32bitを ffdshow に指定)
 を使ってるが、他にも色々あるので自分に合ったものを使えばいいと思う。

Subtitle_12_SubtitleWorkshop

□ 補足
 YouTube の場合 SubRip( .srt)書式なしの UTF-8 形式のファイル。
 (スタイル情報(マークアップ)は認識されない)

-------------------------------------------------------------------
■ 作り方 2 ■ Audacity > ■ label2srt.bat > ■ .srt

■ Audacity v2.1
 無音ではなく逆に波形の山が取れるソフトで Audacity がある。
 メニューの解析で Beat Finder でパーセンテージを指定して解析すると
 非常に細かく位置指定してくれる。カラオケの字幕でのタイムラインで使えそうだ。
 ラベルトラックを label2srt.bat で .srt にコンバートした後、
 SubtitleWorkshop で全体の時間をほんの少し前にずらせばいけそうだ。
 
 また同じく解析で Silence Finder だと無音部分を解析してくれる。
 mp3DirectCut と同じような機能でデシベル(dB)を指定するが非常に正確に取ってくれる。
 保存はラベルの書き出しである。

追記[2019-05-16] Silence Finder 3項目目の単位が間違ってました。。。%ではなく秒です。以下の設定になります。
1 reat audio below this level as silence [- dB]:このレベル以下の音声を無音として扱う[ - dB]:
2 Minimum duration of silence [seconds]: 無音の最小時間[秒]:
3 Label placement [seconds before silence ends]: ラベルの配置[無音が終わる前までの秒数]:

 Silence Finder
 例 1
   -20 dB
    0.5 秒
    0.3 秒

 一度で取り切れないときは  -10dB にしてもう一度取ると大体、、、取れたりする。
 が、音声によって変わるので適当に試してみるしかない。

 Silence Finder
 例 2 (細かく取る)
   -2 dB
    0.3 秒
    0.3 秒

 もしくは、2回目からは部分的に取る。
 重なりがなくなるので正確になるとは思うのだが手間がかかる。
 横スクロールして取れてない波形は選択しデシベル(dB)を変更してラベルを追加する。
 音量が大きい場合など数値を変更して確認しよう。
 (あまり細かく分断しすぎると編集しずらく、頭がわかりにくくなる)

 □ 基本設定 □ 追記[2019-05-11]
 設定がよく分からなければ、とりあえず

 Silence Finder 1回目(小さい音を取る)
   -20 dB
    0.5 秒
    0.3 秒

 Silence Finder 2回目(中くらいの音を取る)
   -10 dB
    0.5 秒
    0.3 秒

 Silence Finder 3回目(大きい音を取る)
   -5 dB
    0.5 秒
    0.3 秒

 の 3つのラベルトラックを取る。
数値は前後しても構わない。
 音量の幅があっても広く取得するようにすると漏れが少ない。
 (※分断されやすいが最初の1回目から 0.3秒 設定で全体を取るのも手だ)

 □ 追加ラベルトラック
 -5 dB でも取れない場合もある
 Silence Finder 4回目~(更に大きい音を取る)
   -1 dB
    0.5 秒
    0.3 秒
 を実行してみる。


  もしくは。。。そこだけ選択して
 Silence Finder 4回目~(更に大きい音で細かく取る)
   -1 dB
    0.3 秒
    0.3 秒
 を実行してみる。
 (0.3秒 は全体から取るとかなり分断されてしまう)

 逆に小さすぎる場合は
 Silence Finder 4回目~(更に小さい音を取る)
   -30 dB
    0.5 秒
    0.3 秒
 を実行してみる。

 取れない場合は設定値を変えてみよう。
 □ 基本設定 おわり □


 ラベルの追加をすると新しいトラックに作られる。
 ラベルを保存すると「ラベルトラック.txt」が作成されるのだが、、、問題が。。。
 中身をみると時間順ではなく、トラック順に書き込まれている。
 ラベルトラックが1つだったら問題ないが
 この順のまま .srt に変換すると SubtitleWorkshop で字幕が上手く表示されない。
 ラベルの時間によるソートが必要だ。

 新規作成し、メニューのファイルから 取り込み-ラベルの取り込み で先ほど出力した
 「ラベルトラック.txt」を読み込むと、1つのトラックにまとめられ時間順になっているので、
 再びこれのラベルの書き出しを行う。
 このファイルを label2srt.bat で変換して .srt の字幕ファイルにする。
 タイムラインがある程度出来上がった字幕ファイルである。。。
 編集は SubtitleWorkshop で行うが、他のソフトでも構わない。

( 画像は2回目の実行後 -10dB )
Subtitle_06_Audacity

■ label2srt.bat
 Audacity v2.1 の ラベルトラック を字幕の .srt ファイルに変換する。
 ラベルトラック.txt を label2srt.bat と同じ場所に置く。(またはファイルのドラッグ&ドロップも可)
 ※保存したラベルトラックのファイル名は空白や特殊記号などは避けてください(一応処理してみたが)
  「x xx.txt」を「xxx.txt」などにすると確実。
 起動して変換するファイル名(拡張子を含む)を入力する(コピー&ペーストでOK)。
 Enter キーで確認。
 Enter キーで開始。
 同じディレクトリにファイル名 xxx.txt.--time--.srt が出来上がる)。

 開始時間は そのままであるが、
 終了時間は 次の開始時間のコンマ秒数を xx:xx:xx,x00 に設定し、1/100秒以下は切り捨てている。
       ※また上記の前に表示時間が非常に短い場合、出力せずにスキップさせている。
 デフォルトは 400ミリ秒(0.4秒)以下は削除の形になる。
       また、台詞や効果音の長さに準じていないので、
       SubtitleWorkshop 6.0b または v6.0e で調整する必要がある。
 代台詞は XX と XXX を交互に、1~8の通し番号の繰り返しを同時記入している。
 テキスト文が無いと SubtitleWorkshop が読まない理由もあるが、
 同じ XX だけだと変化が分かりにくい。また番号は編集する箇所を見やすくするためだ。
 テキスト入力の時に削除するのは面倒であるが仕方ない。
 また開始時間を全体にずらしたい場合や、
 表示時間の調整などは SubtitleWorkshop にツールがあるので活用されたい。
 とりあえず SubtitleWorkshop の編集-時間関連 で「表示時間制限」で、
 最大表示時間と最小表示時間 を実行して調整すると見やすくなる。
 あとは台詞や効果音などの字幕文字のテキスト文を入れるだけだ。

Subtitle_11_label2srt

-------------------------------------------------------------------
■ xx_line_cut.bat
 代台詞の行頭に XX (大文字)の2文字がある行を一括削除する。

 台詞のあるところだけ記入し、必用のない XX のところは無視して作業し
 完成したら一括削除するためのツール。
 台詞は決まってないが、必用なタイムラインを残したい場合は
 行頭の XX を、別文字に置換、行頭に別文字を挿入、X を1つだけする、などの処理しておく。

 タイムは残りますが
 SubtitleWorkshop で読み込んで保存すれば修正されます。

Subtitle_14_xx_line_cut

Subtitle_15_xx_line_cut

空白行の処理ができました。。。

※ちょっと苦労したのでメモ
バッチファイル:ファイルのコピーとは違う、テキストの中を読み込んで空白行も出力する処理。
ファイル xxx.txt を読み込んで xxx.txt_copy.txt に書き出す。

@echo off
setlocal enabledelayedexpansion

for %%f in (%*) do (
set filename=%%~nxf
)
if "%filename%" equ "" (
set /p filename="ファイル名を入力:"
)

set filename=xxx.txt
set newfilename=%filename%_copy.txt
type nul > "%newfilename%"

for /f "tokens=1* delims=:" %%a in ('findstr /n /v XXXXXXXX "!filename!"') do (
echo.%%b>> "!newfilename!"
)

endlocal
pause
exit /b

%%a は行番号
%%b は行本文

改行文字 ^ が検索できない。。。
改行文字 ^^ (^ はエスケープ文字)しても検索できない。。。
あるサイトで ^ はコマンドで \ はバッチファイルでのエスケープ文字との記述があった
だが、 ^ はエスケープ文字として使ってる。ダメもとで
改行文字 \^ (\ はエスケープ文字?)が検索できない。。。
あ、そういえば \ は Linux系で使ってたような。。。?
"^" のように文字として扱ってもダメだ。。。
だいたいエスケープ文字と改行文字が同じ事自体ダメなのでは?

ファイルの本文にありえないような文字 XXXXXXXX を検索してそれ以外を出力する(記号は連ねてもNG)。

もちろん XXXXXXXX があればダメだが、、、たぶん無いだろうw
オプション /n 行番号 /v 検索文字以外とし、行番号が必要なくても入れる(ないと空白行が消える)。
echo 出力は echo. とし、ピリオドが必要。
追加出力は echo.%%b>> 空白なし。
検索ファイルの !! は遅延環境変数用。更に "" はファイル名の空白文字を想定しての処理。
因みに通常、特殊文字に付けるエスケープ文字は ^ である。
特殊文字: & && | || < > >> ( ) などに付ける。