creatubers / autosubsdavinci

Script para pasar voz a texto en líneas de tiempo de DaVinci Resolve
15 stars 2 forks source link

TypeError: 'NoneType' object is not callable #3

Open Zolrax opened 1 year ago

Zolrax commented 1 year ago

Traceback (most recent call last): File "C:\ProgramData\Blackmagic Design\DaVinci Resolve\Fusion\Scripts\Utility\crearsubtitulos.py", line 67, in project.delete_all_render_jobs() TypeError: 'NoneType' object is not callable

No soy el mas experto en Python, agradezco en exceso la ayuda. DaVinci es una herramienta Genial!!

Cillancapital commented 1 year ago

El Python "TypeError: 'NoneType' object is not callable" ocurre cuando intentamos llamar a None como si fuera una función.

Joelfersan commented 1 year ago

Estuve viendo el stream de creatubers y noté que en esa linea el tiene escrito esto y de esta forma: project.DeleteAllRenderJobs() Lo copié y me anduvo en Resolve, pero ahora tengo otro error: Traceback (most recent call last): File "C:\ProgramData\Blackmagic Design\DaVinci Resolve\Fusion\Scripts\Utility\crearsubtitulos.py", line 77, in <module> wait_for_rendering_completion(resolve) File "C:\ProgramData\Blackmagic Design\DaVinci Resolve\Fusion\Scripts\Utility\crearsubtitulos.py", line 46, in wait_for_rendering_completion while is_rendering_in_progress(resolve): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\ProgramData\Blackmagic Design\DaVinci Resolve\Fusion\Scripts\Utility\crearsubtitulos.py", line 42, in is_rendering_in_progress return project.is_rendering_in_progress() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: 'NoneType' object is not callable

Joelfersan commented 1 year ago

Con esto me funcionó bien!

import DaVinciResolveScript as dvr_script
import sys
import time
from os.path import join, expanduser
from os import system, remove

resolve = dvr_script.scriptapp("Resolve")

def add_timeline_to_render(project, timeline, presetName, targetDirectory, renderFormat, renderCodec):
    project.SetCurrentTimeline(timeline)
    project.LoadRenderPreset(presetName)

    if not project.SetCurrentRenderFormatAndCodec(renderFormat, renderCodec):
        return False

    project.SetRenderSettings(
        {"SelectAllFrames": 1, "TargetDir": targetDirectory, "ExportVideo": False, "ExportAudio": True,
         "CustomName": timeline_name_vosk})
    return project.AddRenderJob()

def render_all_timelines(resolve, timeline, presetName, targetDirectory, renderFormat, renderCodec):
    project_manager = resolve.GetProjectManager()
    project = project_manager.GetCurrentProject()
    if not project:
        return False

    resolve.OpenPage("Deliver")

    if not add_timeline_to_render(project, timeline, presetName, targetDirectory, renderFormat, renderCodec):
        return False
    return project.StartRendering()

def is_rendering_in_progress(resolve):
    project_manager = resolve.GetProjectManager()
    project = project_manager.GetCurrentProject()
    if not project:
        return False

    return project.IsRenderingInProgress()

def wait_for_rendering_completion(resolve):
    while is_rendering_in_progress(resolve):
        time.sleep(1)
    return

def delete_all_render_jobs(resolve):
    project_manager = resolve.GetProjectManager()
    project = project_manager.GetCurrentProject()
    project.DeleteAllRenderJobs()
    return

renderPresetName = "H.264 Master"
renderPath = expanduser('~')
renderFormat = "mp4"
renderCodec = "H264"

# Get currently open project

projectManager = resolve.GetProjectManager()
project = projectManager.GetCurrentProject()
project.DeleteAllRenderJobs()
timeline = project.GetCurrentTimeline()
timeline_name = timeline.GetName()
timeline_name = timeline_name.replace(" ", "")
timeline_name_vosk = timeline_name + 'subvosk'

if not render_all_timelines(resolve, timeline, renderPresetName, renderPath, renderFormat, renderCodec):
    print("Unable to set all timelines for rendering")
    sys.exit()

wait_for_rendering_completion(resolve)

delete_all_render_jobs(resolve)

print("Rendering is completed.")
video = join(renderPath, timeline_name_vosk + ".mp4")
subtitle = join(renderPath, timeline_name + ".srt")
s = f"vosk-transcriber -l es -i {video} -t srt -o {subtitle}"

system(s)

resolve.OpenPage("Edit")
media_pool = project.GetMediaPool()

media_pool.ImportMedia(subtitle)
remove(video)