news/ds13-videomitschnitte-teil1
This commit is contained in:
parent
efa1e0eef1
commit
833a4a900f
5
Makefile
5
Makefile
|
@ -74,7 +74,8 @@ DS_PAGES:=$(patsubst content/datenspuren/%.xml, build/datenspuren/$(DS_YEAR)/%.h
|
||||||
DS_FEEDS:= \
|
DS_FEEDS:= \
|
||||||
build/datenspuren/2010/mitschnitte-rss.xml \
|
build/datenspuren/2010/mitschnitte-rss.xml \
|
||||||
build/datenspuren/2011/mitschnitte-rss.xml \
|
build/datenspuren/2011/mitschnitte-rss.xml \
|
||||||
build/datenspuren/2012/mitschnitte-rss.xml
|
build/datenspuren/2012/mitschnitte-rss.xml \
|
||||||
|
build/datenspuren/2013/mitschnitte-rss.xml
|
||||||
|
|
||||||
# Quellen
|
# Quellen
|
||||||
NEWSITEMS:=$(wildcard content/news/*.xml)
|
NEWSITEMS:=$(wildcard content/news/*.xml)
|
||||||
|
@ -251,6 +252,8 @@ build/datenspuren/2011/mitschnitte-rss.xml: content/news/ds11-mitschnitte-online
|
||||||
$(call xml_process)
|
$(call xml_process)
|
||||||
build/datenspuren/2012/mitschnitte-rss.xml: content/news/ds12-videomitschnitte-komplett.xml $(STYLE)
|
build/datenspuren/2012/mitschnitte-rss.xml: content/news/ds12-videomitschnitte-komplett.xml $(STYLE)
|
||||||
$(call xml_process)
|
$(call xml_process)
|
||||||
|
build/datenspuren/2013/mitschnitte-rss.xml: content/news/ds13-videomitschnitte-teil1.xml $(STYLE)
|
||||||
|
$(call xml_process)
|
||||||
|
|
||||||
|
|
||||||
xhtml5-validate: $(patsubst build/%.html, build/%.html.xhtml5-validate, $(CONTENT))
|
xhtml5-validate: $(patsubst build/%.html, build/%.html.xhtml5-validate, $(CONTENT))
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE item SYSTEM "http://www.c3d2.de/dtd/c3d2web.dtd">
|
||||||
|
<?xml-stylesheet type="text/xsl" href="../../xsl/html.xsl" ?>
|
||||||
|
<item title="Datenspuren 2013 - Videomitschnitte online (Teil 1)"
|
||||||
|
date="2013-09-13T21:30:00"
|
||||||
|
author="Astro">
|
||||||
|
|
||||||
|
<image title="Datenspuren 2013">../cfp-flyer-ds13_logo.png</image>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Videoengel <em>COeins</em> hat sich ins Zeug gelegt und somit
|
||||||
|
können wir bereits nach weniger als einer Woche eine Vorschau auf
|
||||||
|
die ersten fünf Videomitschnitte geben. Insbesondere die
|
||||||
|
Podiumsdiskussion kann euch zur Bundestagswahl in einer Woche zu
|
||||||
|
einer besser informierten Entscheidung verhelfen.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<resource title="Podiumsdiskussion" size="449551691" type="video/mp4" url="http://ftp.c3d2.de/datenspuren/2013/5225_podiumsdiskussion.mp4" preview="http://ftp.c3d2.de/datenspuren/2013/5225_podiumsdiskussion.gif" poster="http://ftp.c3d2.de/datenspuren/2013/5225_podiumsdiskussion.jpg" details-link="http://datenspuren.de/2013/fahrplan/events/5225.html" feedback-link="https://frab.cccv.de/en/DS2013/public/events/5225/feedback/new"><alternative size="473410271" type="video/webm" url="http://ftp.c3d2.de/datenspuren/2013/5225_podiumsdiskussion.webm"/></resource>
|
||||||
|
<addendum>
|
||||||
|
<resource title="Lightning Talks" size="330490175" type="video/mp4" url="http://ftp.c3d2.de/datenspuren/2013/5170_lightning_talks.mp4" preview="http://ftp.c3d2.de/datenspuren/2013/5170_lightning_talks.gif" poster="http://ftp.c3d2.de/datenspuren/2013/5170_lightning_talks.jpg" details-link="http://datenspuren.de/2013/fahrplan/events/5170.html" feedback-link="https://frab.cccv.de/en/DS2013/public/events/5170/feedback/new"><alternative size="355349199" type="video/webm" url="http://ftp.c3d2.de/datenspuren/2013/5170_lightning_talks.webm"/></resource>
|
||||||
|
<resource title="WebRTC" size="186187362" type="video/mp4" url="http://ftp.c3d2.de/datenspuren/2013/5172_webrtc.mp4" preview="http://ftp.c3d2.de/datenspuren/2013/5172_webrtc.gif" poster="http://ftp.c3d2.de/datenspuren/2013/5172_webrtc.jpg" details-link="http://datenspuren.de/2013/fahrplan/events/5172.html" feedback-link="https://frab.cccv.de/en/DS2013/public/events/5172/feedback/new"><alternative size="204542876" type="video/webm" url="http://ftp.c3d2.de/datenspuren/2013/5172_webrtc.webm"/></resource>
|
||||||
|
<resource title="ddmesh" size="93264692" type="video/mp4" url="http://ftp.c3d2.de/datenspuren/2013/5175_ddmesh.mp4" preview="http://ftp.c3d2.de/datenspuren/2013/5175_ddmesh.gif" poster="http://ftp.c3d2.de/datenspuren/2013/5175_ddmesh.jpg" details-link="http://datenspuren.de/2013/fahrplan/events/5175.html" feedback-link="https://frab.cccv.de/en/DS2013/public/events/5175/feedback/new"><alternative size="99262406" type="video/webm" url="http://ftp.c3d2.de/datenspuren/2013/5175_ddmesh.webm"/></resource>
|
||||||
|
<resource title="PRISM / TEMPORA" size="185348730" type="video/mp4" url="http://ftp.c3d2.de/datenspuren/2013/5257_prism_tempora.mp4" preview="http://ftp.c3d2.de/datenspuren/2013/5257_prism_tempora.gif" poster="http://ftp.c3d2.de/datenspuren/2013/5257_prism_tempora.jpg" details-link="http://datenspuren.de/2013/fahrplan/events/5257.html" feedback-link="https://frab.cccv.de/en/DS2013/public/events/5257/feedback/new"><alternative size="204864087" type="video/webm" url="http://ftp.c3d2.de/datenspuren/2013/5257_prism_tempora.webm"/></resource>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Die Mitschnitte der übrigen Vorträge folgen in den nächsten
|
||||||
|
Wochen.
|
||||||
|
</p>
|
||||||
|
</addendum>
|
||||||
|
</item>
|
|
@ -0,0 +1,186 @@
|
||||||
|
var ltx = require('ltx');
|
||||||
|
var http = require('http');
|
||||||
|
var fs = require('fs');
|
||||||
|
var url = require('url');
|
||||||
|
|
||||||
|
|
||||||
|
var running = 0, queue = [];
|
||||||
|
|
||||||
|
var SUFFIXES = ["_hq.mp4", ".mp4", ".webm"];
|
||||||
|
var WEB_SUFFIXES = [".mp4", ".webm"];
|
||||||
|
|
||||||
|
function resolveSizes(urls, cb) {
|
||||||
|
if (running > 0) {
|
||||||
|
queue.push(function() {
|
||||||
|
resolveSizes(urls, cb);
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
running++;
|
||||||
|
|
||||||
|
urls = urls.map(url.parse);
|
||||||
|
|
||||||
|
var pending = 0, results = [],
|
||||||
|
done = function() {
|
||||||
|
if (pending < 1) {
|
||||||
|
results = results.sort(function(a, b) {
|
||||||
|
if (a.url < b.url)
|
||||||
|
return -1;
|
||||||
|
else if (a.url > b.url)
|
||||||
|
return 1;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
cb(results);
|
||||||
|
|
||||||
|
running--;
|
||||||
|
var f = queue.shift();
|
||||||
|
f && f();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
urls.forEach(function(u) {
|
||||||
|
var req = http.request({ method: 'HEAD',
|
||||||
|
path: u.pathname,
|
||||||
|
hostname: u.host });
|
||||||
|
req.end();
|
||||||
|
req.on('response', function(res) {
|
||||||
|
if (res.statusCode === 200) {
|
||||||
|
results.push({ url: url.format(u),
|
||||||
|
size: res.headers['content-length'] });
|
||||||
|
} else {
|
||||||
|
console.error("HTTP " + res.statusCode + " " + u.pathname);
|
||||||
|
}
|
||||||
|
pending--;
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
pending++;
|
||||||
|
});
|
||||||
|
done();
|
||||||
|
}
|
||||||
|
|
||||||
|
function mimeByExt(url) {
|
||||||
|
var ext = url.split('.').pop();
|
||||||
|
var type = ({ avi: 'video/avi',
|
||||||
|
mp4: 'video/mp4',
|
||||||
|
webm: 'video/webm',
|
||||||
|
ogv: 'video/ogg',
|
||||||
|
flv: 'video/x-flv' })[ext];
|
||||||
|
return type || 'application/octet-stream';
|
||||||
|
}
|
||||||
|
|
||||||
|
function processEvent(event) {
|
||||||
|
var base = 'http://ftp.c3d2.de/datenspuren/2013/' + event.outputName;
|
||||||
|
var urls = WEB_SUFFIXES.map(function(fmt) {
|
||||||
|
return base + fmt;
|
||||||
|
});
|
||||||
|
resolveSizes(urls, function(infos) {
|
||||||
|
infos = infos.filter(function(i) {
|
||||||
|
return i.size !== undefined;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (infos.length < 1) {
|
||||||
|
console.warn("<!-- No resources for " + event.id + ": " + event.title + " -->");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var resAttrs = {
|
||||||
|
title: event.title,
|
||||||
|
size: infos[0].size,
|
||||||
|
type: mimeByExt(infos[0].url),
|
||||||
|
url: infos[0].url,
|
||||||
|
preview: base + ".gif",
|
||||||
|
poster: base + ".jpg"
|
||||||
|
};
|
||||||
|
if (event.id != "0000") {
|
||||||
|
resAttrs['details-link'] = "http://datenspuren.de/2013/fahrplan/events/" +
|
||||||
|
event.id + ".html";
|
||||||
|
resAttrs['feedback-link'] = "https://frab.cccv.de/en/DS2013/public/events/" +
|
||||||
|
event.id + "/feedback/new";
|
||||||
|
}
|
||||||
|
var res = new ltx.Element('resource', resAttrs);
|
||||||
|
infos.slice(1).forEach(function(info) {
|
||||||
|
res.c('alternative', { size: info.size,
|
||||||
|
type: mimeByExt(info.url),
|
||||||
|
url: info.url });
|
||||||
|
});
|
||||||
|
console.info(res.toString());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function printMetadata(event) {
|
||||||
|
var metaparameters = "";
|
||||||
|
function addMeta(k, v) {
|
||||||
|
metaparameters +=
|
||||||
|
" -metadata " + k + "=\"" +
|
||||||
|
v.replace(/"/g, '\\"') + "\"";
|
||||||
|
}
|
||||||
|
addMeta('title', event.title);
|
||||||
|
addMeta('subtitle', event.subtitle);
|
||||||
|
addMeta('album', "Datenspuren 2012");
|
||||||
|
addMeta('artist', "Datenspuren");
|
||||||
|
addMeta('author', "Datenspuren");
|
||||||
|
addMeta('language', "deu");
|
||||||
|
addMeta('year', "2012");
|
||||||
|
addMeta('composer', event.persons.join(", "));
|
||||||
|
addMeta('description', event.abstract || event.description);
|
||||||
|
SUFFIXES.forEach(function(suffix) {
|
||||||
|
console.log("avconv -i " + event.inputName + suffix + " -codec copy" + metaparameters + " -y " + event.outputName + suffix);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function slugify(title) {
|
||||||
|
return title.toLowerCase().
|
||||||
|
replace(/\s*[–\-\:].*/, "").
|
||||||
|
replace(/[\.!\?\/]/g, "").
|
||||||
|
replace(/Ä/g, "Ae").
|
||||||
|
replace(/Ö/g, "Oe").
|
||||||
|
replace(/Ü/g, "Ue").
|
||||||
|
replace(/ä/g, "ae").
|
||||||
|
replace(/ö/g, "oe").
|
||||||
|
replace(/ü/g, "ue").
|
||||||
|
replace(/ß/g, "ss").
|
||||||
|
replace(/ẞ/g, "SS").
|
||||||
|
replace(/\s+/g, "_");
|
||||||
|
}
|
||||||
|
|
||||||
|
function makeEvent(event) {
|
||||||
|
event.inputName = event.id;
|
||||||
|
event.outputName = event.id + "_" + slugify(event.title);
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
|
||||||
|
var scheduleFile = fs.readFileSync('../content/static/datenspuren/2013/fahrplan/schedule.xml');
|
||||||
|
var schedule = ltx.parse(scheduleFile);
|
||||||
|
schedule.getChildren('day').forEach(function(dayEl) {
|
||||||
|
var dayEvents = [];
|
||||||
|
var roomIdx = 0;
|
||||||
|
dayEl.getChildren('room').forEach(function(roomEl) {
|
||||||
|
roomEl.getChildren('event').forEach(function(eventEl) {
|
||||||
|
var persons = [];
|
||||||
|
eventEl.getChildren('persons').forEach(function(personsEl) {
|
||||||
|
personsEl.getChildren('person').forEach(function(personEl) {
|
||||||
|
persons.push(personEl.getText());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
dayEvents.push(makeEvent(
|
||||||
|
{ id: eventEl.attrs.id,
|
||||||
|
time: eventEl.getChildText('start'),
|
||||||
|
room: roomIdx,
|
||||||
|
title: eventEl.getChildText('title'),
|
||||||
|
subtitle: eventEl.getChildText('subtitle'),
|
||||||
|
slug: eventEl.getChildText('slug'),
|
||||||
|
abstract: eventEl.getChildText('abstract'),
|
||||||
|
description: eventEl.getChildText('description'),
|
||||||
|
persons: persons
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
roomIdx++;
|
||||||
|
});
|
||||||
|
dayEvents = dayEvents.sort(function(e1, e2) {
|
||||||
|
return (e1.time < e2.time) ? -1 :
|
||||||
|
((e1.time > e2.time) ? 1 : e1.room - e2.room);
|
||||||
|
});
|
||||||
|
dayEvents.forEach(printMetadata);
|
||||||
|
dayEvents.forEach(processEvent);
|
||||||
|
});
|
||||||
|
|
Loading…
Reference in New Issue