ffmpeg e libx264 troppo recente

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3972
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

ffmpeg e libx264 troppo recente

Messaggio da joe »

Cercando di estrarre la traccia audio da un video flv di youtube, ho letto della possibilità di utilizzare ffmpeg per lo scopo.
Il problema è che ffmpeg lamenta la mancanza di una libreria.
La cosa "strana" è che mi chiede una versione più vecchia della libreria x264 che ho già installata:

Codice: Seleziona tutto

$ ffmpeg --version
ffmpeg: error while loading shared libraries: libx264.so.96: cannot open shared object file: No such file or directory
$ ls /usr/lib/libx264.so*
/usr/lib/libx264.so  /usr/lib/libx264.so.107
$ ls /var/log/packages/*264*
/var/log/packages/x264-20101023-i486-1_SBo
Penso che il problema sia dovuto alla ricompilazione di mplayer usando una versione di ffmpeg presa via git... ma non l'avevo installata sul sistema, lavevo solo utilizzata per la compilazione di mplayer.
Ricompilando in tal modo mplayer probabilmente avevo avuto bisogno di una versione più recente anche di x264.
In conclusione penso che adesso sul sistema ho una versione di ffmpeg presa da slacky.eu o comunque precompilata con una versione di x264 più vecchia di quella installata sul sistema via SBo.

Ho tentato anche la semplice scorciatoia di creare un link simbolico del tipo:

Codice: Seleziona tutto

$ ls /var/log/packages/*ffmpeg*
/var/log/packages/ffmpeg-0.6.2-i686-1sl
$ ffmpeg --version
ffmpeg: symbol lookup error: /usr/lib/libavcodec.so.52: undefined symbol: x264_encoder_open_96
Ma come si vede non ha funzionato, c'era da aspettarselo.

Cosa mi consigliate di fare? rimettere unaversione più vecchia di x264? (però non vorrei che poi non funzionasse più mplayer...).
Oppure ricompilare ffmpeg in modo che sfrutti le librerie installate sul sistema?

Offtopic: PS:
L'obiettivo di estrearre la traccia audio dal file avi l'ho ottenuto uglualmente sempre googolando un po' e usando mplayer:

Codice: Seleziona tutto

$ mplayer -ao pcm:fast:file=audio.wav -vo null -vc null video.flv
Non so se sia il metodo per ottenere la migliore qualità ma sembra funzionare... conoscete qualche metodo che porta a risultati ottimali?[/offtopic]

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2923
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: ffmpeg e libx264 troppo recente

Messaggio da 414N »

Il tuo problema è dovuto al fatto che non hai aggiornato ffmpeg quando aggiornasti x264 per poter compilare mplayer.
Forse potresti risolvere ricompilando da sorgenti la versione di ffmpeg che hai installata nel sistema ma, molto probabilmente, risolvi scaricando una nuova versione di ffmpeg (da SVN/GIT).
Ti allego lo script che uso per scaricare un tarball di ffmpeg da SVN. Io poi uso lo SlackBuild da SBo, opportunamente modificato di volta in volta (a parte la VERSION) poiché, da una versione all'altra di ffmpeg, spesso cambiano alcuni switch del configure (al primo errore nel configure, controlla gli switch accettati con configure --help).
joe ha scritto: Offtopic: PS:
L'obiettivo di estrearre la traccia audio dal file avi l'ho ottenuto uglualmente sempre googolando un po' e usando mplayer:

Codice: Seleziona tutto

$ mplayer -ao pcm:fast:file=audio.wav -vo null -vc null video.flv
Non so se sia il metodo per ottenere la migliore qualità ma sembra funzionare... conoscete qualche metodo che porta a risultati ottimali?[/offtopic]
Con quel metodo estrai l'audio contenuto nel flv trasformandolo in wave (decompresso). Ovviamente non hai nessuna perdita di qualità, anche se ottieni un file audio inutilmente ingombrante quando avresti potuto estrarre direttamente il flusso nel suo formato originario (probabilmente compresso). Questo però non è possibile con mplayer/mencoder (supportano solo avi/wav e, a fatica, mpg come formati di output).
Allegati
mksrc-tarball.sh
Script per scaricare ffmpeg da SVN
(311 Byte) Scaricato 79 volte

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3972
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: ffmpeg e libx264 troppo recente

Messaggio da joe »

Ah si, se non ricordo male del tuo script ne avevamo parlato nell'altra discussione dedicata a mplayer un po' di tempo fà...
Dò un occhiata, grazie dell'allegato.
Allora in pratica a questo punto tanto vale mettere la versione più recente di ffmpeg e compilarlacon lo slackbuild... come pensavo.
Giustamente proponi anche la ricompiilazione di ffmpeg, magari con lo slackbuild del pacchetto scaricato da slacky, strada più semplice direi, ma già che ci siamo ok, vedrò cosa riesco a tirare fuori usando o prendendo spunto dal tuo script...

Offtopic: Estrazione audio da video flv (youtube)
Vero, si otiene un wav ingombrantissimo e non vi è motivo, non può contenre più informazioni dell'originale no?
Per cui ti chiederei, se non si utilizza mplayer o mencoder per estrarre la traccia audio, cosa useresti (immagino che la risposta a questo punto ffmpeg che penso sia in grado di estrarre direttamente il flusso nel formato originario, ma chiedo per ignoranza in materia).

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6635
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: ffmpeg e libx264 troppo recente

Messaggio da targzeta »

Per il problema in questione quoto 414N, a questo punto tanto vale aggiornare anche ffmpeg.
414N ha scritto:Con quel metodo estrai l'audio contenuto nel flv trasformandolo in wave (decompresso). Ovviamente non hai nessuna perdita di qualità, anche se ottieni un file audio inutilmente ingombrante quando avresti potuto estrarre direttamente il flusso nel suo formato originario (probabilmente compresso). Questo però non è possibile con mplayer/mencoder (supportano solo avi/wav e, a fatica, mpg come formati di output).
Ma sei sicuro? Non potrebbe usare mencoder copiando semplicemente la traccia audio? Ora non posso provare, appena posso vi faccio sapere.
joe, ovviamente il file wave è meglio se lo comprimi :), oggenc può esserti utile.
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3972
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: ffmpeg e libx264 troppo recente

Messaggio da joe »

Intanto grazie delle info spina. Vedremo allora cosa riesce a fare anche mencoder...

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6635
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: ffmpeg e libx264 troppo recente

Messaggio da targzeta »

Ho dato un'occhiata alla pagina man di mplayer, dovrebbe essere sofficiente:

Codice: Seleziona tutto

mplayer -dumpaudio file_input.flv
ti estrae la traccia audio nel file stream.dump. Poi usi il comando 'file' per vedere che tipo di file è (mp3, ogg, o altro). Oppure, se sei sicuro che è un file mp3 puoi fare direttamente:

Codice: Seleziona tutto

mplayer -dumpaudio -dumpfile file_output.mp3 file_input.flv
Come dicevo non posso fare prove, ma dovrebbe funzionare.
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
deer
Linux 1.x
Linux 1.x
Messaggi: 122
Iscritto il: gio 16 ago 2007, 12:00
Nome Cognome: Maurizio Brunelli
Slackware: 13.1
Kernel: 2.6.33.4
Desktop: KDE4-FluxboxWM
Distribuzione: Debian-ArchBang
Località: rieti
Contatta:

Re: ffmpeg e libx264 troppo recente

Messaggio da deer »

Io per estrarre l'audio di un video, anche .flv, uso ffmpeg cosi:

Codice: Seleziona tutto

ffmpeg -i input.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 output.mp3
Nel comando c'è l'estensione video in .avi, ma funziona, come ho detto anche con .flv, e se vuoi l'audio compresso in .ogg, sostituisci nel comando mp3>ogg e l'output>output.ogg.

[EDIT] Ho appena aggiornato ffmpeg alla 0.6.2, x264 è alla versione 20100528, provato estrazione, tutto ok, anche da video .mp4 in audio .mp3

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2923
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: ffmpeg e libx264 troppo recente

Messaggio da 414N »

spina ha scritto:Ma sei sicuro? Non potrebbe usare mencoder copiando semplicemente la traccia audio? Ora non posso provare, appena posso vi faccio sapere.
Tramite mencoder puoi sì copiare il flusso audio (tramite oac copy), ma il problema è che mencoder stesso non supporta formati di output diversi da avi, mpg e raw.
Si può comunque delegare il tutto a lavf/lavc (quindi al caro ffmpeg & co ;)) specificando come formato di output lavf (vedi mencoder -of help) e come codecs audio e video lavc, ma diventa tutto inutilmente più laborioso (almeno, secondo me).
Questo è un esempio di transcodifica di un flv col suddetto metodo:

Codice: Seleziona tutto

mencoder video.wmv -o video.flv -of lavf -oac mp3lame -lameopts abr:br=56  -ovc lavc -lavcopts  vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 -srate 22050
Con ffmpeg sarebbe bastato (approssimando alcune opzioni mal documentate):

Codice: Seleziona tutto

ffmpeg -i video.wmv -acodec libmp3lame -ab 56k -vcodec flv -b 500k -mbd 2 -4mv -me_method zero -trellis 1 video.flv
Se interessava solo l'audio:

Codice: Seleziona tutto

ffmpeg -i video.wmv -acodec copy -vn audio.m4a
supponendo che la traccia audio originale fosse in un formato compatibile col contenitore audio m4a.
spina ha scritto:joe, ovviamente il file wave è meglio se lo comprimi :), oggenc può esserti utile.
Emanuele
No. Se lo ricomprime, perde di qualità. È come ricodificare in MP3 un CD le cui tracce erano state ricavate da altri MP3.
spina ha scritto:Ho dato un'occhiata alla pagina man di mplayer, dovrebbe essere sofficiente:

Codice: Seleziona tutto

mplayer -dumpaudio file_input.flv
ti estrae la traccia audio nel file stream.dump. Poi usi il comando 'file' per vedere che tipo di file è (mp3, ogg, o altro).
Si può fare anche così, solo che alcune volte non funziona (l'ho appena provato con alcuni video scaricati da Youtube). Temo sempre che il motivo sia il mancato supporto di mplayer/mencoder ad altri contenitori oltre avi/mpg.
deer ha scritto:Io per estrarre l'audio di un video, anche .flv, uso ffmpeg cosi:

Codice: Seleziona tutto

ffmpeg -i input.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 output.mp3
Come già detto, in questo modo vai a ricomprimere dell'audio già compresso. Se l'obiettivo è solo estrarre l'audio così com'è senza perdite ulteriori di qualità, in questo modo non ottieni il risultato voluto. Anzi, impieghi più tempo di una semplice estrazione perché aggiungi un passaggio di ricodifica.
Io, solitamente, sfrutto ffmpeg nel seguente modo:
  • In un primo passaggio, ricavo il formato delle varie tracce contenute all'interno del filmato con

    Codice: Seleziona tutto

    ffmpeg -i video
  • Una volta visto il formato della traccia da estrarre intonsa, rilancio ffmpeg nel seguente modo:

    Codice: Seleziona tutto

    ffmpeg -i video -acodec copy -vn -sn audio.XXX
    dove, al posto di XXX, pongo un contenitore adatto al flusso sorgente (mp3 se il flusso era mp3, m4a se aac ecc..). Le opzioni vn ed sn disabilitano tracce video e sottotitoli. A volte serve poi forzare il formato di output (tramite -f), ma raramente.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3972
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: ffmpeg e libx264 troppo recente

Messaggio da joe »

Ottima spiegazione 414N! :D

Qualche considerazione anche per rispondere al metodo proposto da spina. Confermo quanto già detto da "414N": non sempre funziona, nel mio caso non ha funzionato, per questo avevo fatto la seconda prova lanciando "mplayer -ao pcm:fast:file=audio.wav -vo null -vc null video.flv" che invece funzionava, cioè almeno sputava qualcosa di ascoltabile. Tuttavia resterebbe il problema che ha esposto chiaramente 414N circa l'eventuale ricompressione.

Dal canto mio vedo adesso che il download di ffmpeg via svn sembra terminato.
È ora di provare a crearmi il pacchetto con lo slackbuild di SBo.

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2923
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: ffmpeg e libx264 troppo recente

Messaggio da 414N »

joe ha scritto:Ottima spiegazione 414N! :D
Grazie :)
joe ha scritto:Tuttavia resterebbe il problema che ha esposto chiaramente 414N circa l'eventuale ricompressione.
Per dirla proprio tutta, potresti comunque ricomprimere il wav ottenuto, ma, se non vuoi perdere qualità, allora la ricompressione dev'essere lossless (senza perdita). I formati senza perdita che conosco sono il FLAC e il Monkey Audio (APE). Temo però che il file risulterà comunque più ingombrante del flusso originario estratto in un apposito contenitore.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3972
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: ffmpeg e libx264 troppo recente

Messaggio da joe »

414N ha scritto:Io poi uso lo SlackBuild da SBo, opportunamente modificato di volta in volta (a parte la VERSION) poiché, da una versione all'altra di ffmpeg, spesso cambiano alcuni switch del configure (al primo errore nel configure, controlla gli switch accettati con configure --help).
Ok ecco il primo errore: gli switch
--enable-avfilter
--enable-avfilter-lavf

Sembrano fuori supporto dalla versione attuale di ffmpeg.
Dal configure help |grep filter vedo:

Codice: Seleziona tutto

  --disable-avfilter       disable video filter support [no]
  --enable-bsf=NAME        enable bitstream filter NAME
  --disable-bsf=NAME       disable bitstream filter NAME
  --disable-bsfs           disable all bitstream filters
  --enable-filter=NAME     enable filter NAME
  --disable-filter=NAME    disable filter NAME
  --disable-filters        disable all filters
  --list-bsfs              show all available bitstream filters
  --list-filters           show all available filters
  --enable-frei0r          enable frei0r video filtering
  --enable-libopencv       enable video filtering via libopencv [no]
Dalla prima riga sembra che il filtro avfilter sia abilitato per default. Ne deduco che le due vecchie opzioni che vi sono nello slackbuild sono sostituibili semplicemente dalle impostazioni di default (cioè vengono già abilitate di suo senza specificarle al configure). In parole povere le tolgo dallo slackbuild senza doverle sostituire con uno switch corrsispondente.
Mi date qualche conferma? Intanto io provo. Grazie in anticipo! :)

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3972
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: ffmpeg e libx264 troppo recente

Messaggio da joe »

La prova sembra funzionare, ma non del tutto, ho tolto quelle due opzioni dal configure e sembra compilare tutto. C'è qualche problema nella successiva installazione e si pianta tutto con uno strano:

Codice: Seleziona tutto

find: `/tmp/SBo/package-ffmpeg/usr/man': No such file or directory
In pratica non trova la directory $PKG/usr/man...
Sembrerebbe un problema banale... ma perchè non dovrebbe creare quella directory?
Ah, niente sempre dal configure --help vedo che per defaut usa PREFIX/share/man, quindi probabilmente bisogna modificare lo slackbuild.
Anzi no: nello slackbuild c'è già lo switch --mandir=/usr/man al configure.
Quindi il problema resta: perchè diavolo non crea la direcotry "usr/man"??? questo mi sembra un problema di "make install" dico bene?

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2923
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: ffmpeg e libx264 troppo recente

Messaggio da 414N »

No, è successivo al make install. Probabilmente non viene onorata la posizione indicata con --mandir in fase di configure.
Verifica dove le man page sono state installate (sotto /tmp/SBo/package-ffmpeg/) e modifica lo SlackBuild in modo che sposti la directory dalla posizione sbagliata alla posizione giusta ($PKG/usr/) prima del find che va a comprimere le man pages.
Ovviamente non serve ricompilare quanto compilato finora: commenta tutti i passaggi inerenti la pulizia di $TMP, l'estrazione dei sorgenti, la loro compilazione e potrai riprendere da dove si era fermato il processo.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3972
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: ffmpeg e libx264 troppo recente

Messaggio da joe »

Sembra che le man pages non siano state proprio installate, neanche in una directory differnte da quella attesa. Ho provato il comando find:

Codice: Seleziona tutto

# find /tmp/SBo/package-ffmpeg -iname "*man*"
#
Non ritorna alcun risultato...

Mi viene qualche dubbio sul pacchetto ffmpeg scaricato via svn e compresso con bzip2.
Guardando nella dir del malloppo spacchettato, mi aspetterei di trovare il manuale nominato tipo: ffmpeg.qualcosa

Codice: Seleziona tutto

# find ../ffmpeg-20110405/ -iname "ffmpeg*"
../ffmpeg-20110405/
../ffmpeg-20110405/doc/.svn/text-base/ffmpeg.texi.svn-base
../ffmpeg-20110405/doc/.svn/prop-base/ffmpeg.texi.svn-base
../ffmpeg-20110405/doc/ffmpeg.texi
../ffmpeg-20110405/.svn/text-base/ffmpeg.c.svn-base
../ffmpeg-20110405/.svn/prop-base/ffmpeg.c.svn-base
../ffmpeg-20110405/ffmpeg.c
E invece non c'è nulla di simile ad un manuale...

Il pacchetto creato da svn e compressocon bzip risulta di
7.6M 2011-04-05 12:04 ffmpeg-20110405.tar.bz2

Controllando però quel file sopraindicato "ffmpeg.texi"... E se fosse quello il manuale (in formato sorgente intendo...)?
Ecconela parte iniziale:

Codice: Seleziona tutto

\input texinfo @c -*- texinfo -*-

@settitle FFmpeg Documentation
@titlepage
@sp 7
@center @titlefont{FFmpeg Documentation}
@sp 3
@end titlepage

@chapter Synopsis

The generic syntax is:

@example
@c man begin SYNOPSIS
ffmpeg [[infile options][@option{-i} @var{infile}]]... @{[outfile options] @var{
outfile}@}...
@c man end
@end example
...
...
Potrebbe essere che mi manchi qualcosa in grado di formattare quel tipo di sorgente...
Sulla pagina di SBo nelle indicazioni d'uso dello slackbuid di ffmpeg c'è scritto, fra l'altro:
Make sure to run this script in a real root shell ("su -") and that you
have either tetex or texlive installed
Io ho installato texlive ma l'ho messo in "/opt".
Se non ricordo male gli eseguibili annessi e connessi dovrebbero essere in:
/opt/texlive/2009/bin/i386-linux/

Potrei provare a aggiungere quella dir al PATH di root e ricompilare il tutto, vediamo cosa ne esce e se le mie ipotesi sono plausibili.
Qualsiasi commento parere e precisazione aveste fatemi sapere...

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2923
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: ffmpeg e libx264 troppo recente

Messaggio da 414N »

Puoi anche fare a meno delle man pages (sono indietro di parecchio rispetto al codice del programma), commentando la relativa sezione che se ne preoccupa nello SlackBuild.
Il fatto che ti dia quel messaggio in fase di creazione del pacchetto (intendo il fallimento di find) indica che la compilazione delle pagine di manuale tramite TeX (che avviene prima del make install) non è fallita e, dato che tali pagine non esistono, vuol dire che non è proprio avvenuta. La cosa è strana perché ho appena provato a compilare la versione odierna (come immagino avrai fatto tu) e non m'ha dato alcun errore, creandomi anche le pagine di manuale nel percorso corretto. Io ho installato tetex di default nella Slackware 13.1, non texlive.

Rispondi