2009-08-19 10 views
4

J'écris actuellement une application qui lit les images de la caméra, les modifie et les enregistre dans un fichier vidéo. Je prévois de le faire avec ffmpeg. Il y a rarement une documentation sur ffmpeg. Je ne peux pas trouver un moyen. Est-ce que quelqu'un sait comment le faire?Comment écrire des images dans un fichier vidéo?

je en ai besoin à faire sur unix, et en C ou C++. Est-ce que n'importe qui peut fournir des instructions?

Merci.

EDIT:

Désolé, je ne l'ai pas écrire clairement. Je veux que certaines API de développeur écrivent des images dans un fichier vidéo. J'ouvre le flux de caméra, j'obtiens chaque image, puis je les sauvegarde dans un fichier vidéo avec ces API disponibles dans les API publiques de ffmpeg. Donc, en utilisant l'outil de ligne de commande ne m'aide pas vraiment. Et j'ai vu output_example.c sous le dossier ffmpeg src. C'est génial que je puisse copier certaines parties du code directement sans changement. Et je cherche toujours un moyen plus facile.

Aussi, je pense à mon portage application pour iPhone, autant que je sache, ne ffmpeg a été porté sur iPhone. GStreamer est basé sur glib, et tout est GNU. Je ne suis pas sûr si je peux le faire fonctionner sur iPhone. Donc, ffmpeg est toujours le meilleur choix pour l'instant.

Tous les commentaires sont appréciés.

Répondre

4

Cela pourrait vous aider à démarrer - la documentation est disponible, mais les nouvelles fonctionnalités ont tendance à être documentées dans les pages de manuel de FFmpeg.

Les trames doivent être numérotées séquentiellement.

ffmpeg -f image2 -r 25 -i frame_%d.jpg -vcodec libx264 -vpre hq -crf 22 video.mp4 
  • -f définit le format
  • -r définit le taux de trame
  • -i définit le fichier d'entrée/s ... %d Précise fichiers numérotés .. ajouter des 0 spécifier padding
  • -vcodec sélectionne le codec vidéo
  • -vpre spécifie l'utilisation d'une prés et appelé hq
  • -crf spécifie une méthode de contrôle de la vitesse, utilisé pour définir la façon dont le flux x264 est encodées
  • video.mp4 est le fichier de sortie
0

Si d'autres solutions que ffmpeg sont possibles pour vous, vous voudrez peut-être regarder GStreamer. Je pense que c'est peut-être la bonne chose à faire pour votre cas, et il y a beaucoup de documentation là-bas.

0

Vous pouvez faire ce que vous avez besoin sans utiliser une bibliothèque, comme dans unix vous pouvez diriger les données RGBA dans un programme, vous pouvez donc faire:

Dans votre programme:

char myimage[640*480*4]; 
// read data into myimage 
fputs(myimage,1,640*480*4,stdout); 

Et dans un script qui exécute votre programme:

./myprogram | \ 
mencoder /dev/stdin -demuxer rawvideo -rawvideo w=640:h=480:fps=30:format=rgba \ 
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=9000000 \ 
-oac copy -o output.avi 

Je crois que vous pouvez également utiliser ffmpeg cette façon, ou x264.Vous pouvez également démarrer l'encodeur à partir de votre programme et écrire dans un tube (en simplifiant tout le processus si vous utilisiez une bibliothèque).

Bien que pas tout à fait ce que vous voulez, et ne convient pas pour le développement de l'iPhone, il a l'avantage qu'Unix utilisera automatiquement un deuxième processeur pour l'encodage.