13
0

Lua script to export markers as mp4 chapters

Location markers, that are not xruns are exported as mp4 chapter
marks. This requires `Location::name()` to be exposed to Lua.
This commit is contained in:
Johannes Mueller 2016-09-08 22:34:39 +02:00 committed by Robin Gareus
parent 5eaec8c82d
commit 9d927b54c1

View File

@ -0,0 +1,55 @@
ardour {
["type"] = "EditorAction",
name = "Export markers as mp4chaps",
author = "Johannes Mueller",
description = [[
Exports MP4chaps of all markers except xruns. The markers are stored in the
export directory of the session in mp4 chapter marks format. The filename
is mp4chaps.txt
Note that there's always a chapter mark "Intro" at 00:00:00.000 as some
players can't live without it. If there are no exportable markers, the file
is not created.
This is a bit more convenient than the export option, as one does not
have to wait for the export.
]],
license = "GPLv2"
}
function factory (unused_params) return function ()
fr = Session:frame_rate()
chaps = {}
for l in Session:locations():list():iter() do
name = l:name()
if not l:is_mark() or string.find(name, "^xrun%d*$") then
goto next end
t = l:start()
h = math.floor(t / (3600*fr))
r = t - (h*3600*fr)
m = math.floor(r / (60*fr))
r = r - m*60*fr
s = math.floor(r / fr)
r = r - s*fr
ms = math.floor(r*1000/fr)
table.insert(chaps, string.format("%02d:%02d:%02d.%03d %s\n", h, m, s, ms, name))
::next::
end
if next(chaps) == nil then
goto out end
table.insert(chaps, "00:00:00.000 Intro\n")
table.sort(chaps)
file = io.open(string.format("%s/export/mp4chaps.txt", Session:path()), "w")
for i, line in ipairs(chaps) do
file:write(line)
end
file:close()
::out::
end end