Eu queria a contagem total de quadros do vídeo para usar o comando ffprobe abaixo:
ffprobe -v error -select_streams v:0 -show_entries stream=nb_frames -of default=noprint_wrappers=1 100P.mp4
e eu recebo a saída abaixo
na saída acima eu recebo559 frames
então eu uso o mesmo vídeo para adicionar marca d'água nele e uso o comando abaixo:
ffmpeg -i 100P.mp4 -i mt.png -filter_complex "overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" -codec:a copy -preset ultrafast output.mp4
eu recebo saída como esta:
e na imagem acima, depois de adicionar marca d'água, recebo605 frames
então, minha pergunta é por que estou obtendo uma contagem de quadros diferente no ffmpeg e no ffprobe?
O FFmpeg, por padrão, define o modo de taxa de quadros constante para a saída MP4. Quando o fluxo de entrada for VFR, o ffmpeg duplicará ou descartará quadros para gerar um fluxo CFR. Nas estatísticas de saída, à direita de
frame=605
, você pode verdup=46
, que indica que o ffmpeg adicionou 46 quadros duplicados. A versão curta é que isso acontece quando dois quadros de entrada estão separados por mais de1/FPS
segundos, onde FPS representa a taxa de quadros de saída. A taxa de quadros de saída é definida como a taxa de quadros de entrada detectada (otbr
valor), se não for expressamente definida pelo usuário.Adicione
-vsync vfr
para evitar a duplicação de quadros.