ScreenJSON:计算机可以理解的编剧

ScreenJSON是用于剧本的数据模型和对象符号/交换语法。 本质上,它是“计算机的剧本”

  • 文字处理器可帮助人们编写脚本。
  • PDF帮助人们发布阅读脚本。
  • ScreenJSON帮助计算机系统理解和分析脚本。

不耐烦的例子如下:
https://github.com/azcoppen/screen-json/tree/master/json

为什么需要数据驱动的方法

在1930年代,剧本是由了解华纳印刷格式的合格内部人员用打字机编写的。 在台式机和网络时代,拥有Final Draft Pro副本的任何人都可以制作脚本。 市场泛滥,质量急剧下降。 每个人都在寻找最好的新事物,但是不知所措,需要覆盖和分类。

正如Netflix的成功所表明的那样,在数字时代,电影是一项数据业务。

正如Adobe Story的Pace分析(https://helpx.adobe.com/story/help/pace-beta.html)所示,语言分析对作者可能非常有帮助。

方案A:脚本过多,时间不够

您是一家大型工作室的开发主管。 您每周在帖子中,通过电子邮件和在线(例如黑名单)收到200份脚本提交。 您有10个阅读器,每个阅读器每周处理20个脚本,或者每天处理4个脚本,费用为50美元/脚本。 每个读者可以在早上进行一次报道,在下午进行一次报道。 仅使它们工作,每月就要花费40,000美元,但最后您的办公桌上仍有200条评论。

大多数人都可以PASS 。 其中15%是CONSIDER 。 但是1-2得到RECOMMEND 。 您无法全部产生它们-您需要确定优先级。 您如何才能使全部200台磨机运行起来,以更快地达到RECOMMEND件?

您将永远需要人为因素。 但在此之前,有一些基础知识。

方案B:20个部门进行20个不同的细分

并非每个人都需要了解一切:主要是有钱人,制片人,导演和DoP。 演员只是需要双方的试镜。 装甲兵只需要知道装备枪支的时间即可。 Propmaster和位置管理器需要列表。 背景演员需要他们所在的场景。

因此,每个部门都按各自的脚本分类进行工作。 这只是精神错乱。 手动记录下来需要花费数天,这毫无意义。 导演标记他的拍摄脚本,DoP标记每个场景的镜头列表,依此类推。

方案C:无法看到森林

有时,作者可能需要10年以上的时间才能制作出第一稿,而即使经过400个修订/版本和两倍的加倍标记,脚本也永远不会完成 。 处理120页的文档可能会很费力,而且很容易失去视野。

该软件可以帮助提供即时的“直升机视图”,以进行编辑和调度,此外还可以洞察情节线,薄弱点以及人为的双眼会错过的机会。

方案D:需要标记屏幕和交互技术

底片不再是35mm负片。 数字技术每年都在改变一切。 我们现在需要描述的内容包括:

  • 3D透视图(例如背景/前景焦点等)
  • 360 VR透视图(例如,Oculus)
  • VFX印版和CGI字符
  • 多角度视频流(来自DVD)
  • 感官知觉扩展(例如运动座椅)
  • 通过主题/屏幕元素进行视频点播“兔子洞”导航
  • 动态产品放置(例如此场景中的购买商品)

方案E:确定趋势,模式和过去的成功

计算机可以非常快速地处理大量文本数据:我们不再需要人工花2个小时来编写脚本。 我们可以在工厂中放置500个脚本,回答过去的业务问题,并估计未来的策略/性能。

  • 我们会产生太多废话吗?
  • 血腥程度会变得越来越差,并使听众脱敏吗?
  • 我们制作的最成功脚本的常见元素是什么?
  • 定型字符的百分比是多少?
  • 字符在标题中出现的频率如何,连续性是否完整?
  • 我们没有涵盖哪些主题?
  • 哪些作家的观众反应最强?

您可以做什么分析?

质量保证

  • 拼写检查/评分
  • 语法检查/评分
  • 抄袭检查
  • 格式检查
  • 性别平衡/偏见(贝希德尔)
  • 写作不佳(陈词滥调,头韵等)
  • 亵渎发生
  • 注释评分

可视化

  • 场景卡
  • 弧形结构(关键图/页面标记)
  • 关系图

统计分析(故障)和命名实体识别(NER)

  • 场景(+频率/发生率)
  • 字符(+频率/出现率)
  • 位置(+频率/发生率)
  • 道具(+频率/出现次数)
  • S / VFX(+频率/出现率)
  • 故事板和资产关联
  • 作者投稿频率
  • 版本比较(差异)

再加工

  • 跨应用程序导入/导出
  • 动态编译(每个用户)
  • 组/角色访问管理
  • 段落编辑
  • 文档/场景加密

高级:自然语言处理

  • 故事/场景的节奏,活力和兴奋
  • 独创性
  • 对话技巧
  • 描述性
  • 作者风格分析
  • 高效生产的最短途径
  • 形态分割
  • 自动翻译
  • 替代结果方案

目的

ScreenJSON可以解决特定于计算机的问题,并提供当前创作平台不具备的功能。 演示文稿中嵌入的数据从标记抽象为对象属性属性和变量类型

  • 文字处理器可帮助人们编写脚本。
  • PDF帮助人们发布阅读脚本。
  • ScreenJSON帮助计算机系统理解和分析脚本。

虽然正常过程可能如下所示:

 Human author --> Authoring Program --> PDF file --> Hard Copy --> Human 

可以以任何方式使用ScreenJSON文档,例如

 Authoring Program --> 

--> JSON File (disk, HTTP)
--> PDF hard copy
--> NoSQL Database
--> Production ERP/MRP
--> Programming lang
--> Translation assets
--> Archive (+ stats)
--> Secured iPad app
--> Breakdown docs (Excel/CSV)
--> Web platform(s)
--> NLP Analysis/Predictive Bot

该格式与数据的表示无关,将其留给主机应用程序。 实施应用程序可以自由操作,显示和特定于UI。

定义标准的目的是提供:

  • 用于剧本的通用且数据库友好的数据模型和对象模型;
  • 平台和程序之间的通用数据交换格式;
  • 支持多语言创作;
  • 生产前活动的方法标签(例如,细目分类);
  • 支持加密和元素级访问控制策略;
  • 支持Git风格的版本控制和许可数据;
  • 易于访问的结构化批处理语言分析;
  • 支持生产/发行技术(例如3D等)。

类结构

剧本文档倾向于集中于内容的视觉呈现以进行打印,并且通常使用样式段落在创作程序中表示。 例如,“最终草稿”使用 XML元素,而“打开屏幕播放格式”使用标签。

当查看相同内容的数据表示时,该模式是简化的文档模型,符合可预测的继承模式。

 ├── Document 
│ ├── Bookmark
│ ├── Scene
│ ├── Element
│ ├── General
│ ├── Action
│ ├── Character
│ ├── Parenthetical
│ ├── Dialogue
│ ├── Transition
│ ├── Shot

Document对象由headerfootercover和其他元数据属性组成,但还包含批注书签scenes数组。

场景对象具有诸如其标题和上下文之类的属性,但还包含一系列Elements ,例如动作描述,对话(单个或双重,音频源等)或过渡(剪切至)。

资料格式

  • 每个对象都有一个符合RFC4122 UUID规范(https://www.ietf.org/rfc/rfc4122.txt)的标识符。
  • 日期以ISO 8601结构(https://en.wikipedia.org/wiki/ISO_8601)中的时区偏移量表示。
  • 文档许可可以是标准SPDX列表(https://spdx.org/licenses/)中的任何项目。

示例文档对象

容器Document对象描述了Document的内容,但是使演示文稿可以由中间程序解释。

  { 
“ id”:“ 37bd3b1b-160a-4a65-bbf2-7c92d400fbc1”,
“ uuid”:“ rfc4122”,
“ title”:“肖申克的赎回”,
“ lang”:“ EN”,
“ locale”:“ en-US”,
“ charset”:“ utf8”,
“ dir”:“ ltr”,
“修订”:[
{
“索引”:0,
“ version”:“草稿”,
“ date”:“ 2004-02-12T15:19:21 + 00:00”
},
{
“索引”:1,
“ version”:“ blue”,
“ date”:“ 2004-06-25T15:19:21 + 00:00”
},
{
“索引”:2
“ version”:“粉红色”,
“ date”:“ 2005-01-10T15:19:21 + 00:00”
}
],
“作者”:[
{
“ id”:“ 01979fca-6ac3-479e-9f33-d89498836eb1”,
“ first”:“ Frank”,
“ last”:“ Darabont”
}
],
“颜色”:[
{
“ title”:“ blue”,
“ rgb”:[0,0,255],
“ hex”:“#0000FF”
},
{
“ title”:“ pink”,
“ rgb”:[255,192,203],
“ hex”:“#FFC0CB”
},
{
“ title”:“紫色”,
“ rgb”:[128,0,128],
“ hex”:“#800080”
}
],
“贡献者”:[
{
“ id”:“ 8e0cd67f-f9da-46b8-98b9-16169893b439”,
“ first”:“ John”,
“ last”:“ Doe”,
“角色”:[“医生”,“编辑”]
}
],
“执照” : {
“标识符”:“ CC-BY-NC-ND-4.0”,
“ ref”:“ https://spdx.org/licenses/”
},
“注册”:[
{
“ authority”:“ WGA”,
“ identifier”:“ 4847494058”,
“ created”:“ 2004-02-12T15:19:21 + 00:00”,
“修改”:“ 2004-02-12T15:19:21 + 00:00”
}
],
“派生”:{
“ id”:“ 3608b093-1280-4834-9ea4-d9d2b8d711a6”,
“ type”:“ novella”,
“ title”:“ Rita Hayworth和Shawshank的救赎”,
“元”:{
“ isbn”:“ 978-0896214408”,
“评论”:“基于斯蒂芬·金的故事丽塔·海沃斯和肖申克的救赎”
}
},
“加密”:{
“ cipher”:“ aes-256-ctr”,
“ encoding”:“十六进制”
},
“可标记”:[
“演员”,“演员”,“特技”,“车辆”,“道具”,“ SFX”,“服装”,“化妆”,“动物”,“动物处理者”,“音乐”,“声音”, “装扮”,“绿化”,“特殊设备”,“安全”,“附加劳动”,“ VFX”,“ MFX”,“杂项”
],
“文件”:{
“书签” : [
{
“场景”:4
“ type”:“动作”,
“元素”:2
“标题”:{
“ en”:“开始”
},
“说明”:{
“ en”:“”
}
}
],
“封面”:{
“ lang”:“ EN”,
“ title”:“ SHAWSHANK赎回”,
“ author”:“ Frank Darabont”,
“ original”:“基于故事,Stephen King的Rita Hayworth和Shawshank的救赎”
},
“标题”:{
“ lang”:“ EN”,
“ cover”:是的,
“ display”:是的,
“开始”:1,
“省略”:[],
“ content”:“ Frank Darabont的《肖申克》的赎回”
},
“页脚”:{
“ lang”:“ EN”,
“ cover”:是的,
“ display”:是的,
“开始”:1,
“省略”:[],
“ content”:“(c)__DATE__版权所有Castle Rock Entertainment。__PAGE__”
},
“元”:{
“ created”:“ 2004-02-12T15:19:21 + 00:00”,
“修改”:“ 2004-02-12T15:19:21 + 00:00”
},
“样式”:[
{
“ id”:“默认”,
“ content”:“ font-family:courier; font-size:12px;”
}
],
“模板”:[
“默认”
],
“场景”:[

]
}
}

除了提供容器之外, Document对象的目的是定义以下信息:

  • 身份证明
  • 本土化
  • 起源/派生
  • 著作权
  • 发牌
  • 版本控制
  • 造型
  • 元数据
  • 书签
  • 覆盖
  • 标头
  • 页脚

示例场景对象

定义了父Document对象的描述性元素后,脚本的实际内容将包含在可重新排序的Scene对象的数组中,这些对象主要由其数组索引编号(必要时被numbering属性覆盖)。

Scene对象的目的是定义以下信息:

  • 设置和上下文
  • 定购
  • 元数据
  • 生产前需求数据

场景容器

  { 
“标题”:{
“编号”:1
“ context”:“ INT”,
“ setting”:“ CABIN”,
“ sequence”:“ NIGHT”,
“ description”:“出现在Card View中的注释在这里。”,
“元”:{
“ example”:“此处的自定义属性数据”
}
},
“身体”: [

],
“ cast”:[“ MAN”,“ WOMAN”],
“ locations”:[“ CABIN”,“ ROOM”],
“ props”:[“ DOOR”,“ LAMP”,“ WINDOW”,“ BED”],
“ wardrobe”:[“ BLOUSE”,“ FABRIC”],
“标签”:[“ CABIN”,“ SEX”,“ INTRO”,“ ACT-I”],
“心情”:[“暗”,“空”,“醉”,“ HOR”,“急躁”,“发闷”,“粗暴”]
}

Scene对象由HeadingBody属性组成,例如提示卡(或Bootstrap面板)。 每个都需要一个上下文 (INT / EXT / POV等),一个设置 (即位置)和一个序列 (DAY / NIGHT / CONTINUOUS)。 description属性允许主机应用程序显示协作者注释的“卡片”视图。

对场景的定义至关重要的是生产故障的属性: 心情关键字演员和其他对多个部门有用的预生产标签 ,例如wardobe和props。 突出显示和/或注释的大写元素可以手动或自动列出以方便检索。

场景内容

Scene的Body属性是Element对象的数组 ,根据其type属性(动作,对话等)不同。 每个元素都可以服从主机应用程序设置的自定义访问控制策略。

  { 
“ type”:“动作”,
“ perspective”:“ 2D”,
“交互性”:false,
“ lang”:“ EN”,
“ charset”:“ utf8”,
“ dir”:“ ltr”,
“略过”:false,
“锁定”:错误,
“已加密”:false,
“ element”:“ p”,
“ class”:“ col-md-12”,
“访问”:[“ ABL”,“广播”,“电影摄影”,“位置”,“衣柜”,“ vfx”,“ sfx”],
“修订”:{
“版本”:1.0,
“修改”:“ 2004-02-12T15:19:21 + 00:00”
},
“样式”:[
“默认”
],
“内容”:{
“ en”:“一个黑暗的空房间。”
},
“元”:{
“注释”:[
{
“突出显示”:{
“开始”:3,
“结尾”:6
},
“贡献者”:“ 8e0cd67f-f9da-46b8-98b9-16169893b439”,
“ content”:“一定要是黑暗的吗?”
}
]
}
}

任何元素都可以调用多个样式集,并适应语言等效项,以及修订注释 (由字符串中的开始和结束字符索引定义)。

访问策略是主机应用程序已知的策略标识符的列表,它负责管理和实现它们。

Element对象的type为:

  • 行动
  • 字符
  • 对话
  • 一般
  • 圆括号
  • 射击
  • 过渡

注意:对偶对话是对dual: true属性dual: trueDialogue元素为dual: true ,并且音频方向数据(例如VO,OS)也实现为类属性。

注意: interactivity属性保留用于将来的版本。

Element对象的目的是定义以下信息:

  • 技术实施数据(CGI,3D等)
  • 访问和UI显示策略
  • 多语言内容对等
  • 修订跟踪和注释

脚本内容加密

加密可以应用于任何JSON值-特定元素场景整个文档 。 每个用户可以具有自己的特定私钥或密码。 GUI显示应自动检测到一个加密的段落元素,并尝试使用已为该用户存储的密码对其进行解码。

这种方法的优点在于,不需要使用后端服务器进行任何数据或握手。 对元素进行加密的作者可以在其客户端程序中设置密码,然后将其亲自提供给协作者,而无需通过有线发送。 作者可以选择隐藏任意数量的文本元素,以为不同的读者提供不同的选择视图。

使用Node的示例客户端AES加密

在此示例中,我们位于像Electron或Ionic这样的Node客户端中。 阅读器GUI可以通过提供指定的密码来加密或解密文本。

我们想对所有人以外的人隐藏对话线,除了“上线”,导演,国防部和将要说的演员之外。 每个人都可以获取该脚本的副本,但是未包含在访问策略中或没有特定密码的用户将看到一个已redacted块。

  var crypto = require('crypto'),algorithm ='aes-256-ctr',password ='password_for_specific_individual'; 

函数crypto(text){
var cipher = crypto.createCipher(算法,密码)
var crypted = cipher.update(text,'utf8','hex')
加密+ = cipher.final('hex');
返回加密的;
}

函数解密(文本){
var decipher = crypto.createDecipher(算法,密码)
var dec = decipher.update(text,'hex','utf8')
dec + = decipher.final('utf8');
返回dec;
}

var对话_元素=加密(“我要给他一个他不能拒绝的提议。”)
console.log(decrypt(dialogue_element));

加密输出(使用Base64而不是Hex时):

 U2FsdGVkX19voPV6ClqPfhSFJFMEALJeZSmAVl/dukvbxtfFOondqaZLVdRg0/HxBV8g8B9iZYzYY2Aa/cH7Kw== 

对话数据元素将表示为:

  { 
“ lang”:“ EN”,
“略过”:false,
“锁定”:是,
“访问”:[“ ABL”,“导演”,“电影摄影”,“演员-可可酮”],
“ type”:“对话”,
“修订”:{
“版本”:1,
“修改”:“ 2017-03-04T00:34:32 + 00:00”
},
“ element”:“ p”,
“ class”:“ col-md-12”,
“ content”:“ U2FsdGVkX19voPV6ClqPfhSFJFMEALJeZSmAVl / dukvbxtfFOondqaZLVdRg0 / HxBV8g8B9iZYzYY2Aa / cH7Kw ==”,
“注释”:[
{
“ author”:“ John Doe”,
“ data”:“我看不懂。有人可以给我发送密码吗?”
}
],
“元”:{
“ cipher”:“ aes-256-ctr”,
“ auth”:“导演”
}
}

查询ScreenJSON剧本文档

一旦存储在后端NoSQL数据库(如MongoDB,CouchDB,Neo4j甚至HTML5 localStorage)中,我们突然就有了一种搜索电影的方法。

自然语言处理(NLP)

定义:

自然语言处理(NLP)是计算机科学,人工智能和计算语言学的一个领域,涉及计算机与人类(自然)语言之间的交互,尤其涉及对计算机进行编程以有效处理大型自然语言语料库。 自然语言处理中的挑战经常涉及自然语言理解,自然语言生成(通常来自形式化的机器可读逻辑形式),连接语言和机器感知,管理人机对话系统或它们的某种组合。

句法

  • https://zh.wikipedia.org/wiki/合法化
  • https://zh.wikipedia.org/wiki/形态学(语言学)
  • https://zh.wikipedia.org/wiki/语音提示标记
  • https://zh.wikipedia.org/wiki/解析
  • https://en.wikipedia.org/wiki/Sentence_boundary_disambiguation
  • https://zh.wikipedia.org/wiki/斯坦明
  • https://zh.wikipedia.org/wiki/Text_segmentation#Word_segmentation

语义学

  • https://zh.wikipedia.org/wiki/Lexical_semantics
  • https://zh.wikipedia.org/wiki/机器翻译
  • https://zh.wikipedia.org/wiki/命名实体识别
  • https://zh.wikipedia.org/wiki/自然语言生成
  • https://en.wikipedia.org/wiki/Natural_language_understanding
  • https://en.wikipedia.org/wiki/Optical_character_recognition
  • https://zh.wikipedia.org/wiki/Question_answering
  • https://en.wikipedia.org/wiki/Textual_entailment
  • https://zh.wikipedia.org/wiki/Relationship_extraction
  • https://zh.wikipedia.org/wiki/情感分析
  • https://en.wikipedia.org/wiki/Topic_segmentation
  • https://zh.wikipedia.org/wiki/Word_sense_disambiguation

话语

  • https://zh.wikipedia.org/wiki/自动摘要
  • https://zh.wikipedia.org/wiki/共同引用
  • https://zh.wikipedia.org/wiki/Discourse_analysis

剧本处理研究论文

  • “使用基于NLP的功能通过MEMM按类型对电影脚本进行分类” (Alex Blackstock,Matt Spitz)
  • “ SceneMaker:剧本的自动可视化” (Eva Hanser,Paul Mc Kevitt,Tom Lunney,Joan Condell)
  • “电影对话中的说话者识别” (A. Kundu,D。D.和S. Bandyopadhyay)
  • “从剧本中预测票房:一种经验模型” (史达琳·大卫·亨特,苏珊·史密斯,萨巴·辛格)
  • “利用电影脚本的结构和约定进行信息检索和文本挖掘” (贾拉,美国)
  • “电影对话中的场景边界检测:一种遗传算法方法” (Amitava Kundu,Dipankar Das,Sivaji Bandyopadhyay)
  • “使用自然语言处理技术和机器学习对电影的票房成功进行早期预测” (Sean O’Driscoll)
  • “从故事情节到票房:绿灯电影剧本的新方法” (Eliashberg,Hui和Zhang)
  • “用于学习和表征角色风格的带注释的电影对话语料库” (马萨诸塞州沃尔克,林)
  • “电影对话中的性别区分特征” (Alexandra Schofield,Leo Mehr,CLFL 2016)
  • “使用电影脚本评估票房性能:一种基于内核的方法” (Jehoshua Eliashberg,Sam K. Hui,Z。John Zhang)
  • “使用动态人工神经网络对电影收入进行生产前预测” (M. Ghiassi,David Lio,Brian Moon)
  • “解析电影剧本以从电影中提取社交网络” (Agarwal,A.,Balasubramanian,S.,Zheng,J。和Dash,S)

Github上提供了Attribution-ShareAlike(CC BY-SA)创用CC许可下的ScreenJSON,任何人均可自由使用。

https://github.com/azcoppen/screen-json