Pagina 1 di 2
ffmpeg e libx264 troppo recente
Inviato: mar 5 apr 2011, 10:15
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]
Re: ffmpeg e libx264 troppo recente
Inviato: mar 5 apr 2011, 10:43
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).
Re: ffmpeg e libx264 troppo recente
Inviato: mar 5 apr 2011, 11:48
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).
Re: ffmpeg e libx264 troppo recente
Inviato: mar 5 apr 2011, 11:50
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
Re: ffmpeg e libx264 troppo recente
Inviato: mar 5 apr 2011, 11:57
da joe
Intanto grazie delle info spina. Vedremo allora cosa riesce a fare anche mencoder...
Re: ffmpeg e libx264 troppo recente
Inviato: mar 5 apr 2011, 12:10
da targzeta
Ho dato un'occhiata alla pagina man di mplayer, dovrebbe essere sofficiente:
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
Re: ffmpeg e libx264 troppo recente
Inviato: mar 5 apr 2011, 12:23
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
Re: ffmpeg e libx264 troppo recente
Inviato: mar 5 apr 2011, 13:31
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:
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:
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
- Una volta visto il formato della traccia da estrarre intonsa, rilancio ffmpeg nel seguente modo: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.
Re: ffmpeg e libx264 troppo recente
Inviato: mar 5 apr 2011, 15:02
da joe
Ottima spiegazione 414N!
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.
Re: ffmpeg e libx264 troppo recente
Inviato: mar 5 apr 2011, 15:14
da 414N
joe ha scritto:Ottima spiegazione 414N!

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.
Re: ffmpeg e libx264 troppo recente
Inviato: mar 5 apr 2011, 15:37
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!

Re: ffmpeg e libx264 troppo recente
Inviato: mar 5 apr 2011, 16:21
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?
Re: ffmpeg e libx264 troppo recente
Inviato: mar 5 apr 2011, 16:28
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.
Re: ffmpeg e libx264 troppo recente
Inviato: mar 5 apr 2011, 17:48
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:
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...
Re: ffmpeg e libx264 troppo recente
Inviato: mar 5 apr 2011, 18:16
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.