Ajouter une superposition d'image devant la vidéo à l'aide de ffmpeg


31

J'ai beaucoup de vidéos et j'ai besoin de mettre une image devant elles pendant environ 5 secondes, mais l'ajouter manuellement et la rendre à chaque fois prendrait très longtemps, donc je demande s'il est possible de le faire via ffmpeg et si vous pourrait, s'il vous plaît, m'aider car je n'ai aucune expérience avec ffmpeg. J'ai déjà trouvé quelques commandes mais aucune n'a fonctionné. Celui-ci par exemple.

ffmpeg -itsoffset 5 -i in.mp4 -r 25 -loop 1 -i intro.png -filter_complex "[1:v] fade=out:125:25:alpha=1 [intro]; [0:v][intro] overlay [v]" -map "[v]" -map 0:a -acodec copy out.mp4

1
Avez-vous simplement copié cette commande ou écrit cela selon vos besoins? Je demande parce que cette commande implique des choses comme un fondu sortant et toutes sortes d'autres choses non couvertes par votre question. Avez-vous juste besoin de superposer une image ou avez-vous besoin de plus que cela?
PTS

Je l'ai copié de quelque part, tout ce dont j'ai besoin est simplement de mettre l'image devant la vidéo.
Azthy

Réponses:


44

Vous pouvez faire une superposition d'image simple en utilisant la syntaxe suivante:

ffmpeg -i input.mp4 -i image.png \
-filter_complex "[0:v][1:v] overlay=25:25:enable='between(t,0,20)'" \
-pix_fmt yuv420p -c:a copy \
output.mp4

overlay=25:25 signifie que nous voulons positionner l'image à 25 pixels vers la droite et à 25 pixels vers le bas, provenant du coin supérieur gauche (0: 0).

enable='between(t,0,20)' signifie que nous voulons que l'image s'affiche entre le deuxième 0 et le 20.

[0:v][1:v]signifie que nous voulons que le premier fichier vidéo que nous importons avec -i, dans notre cas input.mp4 ou comment ffmpeg le voit, le fichier d'entrée vidéo numéro 0, soit sous le fichier d'entrée vidéo 1, dans notre cas image.png. :vsignifie simplement que nous voulons la vidéo 0 et la vidéo 1. [0:a]signifierait que nous voulons la première piste audio importée. Qui proviendrait également de input.mp4 mais pointerait vers la piste audio au lieu de la piste vidéo dans le fichier mp4.

Si vous souhaitez une certaine qualité d'image / certains paramètres et non les paramètres choisis par ffmpeg, ajoutez l'image et / ou les options d'encodage audio que vous souhaitez utiliser. L'encodeur vidéo par défaut sera x264. Consultez le guide d'encodage H.264 pour les paramètres possibles.

Le -acodec copy/ -c:a copyque vous avez dans votre commande fe réutiliserait simplement l'audio du fichier source. Bien que vous ne puissiez pas faire cela avec la vidéo bien sûr (dans ce cas), cela doit être transcodé car nous créons une nouvelle source vidéo.

Si vous souhaitez transcoder l'audio, supprimez la -c:a copypartie. Vous devrez peut-être spécifier explicitement un encodeur, par exemple -c:a aac -strict experimental. Voir le guide d'encodage AAC pour plus d'informations.


L'itération suivante de la commande ci-dessus a fonctionné pour moi sur Android, car l'original donne et l'erreur comme aac est une fonctionnalité expérimentale: ffmpeg -i input.mp4 strict -2 -i image.png -filter_complex [0: v] [1: v] overlay = 25: 25: enable = 'between (t, 0,20)' output.mp4
muneikh

existe-t-il quand même de se positionner en bas sans connaître la hauteur? ou à l'extrême droite sans connaître la largeur?
chovy

bien sûr, il suffit d'analyser la vidéo avec ffprobe et d'extraire les dimensions de la vidéo de la sortie. Peut-être qu'il y a aussi une option intégrée dans ffmpeg mais je ne suis pas au courant.
PTS

3
Votre commande remplace un fragment du fichier vidéo d'origine, mais un utilisateur peut vouloir ajouter (augmentant ainsi la longueur de la vidéo) une image avant et / ou après la vidéo. S'il vous plaît aider avec cela
porton

1
@laurent qui dépend de votre fichier source et / ou de votre sortie. pix_fmt signifie format de pixel. Il existe de nombreux formats de pixels différents disponibles pour différents codecs, en spécifiant un pour vous assurer de ne pas vous retrouver avec quelque chose qui ne fonctionne pas pour vous. yuv420p est le format de pixel le plus pris en charge en ce qui concerne h264, mais il existe également yuv422p et yuv444p par exemple.
PTS
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.