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

Re: ffmpeg e libx264 troppo recente

Messaggio da joe »

Ho provato la ricompilazione dopo aver alterato il PATH di root aggiungendo i binari compresi in texlive. Senza precisamente sapere quale mi servisse. Nel frattempo con un googolata mi sa che ho trovato la risposta, o comunque qualcosa che c'entra:
http://www.linuxquestions.org/questions ... eg-849361/

Lo stesso alien risponde al malcapitato che riporta identico errore rispetto al mio:
f you become root using the "su" command instead of "su -" you will not have a full root shell environment. The texi2html program will not be found, which means the man pages will not be generated, which means there will not be a "/tmp/SBo/package-ffmpeg/usr/man" directory and the SlackBuild script will fail.

Eric
Il problema è lo stesso, la causa simile, l'errore da parte del mio sistema è invece differente.
In entrambi i casi l'eseguibile richiesto per creare le man pages di ffmpeg è texi2html.
Il fatto è che sul mio sistema (slack-13.1) non lo trovo. Non so se faccia parte di qualche pacchetto più grosso come per esempio texlive, di cui avevo predisposto un'installazione abbastanza minimale (saprete che si possono sceglere i vari componenti, e pacchetti).

La home page del progetto dice:
Texi2html is a Perl script
[...]
use latex2html to convert @tex sections
[...]
Prima di spremermi oltre le meningi, proverò ad installare quello script e a far viaggiare nuovamente lo slackbuild. Speriamo sia la volta buona.

EDIT: vedo la tua risposta solo ora, mi potresti dire se tu hai installato da qualche parte questo misterioso texi2html? E di che pacchetto faccia parte?
Certo, ffmpeg di cui stimo parlando l'ho scaricata oggi via svn. Lo vedi anche dai mie post precedenti se ho riportato pezzi di terminale in cui vi sono i nomi di direcotries.
In ogni caso grazie per la disponibilità :)

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 »

Mi accorgo che mi manca anche latex2html. Probabilmente la mia installazione di texlive è un po' troppo stringata.
A sto punto rinuncio ai manuali... eccheccavolo!! Non potevano usare il solito texinfo... ??? :/

rik70
Iper Master
Iper Master
Messaggi: 2552
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 15.0
Kernel: 5.15.x-generic
Desktop: Sway
Distribuzione: Arch Linux

Re: ffmpeg e libx264 troppo recente

Messaggio da rik70 »

Scusate l'intrusione,

ma vi chiedo: perché aggiornare x264 per compilare l'ultima svn di mplayer?

Non vorrei prendere una cantonata, ma a meno che non usiate mencoder per convertire un stream in H/x264, a mplayer le libx264 non servono.

Se sbaglio, abbiate pietà :roll: :)

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 »

E chi si ricorda.... ;)
Francamente non ricordo per quale motivo avevo messo quella libreria aggiornata.
Ricordo solo che mplayer non mi riproduceva parecchi video in flash per cui avevo deciso di ricompilarlo usando librerie più nuove.
Per tutti i dettagli ti rimando alla discussione relativa a quell'evento: viewtopic.php?f=2&t=33819

Tornando a ffmpeg finalmente ho creato il pacchetto commentando il comando dello slackbuild relativo ai manuali.
Finalmente l'eseguibile sembra funzionare:

Codice: Seleziona tutto

joe@darkstar:~$ ffmpeg --version
FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
  built on Apr  5 2011 18:41:36 with gcc 4.4.4
  configuration: --prefix=/usr --libdir=/usr/lib --shlibdir=/usr/lib --mandir=/usr/man --disable-debug --enable-shared --disable-static --enable-pthreads --enable-libtheora --enable-libvorbis --enable-gpl --enable-version3 --enable-postproc --enable-swscale --enable-x11grab --arch=i686 --enable-libmp3lame --enable-libx264
  libavutil     50.36. 0 / 50.36. 0
  libavcore      0.16. 1 /  0.16. 1
  libavcodec    52.108. 0 / 52.108. 0
  libavformat   52.93. 0 / 52.93. 0
  libavdevice   52. 2. 3 / 52. 2. 3
  libavfilter    1.74. 0 /  1.74. 0
  libswscale     0.12. 0 /  0.12. 0
  libpostproc   51. 2. 0 / 51. 2. 0
