1

ffmpeg community

I am new to ffmpeg and i am facing this error for more then 2 days. This ffmpeg command: !ffmpeg -i "{fromPath}" -i "{toPath}" -filter_complex "xfade=transition={chosenTransition}:duration={transitionDuration}:offset=-1.5" -c:v libx264 -crf 18 -preset veryfast "{outPath}" I run that previous command 3 times in row where output of the previous command is input that is getting produced as 15360 timebase video i guess.

is giving me this error: "First input link main timebase (1/15360) do not match the corresponding second input link xfade timebase (1/90000)"

So when i merge two of my videos the output is video with (1/15360) timebase. Original videos has (1/90000) timebase.

Pls help what i wana archive is basicly multiple videos inside a folder called "clips" merge together using a random transition from xfade/ffmpeg.

On colab i tried all this ways:

!rm -rf chunks
!mkdir chunks
time.sleep(1)
folderPath = '/content/clips'
videoOutput = '/content/test.mp4'
transitionDuration = 6

videoFiles = [f"{folderPath}/{f}" for f in os.listdir(folderPath) if f.endswith('.mp4')]
random.shuffle(videoFiles)
fromPath = videoFiles[0]
toPath = ''
outPath = ''
transitions = ['fade', 'wipeup', 'slidedown', 'circleclose', 'radial' , 'hrslice', 'hblur', 'smoothleft', 'smoothright']

for videoIndex, videoName in enumerate(videoFiles):
    if videoIndex == 0:
        continue
    toPath = videoName
    chosenTransition = random.choice(transitions)
    print('chosenTransition', chosenTransition)
    clipDuration = int((imageio.get_reader(fromPath)).get_meta_data()['duration']) - transitionDuration
    # !echo -i /content/clips/clip0.mp4 -i /content/clips/clip1.mp4 -filter_complex xfade=transition={chosenTransition}:duration=3:offset={clipDuration} dissolveVideo.mp4

    if videoIndex == len(videoFiles) - 1:
        outPath = videoOutput
    else:
        outPath = f'/content/chunks/chunk{videoIndex}.mp4'
    time.sleep(2)
    
    # !echo -i "{fromPath}" -i "{toPath}" -filter_complex "[0:v]xfade=transition={chosenTransition}:duration=3:offset={clipDuration},settb=1/19000[v0];[0:a][1:a]acrossfade=d=3[aout]" -map "[v0]" -map "[aout]" -c:v libx264 -crf 18 -preset ultrafast "{outPath}"
    !ffmpeg -i "{fromPath}" -i "{toPath}" -filter_complex "xfade=transition={chosenTransition}:duration={transitionDuration}:offset=-1.5,settb=1/15360" -c:v libx264 -crf 18 -preset veryfast "{outPath}"
    # !ffmpeg -i "{fromPath}" -i "{toPath}" -filter_complex "[0:v]settb=1/15360,setpts=PTS-STARTPTS[v0];[1:v]settb=1/15360,setpts=PTS-STARTPTS[v1];[v0][v1]xfade=transition={chosenTransition}:duration={transitionDuration}:offset=-1.5[vout]" -map "[vout]" -c:v libx264 -crf 18 -preset ultrafast "{outPath}"
    # !ffmpeg -i "{fromPath}" -i "{toPath}" -filter_complex "[0]settb=AVTB [0v]; [1]settb=AVTB [1v]; [0v] [1v]xfade=transition={chosenTransition}:duration={transitionDuration}:offset=1" -c:v libx264 -crf 18 -preset ultrafast "{outPath}"
    # !ffmpeg -i "{fromPath}" -i "{toPath}" -filter_complex "[0:v]xfade=transition={chosenTransition}:duration=3:offset={clipDuration},settb=1/15360[v0];[0:a][1:a]acrossfade=d=3[aout]" -map "[v0]" -map "[aout]" -c:v libx264 -crf 18 -preset ultrafast "{outPath}"
    # !ffmpeg -y -progress .progressinfo.dat -i "{fromPath}" -i "{toPath}" -filter_complex "[0:v]settb=AVTB,setpts=PTS-STARTPTS[v0];[1:v]settb=AVTB,setpts=PTS-STARTPTS[v1];[v0][v1]xfade=transition={chosenTransition}:duration={transitionDuration}:offset={clipDuration}[vout];[0:a]asettb=AVTB,asetpts=PTS-STARTPTS[a0];[1:a]asettb=AVTB,asetpts=PTS-STARTPTS[a1];[a0][a1]acrossfade=d=3[aout]" -map "[vout]" -map "[aout]" -c:v libx264 -crf 18 -preset ultrafast "{outPath}"

1 Answer 1

0

Firstly, there is nothing wrong with the timebase; ffmpeg can compare timebases, and generate new timebases.

Secondly, the problem is about different frame rates. if you use input frame rate settings

ffmpeg -r 30 -i "{fromPath}" -r 30 -i "{toPath}" ...

or use filter frame rate settings

ffmpeg -i "{fromPath}" -i "{toPath}" -filter_complex "[0:v]fps=30[v0];[1:v]fps=30[v1];[v0][v1]xfade=transition ...

or use same frame rate input streams, i.e. 30 frame per second, on your original command,

, ffmpeg will have no problems generating an output with fading transitions.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.