Comment ajouter mon logo pendant les 30 premières secondes dans une vidéo avec ffmpeg?

9

J'essaie d'ajouter mon logo pendant les 30 premières secondes dans une vidéo avec ffmpeg. J'ai une vidéo appelée d1.mp4et un logo appelé logo.png.

Lorsque la vidéo démarre, le filigrane doit se trouver dans le coin supérieur gauche ou supérieur droit de la vidéo et disparaître après 30 secondes.

Pouvez-vous me montrer comment l'ajouter?

iwocan
la source
mon nom de vidéo est d1.mp4 et mon nom de logo est logo.png, merci ..
iwocan
Alors qu'est-ce que cela ffmpeg -i d1.mp4 -i logo.pngmontre? Veuillez simplement entrer cette commande et nous montrer quelle est la sortie. Lorsque vous posez des questions ffmpeg, vous devez toujours inclure autant de détails que possible sur le matériel vidéo / audio que vous avez, ce que vous avez déjà essayé et la sortie en ligne de commande complète de tout ce que vous avez essayé.
slhck
voici ce que j'obtiens sur mon écran cmd. pastebin.com/bPCnhXh2
iwocan

Réponses:

13
ffmpeg -i in.mp4 -framerate 30000/1001 -loop 1 -i logo.png -filter_complex
  "[1:v] fade=out:st=30:d=1:alpha=1 [ov]; [0:v][ov] overlay=10:10 [v]" -map "[v]"
  -map 0:a -c:v libx264 -c:a copy -shortest out.mp4

Cela suppose que le logo est une seule image fixe avec un canal alpha et que vous souhaitez la superposer sur une vidéo avec une fréquence d'images de 30000/1001 (taux NTSC). Modifiez le -frameratepour faire correspondre votre vidéo d'entrée si elle est différente. Si votre logo est une vidéo, omettez-la -framerate 30000/1001 -loop 1. Si le logo n'a pas de canal alpha, ajoutez-en un en l'insérant par exemple format=yuva420p,juste avant fade.

Cela affichera le logo à la position x, y 10,10 pendant 30 secondes suivi d'un fondu sortant d'une seconde.

mark4o
la source
1
Très intéressant! Pourriez-vous expliquer pourquoi le framerateet loopsont nécessaires dans ce cas et non pour une simple superposition sans filtre de fondu?
Rajib
Merci beaucoup mark40 mais quand j'écris ce code, l'écran cmd ne s'arrête pas .. Je ne sais pas pourquoi mais cela n'a pas fonctionné pour moi ..
iwocan
Salut LordNeckbeard, voici une capture d'écran .. u1312.hizliresim.com/1j/4/v5ny8.png ..
iwocan
1
@iwocan Je pense que vous pouvez copier des éléments à partir de l'invite Windows. J'ai supposé que vous chercheriez comment le faire, mais regardez Copier dans le presse-papiers à partir de l'invite de commandes Windows .
llogan
4
@Rajib: La raison de -framerateet -looppour une image fixe est que le fondu sortant fonctionne. S'il n'y a qu'une seule image, elle n'a aucun moyen de disparaître sur un intervalle de 1 seconde. Idéalement, la fréquence d'images doit être identique à celle de la vidéo afin que le fondu soit le plus fluide possible.
mark4o
19

Utilisation d' overlayun filtre vidéo pour ajouter un logo à une vidéo:

entrez la description de l'image ici

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay" \
-codec:a copy out.mp4

Pour comprendre cette commande, vous devez savoir ce qu'est un spécificateur de flux et lire l' Introduction au filtrage FFmpeg vous aidera. [0:v]fait référence au ou aux flux vidéo de la première entrée ( video.mp4) et se [1:v]réfère au flux vidéo de la deuxième entrée ( logo.mp4). C'est ainsi que vous pouvez savoir overlayquelles entrées utiliser. Vous pouvez omettre [0:v][1:v], et overlayfonctionnera toujours, mais il est recommandé d'être explicite et de ne pas s'appuyer sur des valeurs par défaut éventuellement inconnues.

Par défaut, le logo sera placé en haut à gauche.

L'utilisation -codec:a copypermet de copier en continu l'audio. Cela re-multiplexe simplement l'audio au lieu de le ré-encoder. Considérez-le comme un "copier-coller" de l'audio.

Déplacer le logo

Cet exemple déplace le logo de 10 pixels vers la droite et de 10 pixels vers le bas: entrez la description de l'image ici

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay=10:10" \
-codec:a copy out.mp4

Cet exemple déplace le logo de 10 pixels du côté droit et de 10 pixels vers le bas:

entrez la description de l'image ici

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=main_w-overlay_w-10:10" -codec:a copy out.mp4

main_wfait référence à la largeur de l'entrée "principale" (l'arrière-plan ou [0:v]), et overlay_wfait référence à la largeur de l'entrée "superposition" (le logo ou [1:v]). Ainsi, dans l'exemple, cela peut être traduit en overlay=320-90-10:10ou overlay=220:10.

Synchronisation de la superposition

Certains filtres peuvent gérer l' édition de la chronologie, ce qui vous permet d'utiliser des expressions arithmétiques pour déterminer quand un filtre doit être appliqué. Reportez-vous à ffmpeg -filterspour voir quels filtres prennent en charge l'édition de la chronologie.

Cet exemple montrera le logo jusqu'à 30 secondes:

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=10:10:enable=between(t\,0\,30)" -codec:a copy out.mp4

Si vous souhaitez estomper le logo, reportez-vous à la réponse de mark4o .

llogan
la source
Merci beaucoup! :) Je m'excuse encore pour mon anglais cassé. Cette commande fonctionne parfaitement! :)
iwocan
enfin quelque chose de compréhensible! que dois-je utiliser pour le faire apparaître au début qu'à la fin?
cikatomo
Je voulais apparaître au début ET à la fin? Deux fois. j'ai essayé enable = between (t \, 0 \, 30): enable = between (t \, 50 \, 60), mais la seule dernière chronologie est en vigueur
cikatomo
@cikatomo enable=not(between'(t,30,50)'). Cela montrera la superposition à tout moment, mais pas à une durée de 30 à 60 secondes.
llogan
Parfait, merci. Malgré votre avertissement de ne pas utiliser overlaytout seul, je l'ai fait, car la position par défaut en haut à gauche était ce que je voulais. (Donc à la fin mes drapeaux étaient tout simplement filter_complex overlay.)
felwithe