ffmpeg: missing argument for option '-version'
joe@darkstar:~$ man ffmpeg
No manual entry for ffmpeg
Ok. Facciamo una prova col file di ieri sera... prendendo esempio da quanto aveva spiegato "414N". Vi farò sapere

rik70
Iper Master
Iper Master
Messaggi: 2552
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 15.0
Kernel: 5.15.x-generic
Desktop: Sway
Distribuzione: Arch Linux

Re: ffmpeg e libx264 troppo recente

Messaggio da rik70 »

Ho letto ;)

Il fatto è che in quella discussione parlavi di video in flash.

Nel log del tuo mplayer si leggeva infatti:

Codice: Seleziona tutto

Selected video codec: [ffvp6f] vfm: ffmpeg (FFmpeg VP6 Flash)
Ma x264 non c'entra col codec VP6 e quindi col problema che avevi.

In ogni caso, per riprodurre H264 mplayer non ha bisogno di X264. Sembra un bisticcio di parole ma è così. Io ho una build di mplayer che non è linkata alla libx264 e funziona sia con gli stream di youtube in H/x264 che VP6. Ma ripeto, in questo contesto VP6 non c'entra.

Vabbè, giusto per sottilizzare :)

Bye

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 »

rik70 ha scritto: Ma x264 non c'entra col codec VP6 e quindi col problema che avevi.

In ogni caso, per riprodurre H264 mplayer non ha bisogno di X264. Sembra un bisticcio di parole ma è così. Io ho una build di mplayer che non è linkata alla libx264 e funziona sia con gli stream di youtube in H/x264 che VP6. Ma ripeto, in questo contesto VP6 non c'entra.
Sante parole. x264 serve se si vogliono fare codifiche in h264 con ffmpeg/mencoder.
ffmpeg include da tempo (in libavcodec) il supporto alla decodifica di flussi h264 (quindi, di conseguenza, anche mplayer).

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 »

Guarda, personalmente sono piuttosto ignorante in materia. Nella discussione che ho linkato si parla di 264 nell'ultima pagina mi pare... probabilmente l'ahi già letta. Io brutalmente avevo aggiornato un po' tutte le librerie che mi avevano suggerito essere importanti, compresa x264, vedi ultima pagina di quella discussione....
Hai fatto bene a puntualizzare, qualcuno più pratico di me in materia potrà capire meglio la tua obiezione.

Per quanto riguarda la prova: abbiamo il file "video.flv" da cui estrarre la "traccia" audio. Ecco alcune sue caratteristiche:

Codice: Seleziona tutto

$ file video.flv
video.flv: Macromedia Flash Video
Ecco per me questo è un video in flash... detto in termini semplicistici.
Vediamo cosa dice ffmpeg seguendo le indicazioni di 414N.

Codice: Seleziona tutto

$ ffmpeg -i video.flv
FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
  built on Apr  5 2011 18:41:36 with gcc 4.4.4
  configuration: --prefix=/usr --libdir=/usr/lib --shlibdir=/usr/lib --mandir=/usr/man --disable-debug --enable-shared --disable-static --enable-pthreads --enable-libtheora --enable-libvorbis --enable-gpl --enable-version3 --enable-postproc --enable-swscale --enable-x11grab --arch=i686 --enable-libmp3lame --enable-libx264
  libavutil     50.36. 0 / 50.36. 0
  libavcore      0.16. 1 /  0.16. 1
  libavcodec    52.108. 0 / 52.108. 0
  libavformat   52.93. 0 / 52.93. 0
  libavdevice   52. 2. 3 / 52. 2. 3
  libavfilter    1.74. 0 /  1.74. 0
  libswscale     0.12. 0 /  0.12. 0
  libpostproc   51. 2. 0 / 51. 2. 0
