删除SRT文件中的特定行



im当前正在处理PS-script,它将通过我的整个Libary,找到包含字幕的所有MP4文件,然后将它们剥离到具有与视频文件相同名称的SRT文件。

我正在以命令行级别进行整个操作,但是我对一组特定的文件有问题。每当我从MP4文件中剥离SRT文件时,它会添加额外的行,这会弄乱视频播放器中的字幕。

我已经尝试了所有内容(mp4box,ffmpeg等(,但是我不断获得额外的行。

这就是你们来的地方:我需要您帮助我弄清楚如何删除特定行。让我向你展示我的意思:

原始文件:
[删除]编辑:进一步查看下面,我粘贴了代码

需要输出:
[删除]编辑:进一步查看下面,我粘贴了代码

注意较少的线路断裂?

关于我如何使用BAT脚本,PowerShell或类似的东西来完成该方法的任何想法?

,解决方案不能是,如果新行不以数字开头,则不应有换行。因为srt文件中的文本(实际字幕 - 文本(可能以一个数字开头。

事先感谢 - 感谢我能得到的任何帮助。抱歉,时不时地犯了一些gramma错误。第二语言。

-

编辑我被要求粘贴文本,而不是屏幕截图:

原始

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

-

第二编辑

我确实知道这不是免费的脚本服务,我在这里提供了以前的个人资料的知识 - 但是,请随时不要帮助我。

我被告知要显示代码的"相关部分"。我不确定该怎么做 - 我可以向您展示如何提取字幕。我尝试了以下两个:

Start-Process "C:binFFMpeg.exe" -ArgumentList "-y -i `"$file`" -map 0:`"$ffmpegsubid`" -an -vn -c:s:0 text -f srt `"$subtitle`"" -Wait
Start-Process "C:Program FilesGPACmp4box.exe" -ArgumentList "-srt `"$subid`" `"$file`" -out `"$subtitle`"" -Wait

$ subtitle-value只是inputfile名称,带有srt end

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

使用MediaFocli的工具找到$ subid

$subtest = C:MediaInfoCLIMediaInfo.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(

,但这与问题无关。如何从输出文件中删除不需要的线?我做了一个脚本删除行,如果下一条线没有从一个数字开始,但这对我没有帮助,所以没有理由将其发布。

无论如何 - 预先感谢 - 感谢它:(

-

3rd Edit

有人在删除以下解决方案之前发布了以下解决方案:

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错误消息

您可以尝试以下方法:

$path = "" #Path File
$File = Get-Content $Path
$newFile = "$ENV:USERPROFILEDesktopnewfile.srt" # new file
$i = 0
New-Item -Path $newFile -ItemType File | out-null
Foreach ($Line in $File) {
    $PreviousLine = $File[$i - 1]
    $NextLine = $File[$i + 1]
    $timeLine = $File[$i + 2]
    $regex = "^[0-9]+$"
    $regexTime = "^[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2},[0-9]{1,3} --> [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2},[0-9]{1,3}$"
    if ($Line -ne "" -or  ($PreviousLine -ne "" -and $NextLine -match  $regex -and $timeLine -match $regexTime )) {
        Add-Content -Path $newFile -Value $Line
       }
    $i ++
}

此脚本将创建一个新的文件,该文件具有满足此条件的行: 1.它不是空字符串。 2.如果是空字符串,则上一行不是空字符串,下一行是数字。

您必须在变量$路径中添加文件路径并修改变量$ newfile。

相关内容

  • 没有找到相关文章

最新更新