如何仅从视频文件中获取第一个隐藏式字幕?

Posted

技术标签:

【中文标题】如何仅从视频文件中获取第一个隐藏式字幕?【英文标题】:How do I get only the first closed caption from a video file? 【发布时间】:2013-11-20 21:29:05 【问题描述】:

我需要在我的硬盘上找到一些视频文件的开始日期。修改日期或文件名等对我没有帮助 - 真正的开始时间在隐藏式字幕中。

使用CCExtractor 和一些Python Popen...

import subprocess
process = subprocess.Popen(['ccextractorwin.exe', 'mycaptions.srt', '-quiet',
        'myvideo.mpg'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
out, err = process.communicate()

这会生成一个隐藏式字幕 .srt 文件,我想要的肯定在那里:

1
00:00:00,000 --> 00:00:06,772
4756.9585N, 12905.8976W, 1885   
2013-06-20 16:50:29, Hdg: 54                

2
00:00:06,774 --> 00:00:07,373
2013-06-20 16:50:29, Hdg: 54               
4756.9585N, 12905.8976W, 1883   

...

但问题是这些视频文件有数百 GB,而 CCExtractor 会生成整个字幕文件。我需要的只是开始时间,它在第一个条目中。

CCExtractor 上是否有一个晦涩的未记录选项,或者可能是另一个(免费)工具,可以让我获得第一个条目?

我能想到的唯一选择是启动 CCExtractor,生成一个线程来读取正在生成的字幕文件,然后终止 CCExtractor 进程和读取线程。还不错,但我想先看看有没有更好的方法。

【问题讨论】:

【参考方案1】:

不要使用process.communicate(),它会阻塞直到从应用程序中读取所有数据,而是将结果作为流逐行读取。然后,您可以在阅读尽可能多的内容后终止底层进程。您还需要使用标志-stdout 将输出从ccextractorwin.exe 重定向到STDOUT。

import subprocess
process = subprocess.Popen(
    ['ccextractorwin.exe', '-stdout', '-quiet', 'myvideo.mpg'],
    stdout=subprocess.PIPE, stderr=subprocess.STDOUT
)
all_output = []
while True:
    out_line = process.stdout.readline()
    all_output.append(out_line)  # Add this line to the list of lines to keep
    if out_line == u'\n':  # We've hit an empty line, or whatever else you deem like a good stopping point
        break  # the while loop

# Now, kill the process dead in its tracks.
# This probably isn't great for open file handles, but whatever
process.kill()

这会将SIGKILL 发送到应用程序,这可能(当然)在 Windows 上的工作方式与在 Linux 或 OSX 上的工作方式不同。如果有问题,请在此处查看杀死它的替代解决方案:In Python 2.5, how do I kill a subprocess?

希望对您有所帮助。

【讨论】:

谢谢,cc 提取器的“-stdout”标志和非阻塞读取成功了!

以上是关于如何仅从视频文件中获取第一个隐藏式字幕?的主要内容,如果未能解决你的问题,请参考以下文章

如何把字幕和视频合成到一个文件?

iOS 应用可以访问设备视频库中视频的字幕或隐藏式字幕吗?

如何将一个H264视频,AAC音频,一个中文字幕,一个英文字幕,合成一个高清MP4中英双字幕的视频文件?

在 HTML5 视频中切换隐藏式字幕并禁用默认视频控件

使用全局按钮关闭多个视频的隐藏式字幕

怎么把字幕放到电影里 把字幕嵌入视频