Storyboard: offer to show the person speaking instead of a voice over the listener
This commit is contained in:
parent
9d9d1e3fdc
commit
8a30838e29
1 changed files with 26 additions and 1 deletions
27
trailer.html
27
trailer.html
|
|
@ -341,6 +341,26 @@
|
|||
|
||||
// A CHAPTER IS FILMED IN PARTS of about 25 shots that share one cast and the
|
||||
// same rooms. This says where each part has got to, and joins them.
|
||||
// A VOICE OVER SOMEBODY LISTENING. In a phone call the audience wants to see
|
||||
// whoever is talking. One press re-frames those shots onto the speaker.
|
||||
function heardNotSeen() {
|
||||
return (PKG.shots || []).filter(function (sh) {
|
||||
var l = (sh.audio || []).filter(function (a) { return String(a.text || "").trim(); });
|
||||
return l.length === 1 && !l[0].lip_sync && l[0].character_id
|
||||
&& String(l[0].character_id) !== String(PKG.narrator || "")
|
||||
&& String(l[0].text).trim().split(/\s+/).length > 3;
|
||||
});
|
||||
}
|
||||
function speakerNoticeHtml(draft) {
|
||||
var st = PKG.show_speaker || {};
|
||||
if (st.state === "working") return '<div class="guide" style="margin-bottom:12px"><p class="cont">Re-framing those shots onto the person speaking… this takes a minute or two.</p></div>';
|
||||
var n = heardNotSeen();
|
||||
if (!n.length) return "";
|
||||
return '<div class="guide" style="margin-bottom:12px"><h4>' + n.length + (n.length === 1 ? ' shot plays' : ' shots play') + ' a voice over somebody listening</h4>'
|
||||
+ '<p class="cont">Shots ' + n.map(function (x) { return esc(x.id); }).join(", ") + '. In a conversation people expect to see whoever is talking. This rewrites those pictures to show the speaker, in the place where they are. Every word stays as it is. The pictures will need drawing again.</p>'
|
||||
+ '<button type="button" class="btn primary" data-showspeakers="' + esc(draft.id) + '">Show the person speaking instead</button></div>';
|
||||
}
|
||||
|
||||
function partsHtml(draft) {
|
||||
var parts = DRAFTS.filter(function (d) { return /^part-/.test(String(d.writer)); });
|
||||
var n = (PKG.shots || []).length;
|
||||
|
|
@ -957,7 +977,7 @@
|
|||
DRAFTNOW = draft;
|
||||
return head + partsHtml(draft) + contestHtml() + guideHtml(meta) + probs + '<div class="bar">' + barHtml(meta) + '</div>'
|
||||
+ '<div id="reelhost">' + reelHtml() + '</div>'
|
||||
+ spineHtml() + cutsHtml(meta) + reviewsHtml(meta) + wholeHtml() + castHtml + propsHtml() + body;
|
||||
+ spineHtml() + cutsHtml(meta) + reviewsHtml(meta) + wholeHtml() + speakerNoticeHtml(draft) + castHtml + propsHtml() + body;
|
||||
}
|
||||
|
||||
// THINGS THAT MUST STAY THE SAME. A face is held steady by a reference
|
||||
|
|
@ -1600,6 +1620,11 @@
|
|||
}
|
||||
return;
|
||||
}
|
||||
if ((el = hit("data-showspeakers"))) {
|
||||
r = await act("show_speakers", { draft_id: el.getAttribute("data-showspeakers") });
|
||||
if (r) { showMsg("msg", "Re-framing " + (r.shots || []).length + " shots onto the person speaking. The words do not change.", "ok"); await refresh(); }
|
||||
return;
|
||||
}
|
||||
if ((el = hit("data-splitparts"))) {
|
||||
el.disabled = true;
|
||||
r = await act("split_parts", { run_id: runId, draft_id: el.getAttribute("data-splitparts") });
|
||||
|
|
|
|||
Loading…
Reference in a new issue