azcoppen/screenplay-parser

从Final Draft、Adobe Story、Celtx和Fountain剧本文件生成自动分镜。

dev-master 2017-12-07 14:25 UTC

This package is not auto-updated.

Last update: 2024-09-25 00:31:34 UTC


README

重要:请查看ScreenJSON

此包是一个快速破解,用于获取Final Draft (XML)、Celtx (RDF)、Adobe Story (XML)、Fountain (Markdown) 和 FadeIn (XML) 文件内的数据。长期未来不能通过 spaghetti-coding 来处理几十种无用的专有文件格式。ScreenJSON是一个努力消除此类写作包/模块的尝试,以实现一个通用的交换格式,该格式可以被导入任何编程语言或平台,也可以用于信息挖掘。与其浪费时间处理这些格式,不如来工作一个更好的格式!

概述

一旦编剧完成了剧本,并获得了财务上的绿灯用于生产,它就会被分发到超过20个不同的电影部门进行标记。导演重新编写,制片人注释,而服装、地点、效果、选角和其他人,需要制作一个分镜

这意味着手动编制一个场景、角色、地点和道具的清单,这些是需要的东西 - 这需要几天时间,而且效率低下、过时,因为任何计算机都可以在几秒钟内解析信息。

这个库只做一件事,而且非常简单:解析不同类型的剧本文件,以编制场景、角色和道具的初始清单。这些清单可以很容易地复制粘贴到分镜中,以节省时间和精力。

安装

使用composer将包添加到项目的vendor文件夹中。

composer require azcoppen/screenplay-parser

或者将其添加到composer.json的require部分

    "require": {
      "azcoppen/screenplay-parser": "*",
    }

使用方法

所有文件都输入到\Screenplay命名空间。

解析FDX文件以获取角色、场景和大写动作元素
use Screenplay\Extractor;

  try {

    $extractor = new Extractor( 'test.fdx' ); // format auto-detected from file ext

    $scenes 	= $extractor->analyzer()->parse_scenes();
    $chars 		= $extractor->analyzer()->parse_characters();
    $elements   = $extractor->analyzer()->parse_capitalized();

    print_r(json_encode($scenes, JSON_PRETTY_PRINT));
    print_r(json_encode($chars, JSON_PRETTY_PRINT));
    print_r(json_encode($elements, JSON_PRETTY_PRINT));

  } catch (\Exception $e) {
    var_dump( $e->getMessage() );
  }

支持的格式

Final Draft Pro 8/9/10 (XML)

Final Draft是行业标准软件,用于剧本写作 - 几乎没有可识别的理由。版本7产生了带有<.fdr>扩展名的专有二进制文件。版本8引入了更有帮助的(尽管体积庞大)<.fdx>文件,结构为XML。

通过使用simplexml_load_fileDomDocument进行简单的遍历。

    <Paragraph Type="Action">
      <Text>Wheat fields. Etched in darkness and moonlight. For the moment it’s calm.</Text>
    </Paragraph>
    <Paragraph Type="Action">
      <Text AdornmentStyle="0" Background="#FFFFFFFFFFFF" Color="#000000000000" Font="Courier Final Draft" RevisionID="0" Size="12" Style="Bold">TITLE: Nebraska, 1875.</Text>
    </Paragraph>
    <Paragraph Type="Action">
      <Text>A WOMAN CRIES OUT, drawing our attention to a scant farm house in the distance.</Text>
    </Paragraph>

更多

Adobe Story (XML)

Adobe的Web和桌面剧本写作软件,Storyhttps://story.adobe.com/),作为Creative Cloud平台的一部分,是市场上最新进入者,也是最容易的。作为更大规模生产管理系统的组成部分,所有文件都旨在与数字资产管理(DAM)和电影生产分镜/调度文档进行互操作。本机Adobe Story格式(ASTX)仍然是简单的XML,使用simplexml_load_fileDomDocument可以轻松遍历。

注意:Story现在似乎已迁移到使用 proprietary格式的.stdoc文件。

更多

Celtx (RDF)

Celtx是第一个成为Final Draft真正竞争对手的开源剧本写作平台,也为独立电影制作人提供完整的制作平台。一个<.celtx>文件就像一个.jar、.war或.docx的zip存档。存档的结构如下

.
├── local.rdf
├── project.rdf
├── scratch-YpE.html
├── script-YpE.html

使用DomDocument可以简单地解析资源描述框架(RSS/RDF)文件。

<p id="oHGP7x10" class="sceneheading">Ext. WOODS - NOON.<br></p>
<p class="action">ALEX, <span ref="http://celtx.com/res/ywj489TD9hGB"
 class="cast">JOSH</span>, GIRL 1, and GIRL 2, <span
 ref="http://celtx.com/res/I6Dr5rQJX4p4" class="cast"></span>are walking on a
trail to their campsite (which evidently is very far away). <br>
</p>
<p class="character">GIRL 2<br></p>
<p class="dialog">Are we almost there?<br></p>
<p class="character">GIRL 1<br></p>
<p class="dialog">Yea we've been walking forever.</p>

更多

开放剧本格式(XML)

