2012-02-06 5 views
12

J'essaye de superposer par programme des images ou une vidéo sur le dessus d'une autre vidéo en utilisant FFmpeg. Il semble que AVFilter puisse le faire. Cependant, je n'ai trouvé aucun exemple d'utilisation de AVFilter en dehors de doc/examples/filtering.c, ce qui m'aide mais pas vraiment. Je peux déjà décoder et encoder une vidéo, j'ai juste besoin d'apprendre comment filtrer les images décodées et ajouter un filigrane.FFmpeg AVFilter overlay/watermark par programmation

Existe-t-il des exemples d'utilisation de libavfilter par programmation? Y at-il des exemples d'utilisation des filtres de superposition ou de films?

+0

L'exemple de code peut être facilement modifié pour appliquer un filtre arbitraire. Quel est le problème? Pour des exemples d'utilisation de filtres de superposition et de films, voir [Comment filigraner une vidéo en utilisant FFmpeg] (http://www.idude.net/index.php/how-to-watermark-a-video-using-ffmpeg). –

+1

Le problème avec l'exemple est qu'il est surchargé (2 filtres, graphique de filtre, etc.). Pour quelqu'un qui est nouveau et veut savoir comment appliquer un AVFilter, c'est déroutant, car il ne précise pas ce qui est absolument nécessaire pour commencer. –

Répondre

7

La commande:

ffmpeg –i inputvideo.avi -vf "movie=watermarklogo.png [watermark]; [in][watermark] overlay=10:10 [out]" outputvideo.flv 

produit la vidéo avec l'image "watermarklogo.png" dans le coin en haut à gauche. Appeler cette commande d'un autre programme devrait être assez simple.

Briser ce bas peu à peu pour le comprendre:

ffmpeg est le programme que vous allez utiliser pour ajouter le filigrane.

-i est utilisé pour spécifier les fichiers d'entrée.

inputvideo.avi est votre fichier d'entrée spécifié par -i.

-vf est utilisé pour spécifier le filtre vidéo. Dans ce cas, c'est tout dans les citations.

movie=watermarklogo.png va charger le fichier que vous voulez utiliser comme filigrane. Ici, nous chargeons le fichier en tant que source vidéo (en utilisant movie), que le fichier soit ou non une vidéo. Dans ce cas, c'est une image.

[watermark] identifie le fichier que vous venez de charger. Cette étiquette sera utilisée dans le reste du code.

[in] et [out] se réfèrent au flux d'entrée et au flux de sortie de la vidéo.

overlay est utilisé juste après l'étiquette [watermark] afin qu'il s'y réfère. Dans ce cas simple, nous plaçons le overlay au 10:10. Cela signifie que le filigrane sera décalé de 10 pixels par rapport au haut et à gauche. Si vous vouliez en bas à droite vous utiliseriez overlay=main_w-overlay_w-10:main_h-overlay_h-10main_w est la largeur du flux d'entrée, overlay_h est la hauteur du fichier de superposition, et ainsi de suite.

Enfin, outputvideo.flv est clairement le fichier que vous souhaitez enregistrer les résultats.

Informations complémentaires:

Je trouve ces informations par the site Dmitry had mentioned dans les commentaires. Alex a mentionné que cette page pourrait être trop complexe pour quelqu'un qui est nouveau dans de telles choses.Cependant, je n'ai jamais rien fait de tel et en quelques minutes j'ai eu les résultats que je crois être recherchés.

Note: J'ai eu un moment de trouble quand je recevais l'erreur:

error while opening encoder for output stream #0.1 

Si vous avez le même problème que vous avez probablement besoin de régler manuellement la fréquence d'échantillonnage en utilisant le paramètre -Ar (par exemple -ar 22050).

+0

Pouvez-vous définir la synchronisation du filigrane? disons que je veux que le filigrane commence à 00:00 et disparaisse @ 01:00, est-ce possible? – rroche

+0

@rroche Découvrez [cet article] (http://stackoverflow.com/questions/9160771/ffmpeg-watermark-first-30-second). La réponse de Felix est probablement la plus simple, mais la réponse de Dmitry (le même Dmitry d'en haut) est un peu plus soignée et permet une disparition progressive du filigrane. – golmschenk

+4

La question concerne l'utilisation de la bibliothèque AVFilter, sans appeler le binaire FFMPEG. – Erik