我们有一个 Python 脚本,它旨在将 Youtube XML 时序字幕转换为 srt 格式。为了获得 Youtube 字幕的 XML 代码,可以使用以下 URL:
http://video.google.com/timedtext?hl=en&lang=en&v=VIDEO_ID
其中,VIDEO_ID
是 Youtube 视频的 ID。之后,我们使用了以下 Python 脚本来将 XML 代码转换为 srt 文件:
https://gist.github.com/golive/129171
当我们使用以下命令运行该脚本时:
C:\Python27\python youtube2srt.py
我们遇到了错误:
ImportError: No module named youtube2srt
当我们删除脚本中的前两行并再次运行时,我们遇到了另一个错误:
NameError: name 'str2xml' is not defined
我们还尝试使用另一个 Python 脚本,但遇到了类似的问题:
NameError: name 'BeautifulSoup' is not defined
2、解决方案
- 问题 1:错误的脚本类型
在您提供的第一个示例中,您尝试运行的脚本名为 youtube2srt.py
,但实际上它是 youtube2srt.rb
,这是一个 Ruby 脚本而不是 Python 脚本。因此,您需要确保文件确实是以 .py
为扩展名的 Python 脚本。
- 问题 2:缺少 BeautifulSoup 库
在第二个示例中,错误表明缺少 BeautifulSoup
库。BeautifulSoup
是一个用于解析 HTML 和 XML 的 Python 库,因此我们需要安装它才能运行脚本。我们可以在终端中使用以下命令安装 BeautifulSoup
:
pip install beautifulsoup4
安装完成后,我们就可以再次运行脚本,这次应该能够成功运行。
以下是使用 BeautifulSoup
库的 Python 脚本示例:
from bs4 import BeautifulSoup
import argparse
def convert_to_srt(xml_file):
"""
Converts the given XML file to an SRT file.
Args:
xml_file: The path to the XML file.
"""
soup = BeautifulSoup(open(xml_file, 'r').read(), 'xml')
srt_file = open('output.srt', 'w')
count = 1
for text in soup.findAll('text'):
start_time = text['start']
end_time = text['end']
text_content = text.string.replace('\n', ' ')
srt_file.write(f'{count}\n{start_time} --> {end_time}\n{text_content}\n\n')
count += 1
srt_file.close()
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Convert Youtube XML timed text to SRT.')
parser.add_argument('xml_file', help='The path to the XML file.')
args = parser.parse_args()
convert_to_srt(args.xml_file)
我们还可以使用 xmltodict
库来解析 XML 文件,示例如下:
import xmltodict
import argparse
def convert_to_srt(xml_file):
"""
Converts the given XML file to an SRT file.
Args:
xml_file: The path to the XML file.
"""
with open(xml_file, 'r') as f:
xml_data = xmltodict.parse(f.read())
srt_file = open('output.srt', 'w')
count = 1
for text in xml_data['transcript']['text']:
start_time = text['@start']
end_time = text['@end']
text_content = text['#text'].replace('\n', ' ')
srt_file.write(f'{count}\n{start_time} --> {end_time}\n{text_content}\n\n')
count += 1
srt_file.close()
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Convert Youtube XML timed text to SRT.')
parser.add_argument('xml_file', help='The path to the XML file.')
args = parser.parse_args()
convert_to_srt(args.xml_file)
这两个脚本都可以成功地将 Youtube XML 时序字幕转换为 srt 文件。