PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : neuste ffmpeg kompilieren



EgLe
06.07.08, 20:58
Hallo,

ich wollte mir nun die neuste ffmpeg kompilieren.
Habe mir diese mittels folgenden Befehl gezogen:

svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg

So beim ./configure habe ich foögende Optionen gewählt, hoffe das dies soweit richtig
und auch ausreichend ist:


egle@amd64-3800:~/sourcen/ffmpeg$ sudo ./configure --prefix=/usr --libdir=/usr/lib --enable-shared --enable-gpl --enable-libx264 --enable-libxvid --enable-libvorbis --enable-muxer=mp4 --enable-muxer=matroska --enable-libtheora --enable-libmp3lame --enable-libschroedinger --enable-libgsm --enable-libfaad --enable-libfaac --enable-libdirac --enable-libdc1394 --enable-nonfree --enable-liba52bin --enable-liba52 --enable-x11grab --enable-w32threads --enable-postproc --enable-swscale --enable-avfilter --enable-avfilter-lavf

Das Configure ist auch schön durchgelaufen, beim Kompilieren (make) kommt aber dies:

redundant-decls -Wno-pointer-sign -Wcast-qual -Wwrite-strings -O3 -fno-math-errno -c -o libavcodec/libdiracenc.o libavcodec/libdiracenc.c
libavcodec/libdiracenc.c: In Funktion »libdirac_encode_frame«:
libavcodec/libdiracenc.c:279: Fehler: »ENC_STATE_EOS« nicht deklariert (erste Benutzung in dieser Funktion)
libavcodec/libdiracenc.c:279: Fehler: (Jeder nicht deklarierte Bezeichner wird nur einmal aufgeführt
libavcodec/libdiracenc.c:279: Fehler: für jede Funktion in der er auftritt.)
libavcodec/libdiracenc.c:294: Fehler: »dirac_encoder_t« hat kein Element namens »enc_pparams«
libavcodec/libdiracenc.c:296: Fehler: »dirac_encoder_t« hat kein Element namens »enc_pparams«
libavcodec/libdiracenc.c:296: Fehler: »INTRA_PICTURE« nicht deklariert (erste Benutzung in dieser Funktion)
libavcodec/libdiracenc.c:297: Fehler: »dirac_encoder_t« hat kein Element namens »enc_pparams«
libavcodec/libdiracenc.c:297: Fehler: »REFERENCE_PICTURE« nicht deklariert (erste Benutzung in dieser Funktion)
make: *** [libavcodec/libdiracenc.o] Fehler 1
egle@amd64-3800:~

Hmm, weiß jemand was da flasch läuft, bzw. was ich machen muss damit es durchkompiliert?

EgLe
06.07.08, 22:57
Hallo,

so habe das Teil durchkompiliert und auch installiert....

um den oben genannten Fehler weg zu bekommen und den nächsten Abbruch
auch zu überwinden habe ich mir noch "dirac-0.10.0" installiert und bei der
Configuration habe ich noch das "--enable-w32threads" draußen gelassen.

Teetrinker
07.07.08, 07:52
Anstelle von "--enable-w32threads" kannst du "--enable-pthreads" verwenden.

EgLe
17.07.08, 19:27
Hallo,

da ich nun auf ein 64bit System umgestiegen bin wollte ich den ganzen Vorgang wiederholen....

Habe deinen Rat befolgt und habe nun im ./configure den --enable-pthreads mit reingenommen.

Meine Aufrufe sahen dann so aus:

sudo ./configure --prefix=/usr --libdir=/usr/lib --enable-shared /
--enable-gpl --enable-libx264 --enable-libxvid --enable-libvorbis /
--enable-muxer=mp4 --enable-muxer=matroska --enable-libtheora /
--enable-libmp3lame --enable-libschroedinger --enable-libgsm /
--enable-libfaad --enable-libfaac --enable-libdirac --enable-libdc1394 /
--enable-nonfree --enable-liba52bin --enable-liba52 --enable-x11grab /
--enable-pthreads --enable-postproc --enable-swscale --enable-avfilter /
--enable-avfilter-lavf

Hmm, wieder wurde ich da angemeckert wegen der "libdirac"...
Also dachte ich mir macht nix, kompiliere Dir einfach wieder die "dirac-0.10.0".

