Oh this is funny. I live in PAL land and I generally perform the 4% speed up + pitch adjustment to go from 23,976fps to 25fps, but you live in NTSC land so you gotta do the exact opposite: 4% slowdown + pitch adjustment to go from 25fps to 23,976fps.
Anyway, is the slowdown why you have a separate flow for video and audio? I'm asking cause you can perform both at the same time.
As for Harry's lines, they're absolutely correct, but note that when changing the speed, the sampling also changes so I would add ResampleAudio(48000) at the end for good measure. Sure one could argue that ffmpeg would resample it anyway, but do I look like a guy who trusts FFMpeg? Just kidding, just kidding hahaha
Anyway, please note that the current version of TimeStretch() is limited to a maximum of 16ch so if your source has more than that, it's going to fail. TimeStretch() leverages on a library called SoundTouch to perform those conversions and in the new upcoming version we're gonna have support to 32ch.
Anyway, back to the topic. In case you wanted to do everything in one single go, you can put a conditional on the input frame rate in FFAStrans to check that it's 25fps and then do the following with a custom Avisynth script:
Code: Select all
ResampleAudio(m_clip, 48000)
ConvertAudioToFloat()
AssumeFPS(23.976, 1, true)
TimeStretch(pitch=104)
ResampleAudio(48000)
ConvertAudioTo24bit()
m_clip=last
return m_clip
and then feed that to the H.264 + AAC encoder set to 23,976fps.
You can then have other conditionals for other frame rates if you wanna do something different or you can just pass anything that isn't 25fps directly to the encoding node and the filter_builder will take care of the conversion for you.
