extract/import wav

Este script es antiguo y está incluido en los Addons Kinoraw


Para descargarte los Addons de Kinoraw y obtener información de como se instalan y utilizan, visita:

https://github.com/kinoraw/addons_kinoraw


Script para extraer el audio de un clip de video generando un wav pcm.

La mecanica es la siguiente. Cuando pulsamos por primera vez para un clip, se creará un fichero wav al lado del cilp de video, y luego se importará en el timeline sincronizado y cortado del mismo modo que esté el clip de video. Si pulsamos y el audio wav ya ha sido generado, el operador importa el wav y lo alinea.

De este modo podemos editar el video despreocupandonos de los strips de audio, y recuperarlos mas tarde, siempre sincronizados.

Para que el script funcione es necesario que cargues el fichero functions.py en el editor de textos de blender, luego ejecuta el scritp. Esto es porque el script aprovecha funciones ya existentes de la libreria functions.py del addon anteriormente citado. Es temporal, mientras se incluye este script en el extra-sequence-tool.

Tambien necesitas que ffmpeg sea ejecutable desde cualquier terminal.

Estos scripts pretenden tener una funcion didáctica, en el sentido de representar una implementación sencilla de un flujo de trabajo basado en scripts. Basta observar que el script se limita a ejecutar un comando en el terminal, de modo que blender se convierte en un mero interfaz…

import bpy, os
from bpy.props import IntProperty

import functions

class ExtractWavOperator(bpy.types.Operator):
    """ Use ffmpeg to extract audio from video and import it synced"""
    bl_idname = "sequencer.extract_wav_operator"
    bl_label = "Extract Wav from movie strip Operator"

    @classmethod
    def poll(self, context):
        strip = functions.act_strip(context)
        scn = context.scene
        if scn and scn.sequence_editor and scn.sequence_editor.active_strip:
            return strip.type in ('MOVIE')
        else:
            return False

    def execute(self, context):

        for strip in context.selected_editable_sequences:

            # get filename
            if strip.type == "MOVIE":
                filename = bpy.path.abspath(strip.filepath)
                print("file", filename)
                fileoutput = bpy.path.abspath(strip.filepath).rpartition(".")[0]+".wav"
            # check for wav existing file
            if not os.path.isfile(fileoutput):
                #if not, extract the file
                extract_audio = "ffmpeg -i {} -acodec pcm_s16le -ac 2 {}".format(filename, fileoutput)
                print(extract_audio)
                os.system(extract_audio)
            else:
                print("ya existe el fichero")

            # import the file and trim in the same way the original
            bpy.ops.sequencer.sound_strip_add(filepath=fileoutput, frame_start=strip.frame_start, channel=strip.channel+1, replace_sel=True, overlap=False, cache=False)

            # Update scene 
            context.scene.update()

            newstrip = context.scene.sequence_editor.active_strip

             # deselect all other strips
            for i in context.selected_editable_sequences:
                if i.name != newstrip.name:
                    i.select=False

            # Update scene 
            context.scene.update()

            #Match the original clip's length 

            print(newstrip.name)
            functions.triminout(newstrip, 
                        strip.frame_start + strip.frame_offset_start, 
                        strip.frame_start + strip.frame_offset_start + \
                        strip.frame_final_duration)

        return {'FINISHED'}

proxy_qualities = [  ( "1", "25%", "" ), ( "2", "50%", "" ),
                    ( "3", "75%", "" ), ( "4", "100%", "" )]

class CreateWavPanel(bpy.types.Panel):
    """-_-_-"""
    bl_label = "Create wav"
    bl_idname = "OBJECT_PT_Create"
    bl_space_type = 'SEQUENCE_EDITOR'
    bl_region_type = 'UI'

    @classmethod
    def poll(self, context):
        strip = functions.act_strip(context)
        scn = context.scene
        if scn and scn.sequence_editor and scn.sequence_editor.active_strip:
            return strip.type in ('MOVIE')
        else:
            return False

    def draw(self, context):
        layout = self.layout
        layout.operator("sequencer.extract_wav_operator", text="Extract/Import Wav")

def register():
    bpy.utils.register_class(CreateWavPanel)
    bpy.utils.register_class(ExtractWavOperator)

def unregister():
    bpy.utils.unregister_class(ExtractWavOperator)
    bpy.utils.unregister_class(CreateWavPanel)

if __name__ == "__main__":
    register()

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>