[flv @ 0x806a4c0] Estimating duration from bitrate, this may be inaccurate
Input #0, flv, from 'video.flv':
  Metadata:
    duration        : 314
    starttime       : 0
    totalduration   : 314
    width           : 854
    height          : 480
    videodatarate   : 932
    audiodatarate   : 113
    totaldatarate   : 1052
    framerate       : 25
    bytelength      : 41396978
    canseekontime   : true
    sourcedata      : BADC21323HH1301944896714849
    purl            :
    pmsg            :
  Duration: 00:05:14.48, start: 0.000000, bitrate: 1069 kb/s
    Stream #0.0: Video: h264, yuv420p, 854x480 [PAR 1:1 DAR 427:240], 953 kb/s, 25 tbr, 1k tbn, 50 tbc
    Stream #0.1: Audio: aac, 44100 Hz, stereo, s16, 115 kb/s
At least one output file must be specified
Penso che le indicazioni utili ai nostri fini stiano nella riga seguente:
Stream #0.1: Audio: aac, 44100 Hz, stereo, s16, 115 kb/s

Bene, praticamente dovremmo ottenere un file audio di qualità 115kb/s, non so se è giusto eventualmente confermate.
Inoltre vediamo che il formato dell'audio è di tipo "aac". Personalmente non ho la più pallida idea di cosa voglia dire, ma proseguiamo.
414N diceva ffmpeg -i video -acodec copy -vn -sn audio.XXX in cui XXX è relativo al formato del flusso in ingrasso, che nel nostro caso ha quacosa a che fare con aac. Bene, chiedo a google cosa sia quell'aac e aquale tipo di formato è relativo, insomma voglio capire quale estensine vada messa al posto di "XXX".
Ok, cerco estensione formato aac e da una riga di google leggo:
Il file audio estratto ha estensione .aac
Provo allora a sostituire XXX con aac:

Codice: Seleziona tutto

$ ffmpeg -i video.flv -acodec copy -vn -sn audio.aac
FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
  built on Apr  5 2011 18:41:36 with gcc 4.4.4
  configuration: --prefix=/usr --libdir=/usr/lib --shlibdir=/usr/lib --mandir=/usr/man --disable-debug --enable-shared --disa
ble-static --enable-pthreads --enable-libtheora --enable-libvorbis --enable-gpl --enable-version3 --enable-postproc --enable-
swscale --enable-x11grab --arch=i686 --enable-libmp3lame --enable-libx264
  libavutil     50.36. 0 / 50.36. 0
  libavcore      0.16. 1 /  0.16. 1
  libavcodec    52.108. 0 / 52.108. 0
  libavformat   52.93. 0 / 52.93. 0
  libavdevice   52. 2. 3 / 52. 2. 3
  libavfilter    1.74. 0 /  1.74. 0
  libswscale     0.12. 0 /  0.12. 0
  libpostproc   51. 2. 0 / 51. 2. 0
[flv @ 0x806a4c0] Estimating duration from bitrate, this may be inaccurate
Input #0, flv, from 'video.flv':
  Metadata:
    duration        : 314
    starttime       : 0
    totalduration   : 314
    width           : 854
    height          : 480
    videodatarate   : 932
    audiodatarate   : 113
    totaldatarate   : 1052
    framerate       : 25
    bytelength      : 41396978
    canseekontime   : true
    sourcedata      : BADC21323HH1301944896714849
    purl            :
    pmsg            :
  Duration: 00:05:14.48, start: 0.000000, bitrate: 1069 kb/s
    Stream #0.0: Video: h264, yuv420p, 854x480 [PAR 1:1 DAR 427:240], 953 kb/s, 25 tbr, 1k tbn, 50 tbc
    Stream #0.1: Audio: aac, 44100 Hz, stereo, s16, 115 kb/s
Output #0, adts, to 'audio.aac':
  Metadata:
    duration        : 314
    starttime       : 0
    totalduration   : 314
    width           : 854
    height          : 480
    videodatarate   : 932
    audiodatarate   : 113
    totaldatarate   : 1052
    framerate       : 25
    bytelength      : 41396978
    canseekontime   : true
    sourcedata      : BADC21323HH1301944896714849
    purl            :
    pmsg            :
    encoder         : Lavf52.93.0
    Stream #0.0: Audio: aac, 44100 Hz, stereo, 115 kb/s