可能最新进入格式市场的就是由Fade In Pro(http://www.fadeinpro.com/)使用的XML格式OSF。开放剧本格式是一个在SourceForge上的小型开源项目,似乎没有特别详细的文档,但结构很优雅。

注意:FadeIn Pro在格式转换方面非常有用。

再次强调,使用simplexml_load_string很容易解析OSF。

    <para synopsis="Calm fields of wheat. Farmland. The heart of America.&#xA;In darkness.&#xA;&#xA;Set location and time." synopsis_color="#40A0FF" note="Near Plattsmouth Nebraska.&#xA;&#xA;Rivers nearby: Platte joins Missouri River">
      <style basestylename="Scene Heading"/>
      <text>EXT. Mast farm - nIGHT</text>
    </para>
    <para>
      <style basestylename="Action"/>
      <text>Wheat fields. Etched in darkness and moonlight. For the moment it’s calm.</text>
    </para>
    <para>
      <style basestylename="Action"/>
      <text size="12" bold="1" color="#000000" bgcolor="#FFFFFF">TITLE: Nebraska, 1875.</text>
    </para>
    <para>
      <style basestylename="Action"/>
      <text>A WOMAN CRIES OUT, drawing our attention to a scant farm house in the distance.</text>
    </para>

更多

Fountain(Markdown)

Fountain是计算 nerds 写电影时产生的结果。它正成为最流行的格式之一。Fountain仅仅是markdown,就像在Git仓库中使用的那样。它有很好的文档,速度快,并且可以轻松集成到不同的软件中。

Fountain已经被Alex King(Fountain-PHP)移植到PHP中

解析markdown是一种标准操作,被广泛应用。例如:http://parsedown.org/

INT. SMALL TOWN BANK - DAY

= Walter is denied an extension on his farm's loan

Walter sits across the desk from a BANK OFFICIAL who can’t stop wringing his hands.

BANK OFFICIAL
I’d really like to help. I really would...

WALTER
I’m not asking for a hand-out, George. It’s been a tough season. I just need more time.

BANK OFFICIAL
You’ve already exceeded the grace period. Twice.

更多

RTF

富文本是一个非常古老的格式,已经存在多年。使用Packagist上可用的RTF阅读库可以非常简单地解析,例如:https://github.com/henck/rtf-html-php

{\pard\plain \ql \caps\sb480\f66\fs24\sl180\s2\fi0\ri1440\li2160 EXT. Mast farm - nIGHT\par }
{\pard\plain \ql \sb240\f66\fs24\sl180\s3\fi0\ri1440\li2160 Wheat fields. Etched in darkness and moonlight. For the moment it's calm.\par }
{\pard\plain \ql \b\sb240\f66\fs24\sl180\s3\fi0\ri1440\li2160 TITLE: Nebraska, 1875.}
{\pard\plain \ql \sb240\f66\fs24\sl180\s3\fi0\ri1440\li2160 \par A WOMAN CRIES OUT, drawing our attention to a scant farm house in the distance.\par }
{\pard\plain \ql \caps\sb480\f66\fs24\sl180\s2\fi0\ri1440\li2160 EXT. Mast house - cONTINUOUS\par }
{\pard\plain \ql \sb240\f66\fs24\sl180\s3\fi0\ri1440\li2160 Perched on the house's front stair is HENRY MAST. He's 11 years old and anxious as anything. \par His mother's intermittent screams emanate from the house.\par Nearby his father WALTER MAST, 40's, smokes a pipe. Keeps his back to his son. Trying to hide the worry in his weathered face.\par More screams from inside.\par }
{\pard\plain \ql \caps\sb240\f66\fs24\sl180\s4\fi0\ri1800\li5040 Henry\par }
{\pard\plain \ql \sb0\f66\fs24\sl180\s6\fi0\ri3600\li3600 Was it like this with me?\par }
{\pard\plain \ql \caps\sb240\f66\fs24\sl180\s4\fi0\ri1800\li5040 Doctor\par }
{\pard\plain \ql \sb0\f66\fs24\sl180\s6\fi0\ri3600\li3600 I'm sorry, Walter.\par }

更多

提取基于文本的PDF剧本

有时你会得到一些讨厌的PDF文件,你无法用C、PHP或Java等语言自动解析。在这种情况下,如果它是从Final Draft等软件导出的文本格式,你可以使用免费和开源的基于XPDF的库pdftotext

1. 安装pdftotext

在OS X上,它是poppler软件包的一部分

brew install poppler-utils

在Linux上,情况相同

yum install poppler-utils # CentOS
apt-get install poppler-utils # Debian
2. 从命令行转换(带/不带密码)

使用不带密码保护的文件从命令行使用

pdftotext script.pdf script.txt

带密码加密的使用

pdftotext -upw 'password' script.pdf script.txt
Web后端

可以从后端Web服务器进程调用,例如在Laravel中

$cmd = 'pdftotext -layout -upw '.$password_text.' '.$pdf_file_path.' '.$output_txt_path;
exec($cmd, $pdftotext_output, $exit_code);

$contents = file_get_contents($output_txt_path);

对于NPM有很多可用包

提取基于图像的PDF剧本

更常见的是,特别是对于较老的剧本,你会有包含每页图像扫描的PDF文件。脚本供应商通常会这样做,同时禁用打印等,认为这是一种“版权保护”的形式。

对于这类文件,你需要光学字符识别(OCR)。

首先,OCR只对高分辨率图像文件有效,因此你需要将PDF转换为TIFF格式。

注意:有大量NPM可用包

1. 导出为TIFF

在预览中打开PDF,使用文件 > 导出将其保存为TIFF文件。这可能需要很长时间,并生成一个大小达数十GB的文件。

你也可以使用ImageMagick进行编程化处理。

convert -density 300 /path/to/script.pdf -depth 8 -strip -background white -alpha off script.tiff
2. 安装Tesseract

Tesseracthttps://github.com/tesseract-ocr/tesseract)是一个开源的OCR引擎,可以安装在OS X和/或Linux上。

在OS X上

brew install tesseract

在Linux上

apt-get install tesseract-ocr
3. 对TIFF文件进行OCR处理

OCR并不完美,因此文件需要手动校正。但这比手动输入要强得多。

tesseract script.tiff script.txt