Automatisation de la création de fichiers HRD - al1pb - 28-11-24
Bonjour,
utilisant très souvent la prise de vue en braketing d'exposition, je me retrouve à passer un temps fou à regrouper mes images en fichier *.dng et rejeter les images utilisées pour leur création !
Voilà j'ai créer un script lua qui va automatiser le travail. Il faut ce travail :
- Utilise la collection (toutes les images à l'écran de la table lumineuse)
- Regroupe les images prises à la suite en rafale
- Assemble ces images en fichier *.dng
- selon option case à cocher, rejette les images utilisées lors de la création
- met le style de votre choix aux images hrd produites !
Attention, ne l'utilisez pas sur des prises de vue prisent en rafale, il va assembler les images à tord !
Il s'agit d'un script *.lua, compatible avec le script-manager.
Il vous suffit de copier le fichier dans le dossier @utilisateur/AppData/Local/darktable/lua/nouveau dossier ou un autre qui sera repris dans le script-manager
Depuis la table lumineuse, en bas à gauche, activer le script depuis le module : script manager
Voilà le script : https://drive.google.com/file/d/1becYRB1uAklswMZ-qO2cSPeQ38ekcrhH/view?usp=sharing
Code : local dt = require "darktable"
--local debug = require "darktable.debug"
local MOD = 'AutoHRD' --code recopié pour une utilisation dans script manager
local script_data = {}
script_data.metadata = {
name = "AutoHDR",
purpose = "Regroupe les images prises en rafale, puis les assemble en fichier hrd",
author = "Alain Plomb",
help = ""
}
script_data.destroy = nil
script_data.destroy_method = nil
script_data.restart = nil
script_data.show = nil
local mE = {}
mE.widgets = {}
mE.event_registered = false
mE.module_installed = false
--local file = io.open("D:/Documents/Test/test-scr.txt","w")
--io.output(file)
--io.write(dt.debug.dump(dt.database[1]))
--io.close(file)
--GUI
--case à chcher pour placer les images en rejet
local rejet = dt.new_widget("check_button"){
label = "mettre à rejetter images sources",
value = true
}
--liste déroulante de style pour image hrd
local stl ={}
for _,s in ipairs(dt.styles) do
table.insert(stl,s.name)
end
local comboboxStyle = dt.new_widget("combobox"){
label = "Style pour fichier HDR",
value = 1,
"aucun",
table.unpack(stl),
}
local function install_module()
if not mE.module_installed then
dt.register_lib(
"AutoHDR", -- Module name
"AutoHDR", -- name
true,
false,
{[dt.gui.views.lighttable] = {"DT_UI_CONTAINER_PANEL_RIGHT_CENTER", 100}},
dt.new_widget("box"){
orientation = "vertical",
dt.new_widget("button"){
label = "Auto HRD",
tooltip = "Exécuter les HRD",
clicked_callback = function (_)
main() --appel de la fonction principale
end
},
rejet,
comboboxStyle
},
nil,
nil
)
mE.module_installed = true
end
end
local function destroy() --fonctions de script manager
dt.gui.libs["AutoHDR"].visible = false
end
local function restart()
dt.gui.libs["AutoHDR"].visible = true
end
function main() --bouton de commande AutoHRD pressé
local function enSecondes(str) --transformer une date en seconde timestamp
local cleaned = string.gsub(str, '[^%d]',':')
cleaned = string.gsub(cleaned, '::*',':') --YYYY:MM:DD:hh:mm:ss
local year = string.sub(cleaned,1,4)
local month = string.sub(cleaned,6,7)
local day = string.sub(cleaned,9,10)
local hour = string.sub(cleaned,12,13)
local min = string.sub(cleaned,15,16)
local sec = string.sub(cleaned,18,19)
return os.time({year = year, month = month, day = day, hour = hour, min = min, sec = sec})
end
local tmp = {}
for i,v in pairs(dt.collection) do
local sec = enSecondes(v.exif_datetime_taken)
table.insert(tmp,{id = i, fn = v.filename, sec = sec, exp = math.floor(v.exif_exposure), hdr = v.is_hdr})
end
local hdr = {}
local securit = {}
for _,v in ipairs(tmp) do
local bcl = false
local suivant = false
for _,s in ipairs(securit) do
if v.id == s then
suivant = true
end
end
if not suivant and not v.hdr then
local t = v.sec + v.exp --calcul du temps pour être dans la rafale
for _,vc in ipairs(tmp) do
if v.id ~= vc.id then
if vc.sec == t or vc.sec == t + 1 then
if bcl then
table.insert(bcl, dt.collection[vc.id])
else
bcl = {dt.collection[v.id], dt.collection[vc.id]}
end
table.insert(securit, vc.id)
t = vc.sec + vc.exp
end
end
end --for ctrl
if bcl then
table.insert(hdr, bcl)
end -- if bcl
end -- suivant
end
local hdrexe = {}
local nom
for _,v in ipairs(hdr) do
local tst = true
for _,img in ipairs(v) do
nom = string.sub(img.filename,1,-5).."-hdr.dng"
for _,col in ipairs(dt.collection) do
if col.filename == nom then
tst = false
end
end
end
if tst then
table.insert(hdrexe, v)
end
end
for _,v in ipairs(hdrexe) do --création des fichiers regroupés hrd
dt.gui.selection(v)
local n = #dt.collection
dt.gui.action("lib/image/create HDR", "", "activate", 1,000)
while #dt.collection == n do --attente d'un nouveau fichier
dt.control.sleep(250)
end
end
if rejet then --rejetter les images de création de hrd
for _,v in ipairs(hdrexe) do
for _,img in ipairs(v) do
img.rating = -1
end
end
end
if comboboxStyle.selected ~= 1 then --si un style est sélectionné
for _,img in ipairs(dt.collection) do
if img.is_hdr then
dt.styles.apply(dt.styles[comboboxStyle.selected-1], img)
end
end
end
end
-- code de examples/moduleExample.lua
if dt.gui.current_view().id == "lighttable" then
install_module()
else
if not mE.event_registered then
dt.register_event(
"AutoHDR", "view-changed",
function(event, old_view, new_view)
if new_view.name == "lighttable" and old_view.name == "darkroom" then
install_module()
end
end
)
mE.event_registered = true
end
end
script_data.destroy = destroy
script_data.restart = restart
script_data.destroy_method = "hide"
script_data.show = restart
return script_data
RE: Automatisation de la création de fichiers HRD - jpg54 - 28-11-24
Merci du partage.
Un script Lua existe déjà : https://www.multimedia4linux.de/index.php/bildbearbeitung/darktable/darktable-plugin-enfuse-professional
RE: Automatisation de la création de fichiers HRD - al1pb - 28-11-24
Ce n'est pas la même chose !
Celui que vous proposez utilise un programme externe : Enfuse, et ne s'utilise que image par image, comme le bouton "Créer HDR" de darktable. Du même style il y a aussi un script pour HDRmerge ou Hugin ...
Ce que fait mon script est un regroupement automatique des photos, puis la création des HDR avec la fonction de darktable. Si la collection contient 30 prises de vue de 3 photos chacune, mon script va créer directement les 10 fichiers HDR sans sélectionner aucune photo !
Je l'ai créer pour gagner du temps et ne plus avoir de tâche répétitive à faire !
RE: Automatisation de la création de fichiers HRD - jpg54 - 28-11-24
Avec darktable, la création de HDR exige des prises alignées. Enfuse pro utilise effectivement un programme externe mais dans un script, il y a une partie qui aligne les prises ! Oui HDRmerge et Hugin le font aussi et juste pour un HDR !
RE: Automatisation de la création de fichiers HRD - al1pb - 28-11-24
(28-11-24, 14:07)jpg54 a écrit : Avec darktable, la création de HDR exige des prises alignées. Enfuse pro utilise effectivement un programme externe mais dans un script, il y a une partie qui aligne les prises ! Oui HDRmerge et Hugin le font aussi et juste pour un HDR !
Oui exactement, mais vu que je fais mes photos sur trépied, avec souvent des longues pauses, l'assemblage HRD de darktable me convient très bien, en plus, j'aime bien son rendu et il est assez rapide !
Mes photos sont visibles sur insta : https://www.instagram.com/urbex.meetoooo/ Je suis un fan d'urbex et de photo !
RE: Automatisation de la création de fichiers HRD - jpg54 - 28-11-24
Merci pour ce partage de ton travail en HDR. Je te propose ce pano sur 2 EV fait avec Hugin et post-traité avec darktable : https://www.flickr.com/photos/113336874@N07/30892267755/in/dateposted/
RE: Automatisation de la création de fichiers HRD - Cobert - 28-11-24
Merci du partage, superbe urbex.
|