diff options
| author | Carl Hetherington <cth@carlh.net> | 2012-09-09 18:12:32 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2012-09-09 18:12:32 +0100 |
| commit | 8411002d2c768dfaaa4b89cf6a2b12b3967f1f69 (patch) | |
| tree | 35f43d5f12ca34868c7b64de1671ca72b38177b1 | |
| parent | c1798d06bb87eddfb08945893b0b9166fd097f93 (diff) | |
Clean up and fix subtitle parsing a bit.
| -rw-r--r-- | src/subtitle_asset.cc | 100 | ||||
| -rw-r--r-- | src/subtitle_asset.h | 16 | ||||
| -rw-r--r-- | src/util.cc | 12 | ||||
| -rw-r--r-- | src/util.h | 1 | ||||
| -rw-r--r-- | src/xml.cc | 21 | ||||
| -rw-r--r-- | test/ref/info.log | 138 |
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; +} @@ -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); @@ -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 |
