0

私は現在、ライブラリ全体を通過し、字幕が含まれているすべての mp4 ファイルを見つけて、ビデオ ファイルと同じ名前の SRT ファイルにストリップする PS スクリプトに取り組んでいます。

コマンドラインレベルですべてを行っていますが、特定のファイルセットに問題があります。MP4 ファイルから SRT ファイルを削除するたびに、余分な行が追加され、ビデオ プレーヤーの字幕が台無しになります。

すべて(MP4Box、FFMpegなど)を試しましたが、余分な行が表示され続けます。

そして、これが皆さんの出番です。特定の行を削除する方法を理解するのを手伝ってくれる必要があります。私が何を意味するかをお見せしましょう:

元のファイル:
[削除] 編集: さらに下を見て、コードを貼り付けました

必要な出力:
[削除] 編集: さらに下を見て、コードを貼り付けました

改行が少ないことに注目してください。

BATスクリプト、powershellなどを使用してそれをどのように達成するかについてのアイデアはありますか?

そして、新しい行が数字で始まらない場合、改行があってはならないという解決策はあり得ません。SRT ファイルのテキスト (実際の字幕テキスト) は数字で始まる場合があるためです。

事前に感謝します-私が得ることができる助けに感謝します. そして、時々文法の間違いをお詫びします。第二言語。

--

編集 スクリーンショットの代わりにテキストを貼り付けるように求められました:

オリジナル

1
00:00:10,505 --> 00:00:14,005
Some texting about the video

2
00:00:14,088 --> 00:00:17,713
Some more text

3
00:00:17,796 --> 00:00:21,463
And here it comes

Because the next line is down here

4
00:00:21,546 --> 00:00:24,255
And then it goes on and on

Everytime there is 2 lines in the same textfield

5
00:00:24,338 --> 00:00:30,338
Can you guys help me?

Thanks in advance

必要な出力

1
00:00:10,505 --> 00:00:14,005
Some texting about the video

2
00:00:14,088 --> 00:00:17,713
Some more text

3
00:00:17,796 --> 00:00:21,463
And here it comes
Because the next line is down here

4
00:00:21,546 --> 00:00:24,255
And then it goes on and on
Everytime there is 2 lines in the same textfield

5
00:00:24,338 --> 00:00:30,338
Can you guys help me?
Thanks in advance

--

2回目の編集

私はこれが無料のスクリプト サービスではないことを知っています。私は以前のプロファイルでここに知識を提供しました。

コードの「関連部分」を表示するように言われました。これを行う方法がわかりません-字幕を抽出する方法をお見せできます。私は次の2つを試しました:

Start-Process "C:\bin\FFMpeg.exe" -ArgumentList "-y -i `"$file`" -map 0:`"$ffmpegsubid`" -an -vn -c:s:0 text -f srt `"$subtitle`"" -Wait
Start-Process "C:\Program Files\GPAC\mp4box.exe" -ArgumentList "-srt `"$subid`" `"$file`" -out `"$subtitle`"" -Wait

$subtitle-value は、SRT で終わる入力ファイル名です。

$subtitle = $file.Substring(0,$file.Length-3) +"srt"

$subid は、MediaInfoCLI のツールを使用して検出されます

$subtest = C:\MediaInfoCLI\MediaInfo.exe --Language=raw --Full --Inform="General;%Text_Language_List%" $file

$ffmpegsubid は、$subid から 1 を引いたものと同じです。これは、MP4Box と FFMpeg ではストリームのカウントが異なるためです。

$ffmpegsubid = ($subid-1)

サブテストは、目的の言語に応じてサブ ID になります。200 行以上の "elseif" で、すべての異なる組み合わせに確実にヒットするようにします。( en / sp / po や en / po /sp など)

しかし、これはどれも質問とは何の関係もありません。出力ファイルから不要な行を削除するにはどうすればよいですか? 次の行が数字で始まらない場合、スクリプトで行を削除するようにしましたが、今は役に立たないので、投稿する理由はありません。

とにかく - 前もって感謝します - 感謝します:)

--

3回目の編集

削除する前に、誰かが次のソリューションを投稿しました。

Get-Content $file | ForEach-Object {
    if (!($previousline)) {
        $previousline
    }
    if ([Helpers]::IsNumeric($_) -and $previousline -eq "") {
        $previousline
    } elseif (!([Helpers]::IsNumeric($_)) -and $previousline -ne "") {
         $previousline
    }
    $previousline = $_
} | Set-Content $output
Get-Content $file | Select-Object -Last 1 | Add-Content $output

ただし、次のエラーが生成されます。

Powershell エラー メッセージ

4

1 に答える 1