2017-09-29 2 views
2

petite image doit être animée sur une vidéo de fond d'une manière simple:Comment utiliser l'édition de timeline avec une seule entrée d'image dans ffmpeg?

  1. position de changement - déplacer le long d'une ligne droite, pas d'assouplissement. À partir de la trame A, jusqu'à la trame B (c'est-à-dire les images 11 à 31);
  2. effectuer un zoom avant entre les images C et D (c'est-à-dire 45 et 55).

Filtres I intention d'utiliser:

filtre
  • overlay a paramètres x et y pour la position d'image; Le filtre
  • zoompan permet un zoom (précédé d'une échelle statique pour éviter les instabilités).

Mon filtergraph:

video.avi >----------------------------------->|-------| 
               |overlay|-> out.mp4 
image.png >-> scale >-> zoompan >-> zoompan >->|-------| 

Le problème est avec timeline editing. Les deux filtres prennent en charge l'option enable. J'ai pensé que je pourrais ajouter des instructions comme enable='between(n, 11, 31)' pour "placer" les animations au bon moment.

apparaît que l'entrée d'image n'a que deux valeurs: n zéro et 1. vérifié que par enroulement n avec print(n) dans zoompan filtre à la sortie pendant le rendu.

À l'intérieur overlay Le filtre, à l'opposé, n sort la séquence des nombres comme prévu.


Question: comment puis-je faire la seule entrée d'image « look » comme un flux vidéo normal filtres ffmpeg - de sorte que chaque trame générée a son numéro unique?


Un des derniers tests. Vidéo est HD720, l'image est 1000x200 .png transparent avec le logo occupant environ 150x50 zone au centre, ne doit pas être recadrée quand zoomé.

ffmpeg -i $FOOTAGE -loop 1 -i $IMAGE -filter_complex \ 
" 
[1:v] 
    scale=10*iw:-2 
    ,zoompan= 
    z='1' 
    :x='iw/2-(iw/zoom/2)+80' 
    :y='ih/2-(ih/zoom/2)' 
    :d=26 
    :s=500x100 
    :enable='lt(print(n),24)' 
    ,zoompan= 
    z='min(zoom+1.3/18,2.3)' 
    :x='iw/2-(iw/zoom/2)' 
    :y='ih/2-(ih/zoom/2)' 
    :d=20 
    :s=500x100 
    :enable='between(n,24,42)' 
[name]; 
[0:v][name] 
    overlay= 
    x=1005-250 
    :y=406-50 
    :enable='lte(n,173)' 
" -t 7 -y -hide_banner out.mp4 

Répondre

1

Appears, filtre zoompan ne fait pas édition de la chronologie de soutien. Dans le commit aa26258f daté du 27 août 2017, il a été mis à jour dans ffmpeg et il ne liste plus zoompan comme filtre activé pour la timeline. La solution consiste à écrire des expressions qui dépendent de in variable "Nombre de trames d'entrée" et du facteur de zoom souhaité.