Leider schlägt dies nun beim kompilieren fehl ;(

/usr/bin/ld: i386 architecture of input file `../libdirac_common/.libs/libdirac_common.a(libdirac_common_la-upconvert_mmx.o)' is incompatible with i386:x86-64 output
collect2: ld returned 1 exit status
make[1]: *** [libdirac_encoder.la] Fehler 1
make[1]: Verlasse Verzeichnis 'egle/sourcen/dirac-0.10.0/libdirac_encoder'
make: *** [all-recursive] Fehler 1

Ist das Teil denn wirklich inkompatibel zu x86-64 Architektur???
Wenn ja was kann ich machen um ffmpeg sauber zu kompilieren?

Painkiller
18.07.08, 08:11
./configure und make niemals als root (sudo) ausfuehren. Loest zwar wohl nicht dein Problem, aber ich wollte es mal sagen. :D

Teetrinker
18.07.08, 10:07
...was kann ich machen um ffmpeg sauber zu kompilieren?

Lass "--enable-libdirac" weg.
Für debian kann man allerdings auch fertige libdirac Pakete z.B. hier http://www.debian-multimedia.org/pool/main/d/dirac/dirac.php finden. Wenn du FFmpeg mit libdirac Support compilieren willst brauchst du neben libdirac0_0.10.0-0.1_amd64.deb auch noch libdirac-dev_0.10.0-0.1_amd64.deb. (Vorausgesetzt das 64bit System welches du benutzt ist noch immer Kubunto(Debian))
Auch stellt sich die Frage ob du dirac Support benötigst? Mir sind noch keine Video in diesem Format unter gekommen. Sollten deine Bemühungen nur an dieser lib scheitern würde ich auf sie verzichten.

Dort gibt es auch aktuelle Pakete für die shared Library von FFmpeg.
http://www.debian-multimedia.org/pool/main/f/ffmpegcvs/ffmpegcvs.php
libavcodec51
libavformat52
...

Da ich kein Kubunto benutze kann ich dir leider nicht sagen, in wie weit diese Pakete sich mit deinem restlichen System vertragen.
Solltest du FFmpeg selber kompilieren oder die Pakete von http://www.debian-multimedia.org/ verwenden mußt du VLC vermutlich neu compilieren.

Noch ein Rat vermeide es verschieden Versionen einer lib, einmal via deb und aus den Sourcen parallel zu installieren.
Ich würde wenn möglich Software über die Paketverwaltung der Distribution installieren, erspart einem meist unnötigen Ärger.

EgLe
18.07.08, 14:44
Hallo,

recht herzlichen Dank für die Antwort ;)

Ja habe immer noch ein Kubuntu 8.04.1 nur jetzt als 64bit.
Weiterhin habe ich auch noch ein Debian-Lenny 64bit installiert und weiter Distributionen getestet....

Naja mus gestehen das Kubuntu bis jetzt mir immer noch am liebsten ist.
Nur möchte ich jetzt halt auch mal das Kompilieren "erlernen" und üben, und da denke ich fange ich halt mit ffmpeg an ;)

Wenn das nun auf dem 64bit gut funktioniert will ich mir natürlich zumindest was die Videogeschichten angeht dann die Libs aus dem Repository und dem SVN vergleichen und diese dann auch neu machen.

VLC soll dann der abschluss sein, da wird ja noch VLC 0.8.6e angeboten, und da es ja als Stable schon die VLC 0.8.6i gibt und wie
ich gelesen habe per svn die 0.9er Version in Arbeit ist sollte das mein
Abschluss-Lernprojekt werden.....

Habe jetzt mal die libdirac, und die libschröder draussen gelassen
und das ",/configure" ist wieder sauber durchgelaufen bis zum schluss ;)

Werde nun das ganze erstmals mit "checkinstall" testen, und später will ich das ganze dann mal nach der Maintainer-Art ausprobieren mittels http://wiki.ubuntuusers.de/Programme_kompilieren#Debian
und dann evtl. danach: http://www.debian.org/doc/manuals/maint-guide/index.de.html#Anleitung

Damit ich ggf. die Tools auch weitergeben kann, an Bekannte usw. ;)

EgLe
18.07.08, 15:18
Hallo,

also das "make -j" ist komplett durchgelaufen....
Es gab aber etliche Warnmeldungen auch solche wie dieser Art:


/tmp/ccP9s9jT.s: Assembler messages:
/tmp/ccP9s9jT.s:107580: Warning: missing operand; zero assumed
libavcodec/motion_est.c: In Funktion »interlaced_search«:
libavcodec/motion_est.c:685: Warnung: »P[2][0]« könnte in dieser Funktion uninitialisiert verwendet werden
libavcodec/motion_est.c: In Funktion »h263_mv4_search«:
libavcodec/libx264.c: In Funktion »X264_init«:
libavcodec/libx264.c:224: Fehler: »X264_ME_TESA« nicht deklariert (erste Benutzung in dieser Funktion)
libavcodec/libx264.c:224: Fehler: (Jeder nicht deklarierte Bezeichner wird nur einmal aufgeführt
libavcodec/libx264.c:224: Fehler: für jede Funktion in der er auftritt.)
libavcodec/libx264.c:256: Warnung: Zuweisung streicht Qualifizierer von Zeiger-Zieltyp
make: *** [libavcodec/libx264.o] Fehler 1
make: *** Warte auf noch nicht beendete Prozesse...
libavcodec/libxvidff.c: In Funktion »xvid_ff_2pass_after«:
libavcodec/libxvidff.c:713: Warnung: Initialisierung streicht Qualifizierer von Zeiger-Zieltyp
libavcodec/libxvid_rc.c: In Funktion »ff_xvid_rate_control_init«:
libavcodec/libxvid_rc.c:43: Warnung: Übergabe des Arguments 1 von »av_tempfile« entfernt Kennzeichner von Zeiger-Ziel-Typ
libavcodec/msmpeg4.c: In Funktion »ff_msmpeg4_encode_block«:
libavcodec/msmpeg4.c:777: Warnung: »extquant« könnte in dieser Funktion uninitialisiert verwendet werden

Hmm, denke da sollte bzw. muss man die einzelnen Codec auch erst neu übersetzen??


zumindest ist mir dann das "sudo checkinstall" mit dem hier abgebrochen:


libavcodec/libx264.c: In Funktion »X264_init«:
libavcodec/libx264.c:224: Fehler: »X264_ME_TESA« nicht deklariert (erste Benutzung in dieser Funktion)
libavcodec/libx264.c:224: Fehler: (Jeder nicht deklarierte Bezeichner wird nur einmal aufgeführt
libavcodec/libx264.c:224: Fehler: für jede Funktion in der er auftritt.)
libavcodec/libx264.c:256: Warnung: Zuweisung streicht Qualifizierer von Zeiger-Zieltyp
make: *** [libavcodec/libx264.o] Fehler 1

**** Installation fehlgeschlagen. Breche Paket-Erzeugung ab.

Räume auf...OK

Auf Wiedersehen!

Teetrinker
18.07.08, 16:13
Es könnte sein das die von dir installierte libx264 zu alt ist? Sind die Header/Include Dateien (libx264-devel) installiert? Verwendest du ein deb oder hattest du die shared libs von x264 selber kompiliert? Warnungen kann man schon mal ignorieren, nur Fehler/Errors nicht. X264 unterstützt seit ca. Anfang des Jahres -me tesa, glaube ich.

EgLe
18.07.08, 18:16
Hallo,

nochmals muss ich mich bei Dir bedanken, nicht nur für deine Kompetente Auskunft sondern auch noch für die schnelle Antwort :)

Habe es nun kompiliert bekommen :)


Hier nochmals zu der kompletten vorgehensweise wie das sein muss,
damit andere Kompilierungsnewbies (wie ich) das auch komplett sehen:

Als erstes hatte ich folgende Pakete installiert:

sudo apt-get install liba52-dev libdts-dev libgsm1-dev libvorbis-dev libxvidcore4 libxvidcore-dev libdc1394-dev libfaac-dev libfaad-dev liblame-dev libx264-dev libtheora-dev libsdl1.2-dev libamrnb-dev libamrwb-dev

Die sourcen für ffmpeg kann man sich wie folgt ziehen:

svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
Aber um das neueste ffmpeg zu kompilieren muss man auch die
neuste x264 dazu verwenden.

Diese findet man als Tarballs hier:
ftp://ftp.videolan.org/pub/videolan/x264/snapshots/

Dies wird je dann nach dieser Art kompiliert:


bunzip2 < x264-snapshot-20080717-2245.tar.bz2 | tar -xf -
cd x264-snapshot-20080717-2245
./configure --enable-shared
sudo checkinstall

Wer hier eine fehlermeldung bzgl. dem "yasm" erhält, die hatte ich
da ich nur yasm 0.60 bekomme mittels apt-get.
Braucht leider auch einen neueren Yasm, hier habe ich dann den
yasm-0.7.1 gezogen --- zu finden hier:

http://freshmeat.net/projects/yasm/?branch_id=36769&release_id=278074

Die Installation habe ich hier zum testen mal nicht mit dem Dreisatz gemacht, (wäre das einfachste)
sondern hier hatte ich das erste mal die Debianart ausprobiert:


./configure
dh_make
fakeroot debian/rules binary

Eben nach diesem Wiki: http://wiki.ubuntuusers.de/Programme_kompilieren#Debian

Dann das entsprechenden Debfile installieren.

So nach dem Yasm installiert war, lies sich auch die x264 installieren,
hier brachte ich es aber nach der Debianart nicht fertig ;(
Also machte ich dies mittels "checkinstall".

Dann das entsprechenden Debfile installieren.

Als die neue x264 installiert war wechselte ich in das Sourcen-Verzeichnis
der neuen ffmpeg und führte die Installation wie folgt durch:


./configure --enable-liba52 --enable-liba52bin --enable-libamr-nb --enable-libamr-wb --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-libdc1394 --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libxvid --enable-libx264 --enable-gpl --enable-postproc --enable-shared --enable-pthreads --enable-static --disable-vhook --disable-debug --enable-nonfree --prefix=/usr/local --extra-cflags=-I/usr/include --extra-ldflags=-L/usr/lib32

Hier brachte ich die Kompilierung nach "Debianart" auch nicht zustande, und machte hier wieder das ganze mittels "Checkinstall"

Das dann sauber durchlief......

Und auch dieses Debfile wurde erfolgreich installiert ;)

So damit kann man hoffentlich was anfangen ;)


Persönlich würde mich nur noch interessieren wie man es schafft
das man hier alle Debfiles nach der "Debianart" bauen kann.

Denke aber das dies wohl in einem anderen Thread wohl besser aufgehoben wäre???