# Compiler un programme avec ffmpeg

**URL:** <https://www.debian-fr.org/t/compiler-un-programme-avec-ffmpeg/18839>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 7:14 UTC](https://www.debian-fr.org/t/compiler-un-programme-avec-ffmpeg/18839 "2016-02-20T19:14:14Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![antalgeek1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/a6a055/32.png) [@antalgeek1](https://www.debian-fr.org/u/antalgeek1)\
**Post date:** [Février 20, 2016, 7:14 UTC](https://www.debian-fr.org/t/compiler-un-programme-avec-ffmpeg/18839/1 "2016-02-20T19:14:14Z")

</div>

Je suis très étonné de ce qui m’arrive sous Lenny…

J’ai voulu compiler un programme faisant appel à libavcodec, libavformat…et d’autres bouts de ffmpeg sous Lenny.  
Je me suis retrouvé avec des erreurs de compilation et pratiquement voilà ce que j’ai du faire :

> [@](#):
>
> Dans /usr/include/ffmpeg :
> 
> - creation de liens symboliques des headers des différents sous répertoires dans la racine
> - modification de tous les headers de /usr/include/ffmpeg pour retablir les bons chemins  
> Creation de /usr/include/postproc/ -\> lien symbolique vers /usr/include/ffmpeg/libpostproc/postprocess.h

Tous les chemins vers les headers et dans les headers entre eux étaient cassés.

Pour être sur de mon coup j’ai pris le paquet source de ffmpeg2theora qui, par défaut sur une lenny avec toutes les dépendances de construction, NE COMPILE PAS.  
Après la modification énoncée plus : ça compile

J’avais déjà vu un fil sur à peu près le même sujet mais là je me permet d’en rajouter un parce que je suis franchement sur le cul.  
Je ne m’explique pas comment un truc comme ça a pu survenir.  
Je ne suis pas encore allé faire un tour sur la liste de diffusion debian mais ça ne va pas tarder.

Tiens, au passage si quelqu’un est au courant : la fonction img\_convert n’est plus disponible dans ffmpeg, elle serait remplacée par sws\_scale de libswscale. C’est sûr ça ?

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 7:14 UTC](https://www.debian-fr.org/t/compiler-un-programme-avec-ffmpeg/18839/2 "2016-02-20T19:14:16Z")

</div>

mélange [ftp.debian.fr](http://ftp.debian.fr) et multimedia non?

---

<div class="post-metadata">

**Author:** ![antalgeek1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/a6a055/32.png) [@antalgeek1](https://www.debian-fr.org/u/antalgeek1)\
**Post date:** [Février 20, 2016, 7:14 UTC](https://www.debian-fr.org/t/compiler-un-programme-avec-ffmpeg/18839/3 "2016-02-20T19:14:18Z")

</div>

> [@](#):
>
> mélange [ftp.debian.fr](http://ftp.debian.fr) et multimedia non?

en effet

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 7:14 UTC](https://www.debian-fr.org/t/compiler-un-programme-avec-ffmpeg/18839/4 "2016-02-20T19:14:19Z")

</div>

ben voilà, que donne  
apt-cache policy libavcodec0d ffmpeg libavcodec51 libavcodec-dev  
par exemple

---

<div class="post-metadata">

**Author:** ![antalgeek1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/a6a055/32.png) [@antalgeek1](https://www.debian-fr.org/u/antalgeek1)\
**Post date:** [Février 20, 2016, 7:14 UTC](https://www.debian-fr.org/t/compiler-un-programme-avec-ffmpeg/18839/5 "2016-02-20T19:14:19Z")

</div>

je ne sais pas car entre temps j’ai viré les dépôts multimedias et réinstallé ffmpeg, libavcodec …  
le répertoire /usr/include/ffmpeg se retrouve avec une tête qui me convient…  
je crois que je vais me faire crier 😐

bon maintenant je peux voir si mon correctif de bug sur opencv passe à la compile

---

<div class="post-metadata">

**Author:** ![antalgeek1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/a6a055/32.png) [@antalgeek1](https://www.debian-fr.org/u/antalgeek1)\
**Post date:** [Février 20, 2016, 7:14 UTC](https://www.debian-fr.org/t/compiler-un-programme-avec-ffmpeg/18839/6 "2016-02-20T19:14:42Z")

</div>

Avant de clore ce fil honteux une dernière question, au cas où quelqu’un serait rompu à la prog avec libavcodec, ce qui n’est pas mon cas vu que je m’y suis mis quand j’ai commencé ce fil.

J’avais un vieux bug dans la version d’opencv que je maintiens (1.1.0). Il se trouvait dans une fonction qui permet de générer un “video writter” avec libavcodec/libavformat.

On déclare un AVCodecTag sous la forme :

```auto
const AVCodecTag codec_bmp_tags[] = {
    { CODEC_ID_H264, MKTAG('H', '2', '6', '4') },
    { CODEC_ID_H264, MKTAG('h', '2', '6', '4') },
    { CODEC_ID_H264, MKTAG('X', '2', '6', '4') },
    { CODEC_ID_H264, MKTAG('x', '2', '6', '4') },
    { CODEC_ID_H264, MKTAG('a', 'v', 'c', '1') },
    { CODEC_ID_H264, MKTAG('V', 'S', 'S', 'H') },

    { CODEC_ID_H263, MKTAG('H', '2', '6', '3') },
    { CODEC_ID_H263P, MKTAG('H', '2', '6', '3') },
    { CODEC_ID_H263I, MKTAG('I', '2', '6', '3') }, /* intel h263 */
    { CODEC_ID_H261, MKTAG('H', '2', '6', '1') },

    /* added based on MPlayer */
    { CODEC_ID_H263P, MKTAG('U', '2', '6', '3') },
    { CODEC_ID_H263P, MKTAG('v', 'i', 'v', '1') },

    { CODEC_ID_MPEG4, MKTAG('F', 'M', 'P', '4') },
    { CODEC_ID_MPEG4, MKTAG('D', 'I', 'V', 'X') },
    { CODEC_ID_MPEG4, MKTAG('D', 'X', '5', '0') },
    { CODEC_ID_MPEG4, MKTAG('X', 'V', 'I', 'D') },
    { CODEC_ID_MPEG4, MKTAG('M', 'P', '4', 'S') },
    { CODEC_ID_MPEG4, MKTAG('M', '4', 'S', '2') },
    { CODEC_ID_THEORA, MKTAG('t', 'h', 'e', 'o') },
    ...
    { CODEC_ID_NONE, 0 },
};
```

Et ensuite on recherche le CodecID (du type CODEC\_ID\_MPEG4) en fonction de son fourcc (du type MKTAG(‘M’, ‘P’, ‘4’, ‘S’)) en utilisant un appel à av\_codec\_get\_id sous la forme :

```auto
av_codec_get_id ( (AVCodecTag **)&codec_bmp_tags, fourcc )
```

Or cet appel ressort en segfault.

Pour moi c’est logique vu qu’on passe l’adresse de codec\_bmp\_tags à une procédure qui attend un pointeur vers un pointeur.  
En attendant je me suis fait une routine qui me permet de remplacer av\_codec\_get\_id car je ne veux pas taper dans la déclaration de codec\_bmp\_tags qui sert et fonctionne bien pour d’autres versions de ffmpeg-debian.

Mais en attendant de trouver mieux je suis ouvert à d’autres suggestions.
