summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2012-09-09 18:12:32 +0100
committerCarl Hetherington <cth@carlh.net>2012-09-09 18:12:32 +0100
commit8411002d2c768dfaaa4b89cf6a2b12b3967f1f69 (patch)
tree35f43d5f12ca34868c7b64de1671ca72b38177b1
parentc1798d06bb87eddfb08945893b0b9166fd097f93 (diff)
Clean up and fix subtitle parsing a bit.
-rw-r--r--src/subtitle_asset.cc100
-rw-r--r--src/subtitle_asset.h16
-rw-r--r--src/util.cc12
-rw-r--r--src/util.h1
-rw-r--r--src/xml.cc21
-rw-r--r--test/ref/info.log138
6 files changed, 233 insertions, 55 deletions
diff --git a/src/subtitle_asset.cc b/src/subtitle_asset.cc
index ac222638..b7586207 100644
--- a/src/subtitle_asset.cc
+++ b/src/subtitle_asset.cc
@@ -19,6 +19,7 @@
#include <boost/lexical_cast.hpp>
#include "subtitle_asset.h"
+#include "util.h"
using namespace std;
using namespace boost;
@@ -42,71 +43,93 @@ SubtitleAsset::SubtitleAsset (string directory, string xml)
in a sane way.
*/
- list<shared_ptr<FontNode> > current_font_nodes;
- list<shared_ptr<SubtitleNode> > current_subtitle_nodes;
- current_subtitle_nodes.push_back (shared_ptr<SubtitleNode> ());
- examine_font_nodes (font_nodes, current_font_nodes, current_subtitle_nodes);
+ ParseState parse_state;
+ examine_font_nodes (font_nodes, parse_state);
}
void
SubtitleAsset::examine_font_nodes (
list<shared_ptr<FontNode> > const & font_nodes,
- list<shared_ptr<FontNode> >& current_font_nodes,
- list<shared_ptr<SubtitleNode> >& current_subtitle_nodes
+ ParseState& parse_state
)
{
for (list<shared_ptr<FontNode> >::const_iterator i = font_nodes.begin(); i != font_nodes.end(); ++i) {
-
- current_font_nodes.push_back (*i);
+
+ parse_state.font_nodes.push_back (*i);
+ maybe_add_subtitle ((*i)->text, parse_state);
for (list<shared_ptr<SubtitleNode> >::iterator j = (*i)->subtitle_nodes.begin(); j != (*i)->subtitle_nodes.end(); ++j) {
- current_subtitle_nodes.push_back (*j);
- examine_text_nodes (*j, (*j)->text_nodes, current_font_nodes);
- examine_font_nodes ((*j)->font_nodes, current_font_nodes, current_subtitle_nodes);
- current_subtitle_nodes.pop_back ();
+ parse_state.subtitle_nodes.push_back (*j);
+ examine_text_nodes ((*j)->text_nodes, parse_state);
+ examine_font_nodes ((*j)->font_nodes, parse_state);
+ parse_state.subtitle_nodes.pop_back ();
}
- examine_font_nodes ((*i)->font_nodes, current_font_nodes, current_subtitle_nodes);
- examine_text_nodes (current_subtitle_nodes.back (), (*i)->text_nodes, current_font_nodes);
+ examine_font_nodes ((*i)->font_nodes, parse_state);
+ examine_text_nodes ((*i)->text_nodes, parse_state);
- current_font_nodes.pop_back ();
+ parse_state.font_nodes.pop_back ();
}
}
void
SubtitleAsset::examine_text_nodes (
- shared_ptr<SubtitleNode> subtitle_node,
list<shared_ptr<TextNode> > const & text_nodes,
- list<shared_ptr<FontNode> >& current_font_nodes
+ ParseState& parse_state
)
{
for (list<shared_ptr<TextNode> >::const_iterator i = text_nodes.begin(); i != text_nodes.end(); ++i) {
- FontNode effective (current_font_nodes);
- _subtitles.push_back (
- shared_ptr<Subtitle> (
- new Subtitle (
- font_id_to_name (effective.id),
- effective.italic.get(),
- effective.color.get(),
- effective.size,
- subtitle_node->in,
- subtitle_node->out,
- (*i)->v_position,
- (*i)->v_align,
- (*i)->text,
- effective.effect.get(),
- effective.effect_color.get(),
- subtitle_node->fade_up_time,
- subtitle_node->fade_down_time
- )
- )
- );
+ parse_state.text_nodes.push_back (*i);
+ maybe_add_subtitle ((*i)->text, parse_state);
+ examine_font_nodes ((*i)->font_nodes, parse_state);
+ parse_state.text_nodes.pop_back ();
}
}
+void
+SubtitleAsset::maybe_add_subtitle (string text, ParseState const & parse_state)
+{
+ if (empty_or_white_space (text)) {
+ return;
+ }
+
+ if (parse_state.text_nodes.empty() || parse_state.subtitle_nodes.empty ()) {
+ return;
+ }
+
+ assert (!parse_state.text_nodes.empty ());
+ assert (!parse_state.subtitle_nodes.empty ());
+
+ FontNode effective_font (parse_state.font_nodes);
+ TextNode effective_text (*parse_state.text_nodes.back ());
+ SubtitleNode effective_subtitle (*parse_state.subtitle_nodes.back ());
+
+ _subtitles.push_back (
+ shared_ptr<Subtitle> (
+ new Subtitle (
+ font_id_to_name (effective_font.id),
+ effective_font.italic.get(),
+ effective_font.color.get(),
+ effective_font.size,
+ effective_subtitle.in,
+ effective_subtitle.out,
+ effective_text.v_position,
+ effective_text.v_align,
+ text,
+ effective_font.effect.get(),
+ effective_font.effect_color.get(),
+ effective_subtitle.fade_up_time,
+ effective_subtitle.fade_down_time
+ )
+ )
+ );
+}
+
FontNode::FontNode (xmlpp::Node const * node)
: XMLNode (node)
{
+ text = content ();
+
id = optional_string_attribute ("Id");
size = optional_int64_attribute ("Size");
italic = optional_bool_attribute ("Italic");
@@ -209,8 +232,9 @@ TextNode::TextNode (xmlpp::Node const * node)
} else if (v == "bottom") {
v_align = BOTTOM;
}
-}
+ font_nodes = sub_nodes<FontNode> ("Font");
+}
list<shared_ptr<Subtitle> >
SubtitleAsset::subtitles_at (Time t) const
diff --git a/src/subtitle_asset.h b/src/subtitle_asset.h
index efcab3a3..4d62bfb4 100644
--- a/src/subtitle_asset.h
+++ b/src/subtitle_asset.h
@@ -35,6 +35,7 @@ public:
float v_position;
VAlign v_align;
std::string text;
+ std::list<boost::shared_ptr<FontNode> > font_nodes;
};
class SubtitleNode : public XMLNode
@@ -61,6 +62,7 @@ public:
FontNode (xmlpp::Node const * node);
FontNode (std::list<boost::shared_ptr<FontNode> > const & font_nodes);
+ std::string text;
std::string id;
int size;
boost::optional<bool> italic;
@@ -198,16 +200,22 @@ public:
private:
std::string font_id_to_name (std::string id) const;
+ struct ParseState {
+ std::list<boost::shared_ptr<FontNode> > font_nodes;
+ std::list<boost::shared_ptr<TextNode> > text_nodes;
+ std::list<boost::shared_ptr<SubtitleNode> > subtitle_nodes;
+ };
+
+ void maybe_add_subtitle (std::string text, ParseState const & parse_state);
+
void examine_font_nodes (
std::list<boost::shared_ptr<FontNode> > const & font_nodes,
- std::list<boost::shared_ptr<FontNode> >& current_font_nodes,
- std::list<boost::shared_ptr<SubtitleNode> >& current_subtitle_nodes
+ ParseState& parse_state
);
void examine_text_nodes (
- boost::shared_ptr<SubtitleNode> subtitle_node,
std::list<boost::shared_ptr<TextNode> > const & text_nodes,
- std::list<boost::shared_ptr<FontNode> >& current_font_nodes
+ ParseState& parse_state
);
std::string _subtitle_id;
diff --git a/src/util.cc b/src/util.cc
index fd76e556..913b8b50 100644
--- a/src/util.cc
+++ b/src/util.cc
@@ -252,3 +252,15 @@ libdcp::xyz_to_rgb (opj_image_t* xyz_frame)
return argb_frame;
}
+
+bool
+libdcp::empty_or_white_space (string s)
+{
+ for (size_t i = 0; i < s.length(); ++i) {
+ if (s[i] != ' ' && s[i] != '\n' && s[i] != '\t') {
+ return false;
+ }
+ }
+
+ return true;
+}
diff --git a/src/util.h b/src/util.h
index 9485c450..fd0ea5e9 100644
--- a/src/util.h
+++ b/src/util.h
@@ -48,6 +48,7 @@ extern std::string content_kind_to_string (ContentKind kind);
extern ContentKind content_kind_from_string (std::string kind);
extern bool starts_with (std::string big, std::string little);
extern bool ends_with (std::string big, std::string little);
+extern bool empty_or_white_space (std::string s);
extern opj_image_t* decompress_j2k (uint8_t* data, int64_t size, int reduce);
extern boost::shared_ptr<ARGBFrame> xyz_to_rgb (opj_image_t* xyz_frame);
diff --git a/src/xml.cc b/src/xml.cc
index 7ca3cc1a..4982e9fb 100644
--- a/src/xml.cc
+++ b/src/xml.cc
@@ -226,22 +226,17 @@ XMLNode::done ()
string
XMLNode::content ()
{
+ string content;
+
xmlpp::Node::NodeList c = _node->get_children ();
-
- if (c.size() > 1) {
- throw XMLError ("unexpected content in XML node");
+ for (xmlpp::Node::NodeList::const_iterator i = c.begin(); i != c.end(); ++i) {
+ xmlpp::ContentNode const * v = dynamic_cast<xmlpp::ContentNode const *> (*i);
+ if (v) {
+ content += v->get_content ();
+ }
}
- if (c.empty ()) {
- return "";
- }
-
- xmlpp::ContentNode const * v = dynamic_cast<xmlpp::ContentNode const *> (c.front());
- if (!v) {
- throw XMLError ("missing content in XML node");
- }
-
- return v->get_content ();
+ return content;
}
XMLFile::XMLFile (string file, string root_name)
diff --git a/test/ref/info.log b/test/ref/info.log
index da4d1cea..dca1c778 100644
--- a/test/ref/info.log
+++ b/test/ref/info.log
@@ -356,6 +356,144 @@ DCP: ../libdcp-test/TREE-OF-LIFE_TLR-2_F_EN-DE-FR_INT-TD_51_2K_SUM_20110126_LSP
font:Arial; italic:1; color:(255, 255, 255); in:0:2:3.60; out:0:2:5.130; v_position:84; v_align:0; effect:1; effect_color:(0, 0, 0); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 42
Prochainement
font:Arial; italic:1; color:(255, 255, 255); in:0:2:3.60; out:0:2:5.130; v_position:90; v_align:0; effect:1; effect_color:(0, 0, 0); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 42
+DCP: ../libdcp-test/PARANORMAL-ACT-4_TLR-A_S_EN-FR-DE_CH_51_2K_PC_20120727_DUK_OV
+ CPL: PARANORMAL-ACT-4_TLR-A_S_EN-FR-DE_CH_51_2K_PC_20120727_DUK_OV
+ Length: 2464
+ Frames per second: 24
+ Reel 1
+ Subtitle: 66 subtitles in German French (FR) Hybrid
+ Kristi, sag Hallo.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:1.20; out:0:0:2.114; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Tu dis bonjour, Kristi?
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:1.20; out:0:0:2.114; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Da ist Katie.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:3.177; out:0:0:4.197; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ C'est Katie.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:3.177; out:0:0:4.197; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Das hat meine Schwester gut gemacht.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:5.20; out:0:0:6.187; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Fière de ma sœur.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:5.20; out:0:0:6.187; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Hunter...
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:6.229; out:0:0:7.145; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ 2006
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:7.239; out:0:0:10.31; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ EN 2006
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:7.239; out:0:0:10.31; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ VERSCHWANDEN SIE
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:13.114; out:0:0:15.239; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ ILS ONT DISPARU
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:13.114; out:0:0:15.239; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ DIESES JAHR
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:19.52; out:0:0:21.72; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ CETTE ANNÉE
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:19.52; out:0:0:21.72; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ FÜHRT ALL DIE AKTIVITÄT
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:32.177; out:0:0:34.125; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ TOUTE L'ACTIVITÉ
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:32.177; out:0:0:34.125; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Ich höre dauernd Geräusche.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:34.208; out:0:0:36.93; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ J'ai entendu beaucoup de bruit.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:34.208; out:0:0:36.93; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Es passiert lauter seltsames Zeug,
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:36.114; out:0:0:38.41; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Il se passe des trucs bizarres...
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:36.114; out:0:0:38.41; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ seit die neuen Nachbarn eingezogen sind.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:38.62; out:0:0:39.208; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ depuis l'arrivée des voisins.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:38.62; out:0:0:39.208; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Lichter können immer mal ausgehen.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:40.0; out:0:0:41.145; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ La lumière s'éteint tout le temps.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:40.0; out:0:0:41.145; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ HIERZU
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:42.41; out:0:0:44.177; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ A MENÉ À ÇA
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:42.41; out:0:0:44.177; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Es passiert wieder. Die Bewegungsmelder
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:44.197; out:0:0:46.10; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Ça recommence. Les détecteurs...
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:44.197; out:0:0:46.10; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ schalten sich nachts ein und aus.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:46.31; out:0:0:47.72; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ de mouvement s'allument la nuit.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:46.31; out:0:0:47.72; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Na klar.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:47.104; out:0:0:48.104; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ C'est ça.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:47.104; out:0:0:48.104; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Ich wette, das ist
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:48.125; out:0:0:49.52; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ C'est sûrement...
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:48.125; out:0:0:49.52; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ der seltsame Junge von gegenüber.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:49.72; out:0:0:51.62; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ le gamin zarbi d'en face.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:49.72; out:0:0:51.62; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Schau.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:51.104; out:0:0:52.104; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Regarde.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:51.104; out:0:0:52.104; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Siehst du ihn?
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:53.135; out:0:0:55.93; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Tu le vois?
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:53.135; out:0:0:55.93; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Was zum Teufel?
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:56.125; out:0:0:58.0; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Quoi?
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:56.125; out:0:0:58.0; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Er ist so unheimlich.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:58.104; out:0:1:0.104; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Il est trop flippant.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:0:58.104; out:0:1:0.104; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Was tut er da?
+ font:Arial; italic:0; color:(255, 255, 255); in:0:1:1.229; out:0:1:3.104; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Que fait-il?
+ font:Arial; italic:0; color:(255, 255, 255); in:0:1:1.229; out:0:1:3.104; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ - Unheimlich, oder? - Ja.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:1:3.145; out:0:1:5.124; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ - Flippant, hein? - Oui.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:1:3.145; out:0:1:5.124; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Was ist los?
+ font:Arial; italic:0; color:(255, 255, 255); in:0:1:8.0; out:0:1:9.83; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Que se passe-t-il?
+ font:Arial; italic:0; color:(255, 255, 255); in:0:1:8.0; out:0:1:9.83; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Keine Ahnung. Es ist seltsam.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:1:10.208; out:0:1:13.41; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Aucune idée. C'est bizarre.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:1:10.208; out:0:1:13.41; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Alice, was passiert da?
+ font:Arial; italic:0; color:(255, 255, 255); in:0:1:13.145; out:0:1:15.62; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Alice, qu'y a-t-il?
+ font:Arial; italic:0; color:(255, 255, 255); in:0:1:13.145; out:0:1:15.62; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Ich weiss nicht.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:1:15.104; out:0:1:16.145; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Je ne sais pas.
+ font:Arial; italic:0; color:(255, 255, 255); in:0:1:15.104; out:0:1:16.145; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Vordertür offen. Hintertür offen.
+ font:Arial; italic:1; color:(255, 255, 255); in:0:1:17.145; out:0:1:20.104; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Entrée ouverte. Porte de derrière ouverte.
+ font:Arial; italic:1; color:(255, 255, 255); in:0:1:17.145; out:0:1:20.104; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Was ist da los?
+ font:Arial; italic:0; color:(255, 255, 255); in:0:1:20.166; out:0:1:22.41; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Alice, que se passe-t-il?
+ font:Arial; italic:0; color:(255, 255, 255); in:0:1:20.166; out:0:1:22.41; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ - Alice? - Was ist?
+ font:Arial; italic:0; color:(255, 255, 255); in:0:1:22.125; out:0:1:23.166; v_position:83.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ - Alice? - Quoi?
+ font:Arial; italic:0; color:(255, 255, 255); in:0:1:22.125; out:0:1:23.166; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ Alice!
+ font:Arial; italic:0; color:(255, 255, 255); in:0:1:23.218; out:0:1:25.52; v_position:90; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ DEMNÄCHST - ParanormalMovie.com
+ font:Arial; italic:0; color:(255, 255, 255); in:0:1:32.229; out:0:1:36.72; v_position:56.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ PROCHAINEMENT - ParanormalMovie.com
+ font:Arial; italic:0; color:(255, 255, 255); in:0:1:32.229; out:0:1:36.72; v_position:63; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ WAS GESCHAH WIRKLICH?
+ font:Arial; italic:0; color:(255, 255, 255); in:0:1:36.135; out:0:1:41.135; v_position:56.69; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
+ QU'EST-IL VRAIMENT ARRIVÉ?
+ font:Arial; italic:0; color:(255, 255, 255); in:0:1:36.135; out:0:1:41.135; v_position:63; v_align:0; effect:1; effect_color:(255, 255, 255); fade_up_time:0:0:0.20; fade_down_time:0:0:0.20; size: 45
DCP: ../libdcp-test/END-OF-TIME_TLR_F_XX-XX_CH_51_2K_LOK_20120726_DGL_OV
CPL:
Length: 2865