0

Vapoursynth 在 9 月正式添加了音频支持,并在此之前进行了测试。由于它现在支持音频,我希望将一些旧的 Avisynth 项目转换为 Vapoursynth。部分原因是我对 Python 的熟悉,部分原因是在我选择的 linux 发行版中使用 QTGMC 设置 Vapoursynth 要容易得多。

无论如何,我的问题是当我运行脚本并将结果传递给 FFMPEG 时,FFMPEG 只获取视频流而不是音频流。从脚本的角度来看,看起来我应该做的一切都是正确的,但是关于处理音频的文档太少了,我无法确定。我倾向于我的 vspipe 命令的问题,但我不确定需要做什么才能说“此流中有音频”

这是 vspipe/ffmpeg 命令后跟的脚本:

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

# Assume NTSC standard framerate and 48kHz as default
def framesToSamples(frameNum, framerate=29.97, samplerate=48000):
    return math.floor((samplerate/framerate)*frameNum)  

video = core.ffms2.Source(r'Home Movies 1 - 1989.avi', format=vs.YUV422P8)
audio = core.bas.Source(r'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)

以及要转换的命令:

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 1 Test.mkv
4

1 回答 1

0

据我所知,vspipe 可以选择一个输出流,但不能同时输出两个。结果是你最终不得不做这样的事情:

vspipe -o 1 -c wav "Home Movies 1 - 1989.vpy" - | ffmpeg -i pipe: -c:a libopus -b:a 96k -ac 1 audio.opus
vspipe -o 0 -c y4m "Home Movies 1 - 1989.vpy" - | ffmpeg -i pipe: -i audio.opus -c:v libx265 -preset ultrafast -crf 24 -c:a copy "Home Movies 1 - 1989.mkv"
rm audio.opus

第一次运行会生成音频并将其放入临时文件中。然后第二次运行处理视频并将音频复制到最终的视频文件中。完成后,可以删除临时音频文件。

于 2022-01-05T12:44:52.790 回答