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发布于 2022-01-05 12:44:52
据我所见,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第一次运行将产生音频并将其放入临时文件。然后,第二次运行处理视频并将音频复制到最后的视频文件中。一旦完成,就可以删除临时音频文件。
https://stackoverflow.com/questions/70585437
复制相似问题