我正在使用 https://github.com/tokland/youtube-upload 上传视频,但是,我无法在视频描述中换行。有什么办法可以做到吗?
例如,我在以下方面取得了成功:
C:Python35youtube-upload-masterbin>youtube-upload --title="Title"
--description="This is one line" --category=Music "video.mp4"
我尝试在描述中间添加转义序列\n
、n
、rn
,但它们是在没有转义的情况下添加的(例如 This is \n one line
)。也尝试过<br />
但不允许使用 HTML 标记。
[RequestError] Server response: {
"error": {
"errors": [
{
"domain": "youtube.video",
"reason": "invalidDescription",
"message": "The request metadata specifies an invalid video description.",
"locationType": "other",
"location": "body.snippet.description"
}
],
"code": 400,
"message": "The request metadata specifies an invalid video description."
}
}
我通过修改源文件(https://github.com/tokland/youtube-upload/blob/master/youtube_upload/main.py)克服了这个问题。特别的地方是103-106行:
if hasattr(u('string'), 'decode'):
description = u(options.description or "").decode("string-escape")
else:
description = options.description
看起来解码删除了转义字符,因此没有创建新行。
我已将这些替换为:
description = description.replace('#n', 'rn')
我将使用这个特殊字符(#n
)序列来类似于新行的开头。在进行预处理时,我需要将此序列包含在描述文本中。
\n
是正确的并且正在工作,不需要任何特殊的技巧
这花了我很长时间才弄清楚,所以我想我会在这里帮助一些人。 我几乎是肯定的,这适用于某些人而不适用于其他人的原因与您实际将数据传递到 Python 脚本的方式有关。
大多数找到upload_video.py文件的人都是从命令行执行此操作的。 不幸的是,当描述数据传递到 Python 中时,它会将 更改为文字斜杠和"n"而不是换行符。
响应者在上面所做的是将 Bash 输入中的换行符更改为 #n。 我继续使用。 它可以更改为您希望的任何内容,前提是您与 Python 脚本中的修改一致。
如果您编辑第 94 行周围的upload_video.py和周围,请添加以下内容:
formattedDescription = options.description.replace( '\n', 'n' )
向下几行,您还需要编辑此部分:
title=options.title,
description=options.description,
tags=tags,
categoryId=options.category
所以它读到:
title=options.title,
description=formattedDescription,
tags=tags,
categoryId=options.category
我创建了一个单独的变量的原因是我可以将其转储到屏幕上并确保正确显示换行符。
无论如何,这是一个非常简单的修改;我彻底测试了它,它完美地通过了YouTube API。 即使您想尝试自己的方法,只需将描述变量转储出来,您很快就会明白为什么 在其他方面不起作用。 YouTube 确实接受描述中的 ;您的脚本只是没有传递它。