es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo enviar audio a FFMPEG con Vapoursynth?

Vapoursynth agregó oficialmente soporte para audio en septiembre y lo tuvo en pruebas antes de eso. Ahora que admite audio, estoy buscando convertir algunos proyectos antiguos de Avisynth a Vapoursynth. Parte de esto se debe a mi familiaridad con Python, y parte de esto es que es mucho más fácil configurar Vapoursynth con QTGMC en mi distribución de Linux elegida.

De todos modos, mi problema es que cuando ejecuto el script y redirijo el resultado a FFMPEG, FFMPEG solo obtiene la secuencia de video y no la secuencia de audio. Desde el punto de vista del script, parece que estoy haciendo todo correctamente, pero hay tan poca documentación sobre cómo trabajar con audio que no puedo estar seguro. Tiendo a pensar que hay un problema con mi comando vspipe, pero no estoy seguro de qué se debe hacer para decir “Hay audio en esta secuencia”.

Aquí está el script seguido del comando vspipe/ffmpeg:

import vapoursynth as vs
import havsfunc as haf
import math
core = vs.core

# Supongamos una velocidad de cuadro estándar NTSC y 48kHz como predeterminado

def framesToSamples(frameNum, framerate=29.97, samplerate=48000):
    return math.floor((samplerate/framerate)*frameNum)

video = core.ffms2.Source(r'Ruta a Home Movies 1 - 1989.avi', format=vs.YUV422P8)
audio = core.bas.Source(r'Ruta a Home Movies 1 - 1989.avi', track=1)

video = video[71:217640]
audio = audio[framesToSamples(71):framesToSamples(217640)]

video = core.cnr2.Cnr2(video,"ooo",8,16,191,100,255,32,255,False) #VHS
video = haf.QTGMC(video, Preset="Very Slow", EZDenoise=2.0, TrueMotion=True, ChromaMotion=True, TFF=False)
video = core.std.Crop(video,4,0,4,6)
video = core.resize.Lanczos(video, 352, 240, format=vs.YUV422P10)

video.set_output(0)
audio.set_output(1)

Y el comando para convertir:

vspipe -c y4m "Ruta a Home Movies 1 - 1989.vpy" - | ffmpeg -i pipe: -c:v libx265 -preset fast -crf 24 -c:a libopus -b:a 96k -ac 1 Test.mkv
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema puede deberse a la forma en que se configura el audio en el guion. Si bien el guion utiliza correctamente core.bas.Source para obtener el audio, no especifica el formato ni el diseño del audio.

    Intente agregar las propiedades del audio al obtenerlo:

    audio = core.bas.Source(r'Home Movies 1 - 1989.avi', track=1, format=vs.AudioFormat(48000, 2, 'f32le'))
    

    Esto especifica que el formato de audio será de 48000 Hz, 2 canales (estéreo), con una codificación de punto flotante de 32 bits de extremo inferior. Ajuste las propiedades del formato de audio según sea necesario según el audio en el archivo de entrada.

    Además, en el comando vspipe, incluya el códec de audio con -c:a y especifique los canales de audio con -ac:

    vspipe -c y4m "Home Movies 1 - 1989.vpy" - | ffmpeg -i pipe: -c:v libx265 -preset fast -crf 24 -c:a libopus -b:a 96k -ac 2 Test.mkv
    

    Este ejemplo especifica el códec de audio como libopus y establece el número de canales de audio en 2 (para audio estéreo). Ajuste la configuración del códec y los canales de audio según sea necesario según sus necesidades.

Comments are closed.