Stream mapping:
  Stream #0.1 -> #0.0
Press [q] to stop encoding
size=    4414kB time=314.96 bitrate= 114.8kbits/s
video:0kB audio:4321kB global headers:0kB muxing overhead 2.145766%
Bene, e alla fine si ottiene apputno questo file "audio.aac", come vedete c'è una bella differenza rispetto al wav ottenuto con mplayer:

Codice: Seleziona tutto

$ file audio.aac&&ls -lh audio.aac
audio.aac: MPEG ADTS, AAC, v4 LC, 44.1 kHz, stereo
-rw-r--r-- 1 joe users 4.4M 2011-04-05 20:35 audio.aac

$ file audio.wav&&ls -lh audio.wav
audio.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, stereo 44100 Hz
-rw-r--r-- 1 joe users 53M 2011-04-05 00:24 audio.wav
Bene, grazie a tutti per gli interventi e l'appoggio allora.

Offtopic: Avrei ancora una domanda.
Diciamo di voler scaricare un video da youtube SOLO SE la sua qualita AUDIO è buona, sopra una certo limite di bitrate tanto per capirci.
C'è qualche possibilità di saperlo in anticipo, senza dover scaricare preventivamente tutto il video?

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: Inoltre vediamo che il formato dell'audio è di tipo "aac". Personalmente non ho la più pallida idea di cosa voglia dire, ma proseguiamo.
414N diceva ffmpeg -i video -acodec copy -vn -sn audio.XXX in cui XXX è relativo al formato del flusso in ingrasso, che nel nostro caso ha quacosa a che fare con aac. Bene, chiedo a google cosa sia quell'aac e aquale tipo di formato è relativo, insomma voglio capire quale estensine vada messa al posto di "XXX".
Ok, cerco estensione formato aac e da una riga di google leggo:
Il file audio estratto ha estensione .aac
Provo allora a sostituire XXX con aac
AAC è un tipo di codifica lossy per l'audio, usato ormai in molti ambiti (a parità di bitrate, ha una qualità migliore rispetto al MP3).
Scegliendo aac come estensione hai scelto di estrarre l'audio in modo grezzo, senza racchiuderlo in un contenitore come mp4 (m4a) o matroska (mka). Questo non comporta conseguenze finché non desideri riprodurre il suddetto file su dispositivi che sono compatibili sì con AAC, ma solo se presentato in un certo contenitore (tipo gli iPod).
joe ha scritto: Offtopic: Avrei ancora una domanda.
Diciamo di voler scaricare un video da youtube SOLO SE la sua qualita AUDIO è buona, sopra una certo limite di bitrate tanto per capirci.
C'è qualche possibilità di saperlo in anticipo, senza dover scaricare preventivamente tutto il video?
Beh, metti in pausa il download dopo aver scaricato circa 500KB (forse anche meno) e lancia ffmpeg -i sul file mezzo scaricato per controllare i flussi.

rik70
Iper Master
Iper Master
Messaggi: 2552
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 15.0
Kernel: 5.15.x-generic
Desktop: Sway
Distribuzione: Arch Linux

Re: ffmpeg e libx264 troppo recente

Messaggio da rik70 »

joe ha scritto: Per quanto riguarda la prova: abbiamo il file "video.flv" da cui estrarre la "traccia" audio. Ecco alcune sue caratteristiche:

Codice: Seleziona tutto

$ file video.flv
video.flv: Macromedia Flash Video
Ecco per me questo è un video in flash... detto in termini semplicistici.
Ed è qui che sta l'inghippo ;)

Provo a spiegarmi con un esempio pratico.

Proviamo a tirare giù da youtube uno stream audio/video, o - come dici tu giustamente - un video in flash; aiutiamoci con youtibe-dl:

Codice: Seleziona tutto

youtube-dl -f 5 -o file1.flv 'http://www.youtube.com/watch?v=jMXXnLSRdBE'
Ancora:

Codice: Seleziona tutto

youtube-dl -f 18 -o file2.flv 'http://www.youtube.com/watch?v=jMXXnLSRdBE'
Terminato il "lavoro", nella nostra directory avremo 2 file:

file1.flv
file2.flv

Il contenuto audio/video di questi file è identico: un chitarrista Americano in sala d'incisione con la propria band.

Ora però se ispezioniamo il tutto, scopriamo che sono diversi.

Utilizzo gli stessi tuoi comandi:

Codice: Seleziona tutto

file file1.flv 
file1.flv: Macromedia Flash Video

Codice: Seleziona tutto

file file2.flv 
file2.flv: ISO Media, MPEG v4 system, version 2
Ora con ffmpeg:

Codice: Seleziona tutto

ffmpeg -i file1.flv
Stream #0.0: Video: flv, yuv420p, 320x180, 262 kb/s, 29.97 tbr, 1k tbn, 1k tbc
Stream #0.1: Audio: mp3, 22050 Hz, 1 channels, s16, 64 kb/s

Codice: Seleziona tutto

ffmpeg -i file2.flv
Stream #0.0(und): Audio: aac, 44100 Hz, stereo, s16, 125 kb/s
Stream #0.1(und): Video: h264, yuv420p, 480x270 [PAR 1:1 DAR 16:9], 500 kb/s, 29.97 fps, 29.97 tbr, 29968 tbn, 59936 tbc
Noterai che, benché siano tutti e 2 file "video in flash" sono completamente differenti: i codec audio e video utilizzati non sono gli stessi. Il primo dei 2 -file1.flv - è il classico (uno dei tanti possibili) file flash "tradizionale": Video in FLV(1), audio in MP3.

Ora, quando tu nella discussione che hai linkato lamentavi che alcuni video in flash non venivano riprodotti da Mplayer, ti riferivi proprio ai file di questo tipo (file1.flv).

Il tuo player non te li riproduceva perché andava brutamente in crash. In sostanza: 'mplayer + flash con video in VP6F(=nel tuo caso)+audio in MP3 = CRASH!!' Sono quasi sicuro che se il video incriminato fosse stato del tipo "file2.flv (quindi: Video in H264 e audio in AAC) mplayer non sarebbe crashato.

Giustamente ti hanno consigliato di provare ad aggiornare mplayer. E tu cosi hai fatto, aggiornando però anche x264, trovandoti successivamente nella situazione di dover ricompilare anche ffmpeg che non trovava più le libx264 corrette.

Io mi sono semplicemente limitato a dire che non era necessario aggiornare anche x264, a meno di non voler utilizzare mencoder per fare "encoding " in H264.

Tutto qui ;)

Aggiungo, e chiudo, che a volte quei crash sono dovuti al flag '--enable-runtime-cpudetection' passato al configure in fase di compilazione: flag che viene utilizzato anche nello SlackBuild di Pat. Mplayer è sempre meglio ricompilarselo, disabilitando quell'opzione. Infine per i formati video/audio particolari - come ad es. i FLV,VP6*,WMV*, etc. - bisogna ricordarsi d'installare anche i Win32 codecs.

Bye

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 »

Bene, grazie delle precisazioni.
Sì avevo notato anch'io la differenza tra i video ".flv" che venivano riprodotti correttamente e quelli che invece non vi era verso.
Durante la riproduzione con mplayer a terminale vengono visualizzate parecchie info e avevo notato che in quelli non riproducibili compariva un codec comune, forse proprio VP6F, ma non ci possso giurare... mentre gli altri funzionanti non lo evidenziavano nell'output di mplayer.

Oltre x264 avevo poi aggiornato anche altre librerie prima di ricompilare mplayer.
Forse, mi sarei comunque ritrovato con un ffmpeg preinstallato che non avrebbe più trovato alcune versioni di libs cui era compilato contro... indipendentemente da x264, ma non posso giurarci.

L'idea che mi sono fatto io è che per certi scopi la compilazione statica può avere una certa utilità, in questo caso se avessi creato un ambiente
ad hoc in grado di compilare mplayer e linkare staticamente le librerie ad esso necessarie, forse avrei evitato di incasinare un po' l'equilibrio del sistema e sicuramente non sarei incorso nell'intoppo di ffmpeg non più funzionante.

Rispondi