Pelo que vejo, seus vídeos têm taxas de quadros diferentes, 16fps e 12fps. Para concatenar vídeos e usar a concat demuxer , a única coisa que pode ser diferente para os vídeos concatenarem pode ser a taxa de bits, tudo o mais, resolução, fps, codec, formato de cor ... devem ser iguais .
Veja a seção Concatenação wiki do FFmpeg
Soluções possíveis
- Equalize todos os parâmetros possíveis de seus vídeos (fps, tamanho, ...)
- Componha seus vídeos no editor de vídeo da GUI, como kdenlive
- O FFMpeg é bastante limitado para tarefas de edição, como descolorações e textos. Se você realmente quiser criar / compor vídeos programaticamente, pessoalmente, eu usaria um servidor de quadros como o avisynth , que fornece tudo o que você precisa por meio de < Filtros Internos (
ImageSource
,FadeIn
,Subtitle
, ...). No entanto, só está disponível para o Windows. Existe uma porta Linux chamada avxsynth , embora eu nunca tenha tentado isso. O uso de um servidor de quadros oferece a possibilidade de visualizar o final resultar em um media player de sua escolha, super fácil mudança de parâmetros e codificação do resultado final de uma só vez. - Use o filtro ffmpegs concat : link . Eu tive sucesso misturado com esse.
Exemplo de script avisynth
Eu fiz um simples script avisynth sunspot.avs
, que poderia ser um ponto de partida para você. Eu tentei isso no windows, mas em teoria, ele deveria funcionar com o avxsynth também ...
# Set the desired parameters for the output video
out_fps = 25
out_width = 800
out_height = 600
# Make a title clip
blank = BlankClip(length=out_fps * 3, width=out_width, height=out_height, fps=out_fps, color=$000000).KillAudio()
blank_subtitle = blank.Subtitle("Your Title", align=5, size=60, text_color=$ffff00)
# Load image sequence, assume 16 input fps 16, convert to output video's 25fps
# NOTE: since the input frame rates differs from the output frame rate, there will be interpolation going on...
sunspot = ImageReader("Sun_20150214_%02d.png", 1, 62, 16).ChangeFPS(out_fps).ConvertToRGB32()
# Crop & Resize, pay attention not to distort the images to the ratios
sunspot_cropped = sunspot.Crop(8,2,-9,-4).LanczosResize(out_width, out_height)
# Concatenate the clips (which now have the same fps + format + color space)
blank_subtitle.FadeIn(out_fps * 1) ++ sunspot_cropped
Você pode visualizar o resultado com ffplay sunspot.avs
e, se estiver satisfeito, convertê-lo em um arquivo mp4, por exemplo:
ffmpeg -i sunspot.avs -c:v libx264 -crf 19 -preset:v slower -pix_fmt yuv420p -c:a libfdk_aac sunspot.mp4