【问题标题】:Removing specific lines in SRT file删除 SRT 文件中的特定行
【发布时间】:2017-04-22 14:13:48
【问题描述】:

我目前正在编写一个 PS 脚本,它将遍历我的整个库,找到所有包含字幕的 mp4 文件,并将它们剥离为与视频文件同名的 SRT 文件。

我在命令行级别上做所有事情,但我遇到了一组特定文件的问题。每当我从 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

--

第二次编辑

我知道这不是免费的脚本服务,而且我已经在以前的个人资料中提供过相关知识 - 但好吧,请不要帮助我。

我被告知显示代码的“相关部分”。我不知道该怎么做——我可以告诉你我是如何提取字幕的。我尝试了以下两种:

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)

subtest 变成 subid,这取决于你的目标是什么语言。它有超过 200 行的“elseif”,以确保我击中了所有不同的组合。 (如 en / sp / po 和 en / po /sp )

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

无论如何 - 在此先感谢 - 非常感谢 :)

--

第三次编辑

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

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 Error Message

【问题讨论】:

  • 请将实际示例内容发布为文本,而不是记事本的屏幕截图
  • 如您所愿,先生 :)
  • Stack Overflow 是一个程序员网站,您应该展示您的代码努力以在遇到困难时获得帮助 - 这不是免费的脚本服务。
  • 向我们展示您的 PS 代码的相关部分。
  • 问题中的“解决方案”似乎没有在 $file 变量中设置任何值。这就是错误消息报告的内容。我知道这一点,因为阅读错误信息有时是我的超能力。有时这不是我的超能力。

标签: file powershell subtitle renaming mp4box


【解决方案1】:

你可以试试这个:

$path = "" #Path File

$File = Get-Content $Path

$newFile = "$ENV:USERPROFILE\Desktop\newfile.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.如果是空字符串,则上一行不是空字符串,下一行是数字。

必须在变量$Path中添加文件的路径,修改变量$newFile。

【讨论】:

  • 这很好,但是如果 2 个“文本”行是: 1) 这要花多少钱? 2) 8 美元,女士。然后该行不会从文件中删除,只有第一行在视频播放器中可见:-/
  • 是的,确实如此,如果文本行只是一个数字,则不会删除空行。所以我添加了一个变量“$timeLine”和“$regexTime”,通过这个修改,脚本只会添加分隔每个文本块的空字符串行。
  • 抱歉,回复晚了。做了一个小的 beta 测试 - 似乎有效。我会将它实现到我的代码中,如果它有效,我将标记为答案并删除一个链接,所以如果其他人可以使用它 - 发疯再次感谢:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 2011-06-11
相关资源
最近更新 更多