Durée d'une vidéo en Flash

Le
Rémi Moyen
Bonsoir,

C'est peut-être pas le meilleur endroit pour ma question, mais y'a
peut-être des gens qui savent ici

Je suis en train de me bricoler une petite appli pour surveiller des
téléchargements d'émissions télé (pour ceux qui veulent tout savoir,
c'est la BBC via get_iplayer), et j'aimerais pouvoir voir rapidement
quel est l'état d'avancement.

Depuis internet, je récupère des fichiers vidéo en Flash (.flv -- je
peux donner plus d'infos si nécessaire, mais je n'y connais rien en
vidéo donc je ne sais même pas qu'est-ce qui serait utile !), et je
récupère aussi la durée totale de l'émission. Mais ce que je voudrais,
c'est savoir à un instant donné, quelle durée j'ai déjà téléchargé. Si
j'ouvre le fichier, avec vlc par exemple, il indique la durée totale (et
s'arrête brusquement dans sa lecture quand il arrive à la vraie fin du
fichier). Je n'ai rien vu qui permette de trouver la durée réelle. Une
recherche rapide sur le web ne m'a rien donné.

Je peux bricoler un truc en fonction de la taille du fichier (je crois
que je peux récupérer la taille totale du fichier depuis internet), mais
à moins que le .flv ne soit encodé à bitrate constant (c'est peut-être
le cas, je n'en ai pas la moindre idée), ça ne sera pas exact. Notez
qu'à vrai dire, pour ce que je veux en faire (i.e. afficher un truc du
genre "x % done"), ça serait une approximation bien suffisante. Mais par
curiosité, envie de faire les choses bien, etc., j'aimerais bien trouver
une autre manière de faire. Je peux aussi parser la sortie de l'appli
qui télécharge pour trouver l'avancement (elle affiche ce pourcentage
sur la sortie standard), mais j'aime pas trop non plus.

Donc, est-ce que quelqu'un connaîtrait un outil (Linux, bien évidemment)
qui me permettrait facilement et rapidement de trouver la durée réelle
d'un fichier .flv partiellement téléchargé ?

Merci d'avance !
--
Rémi Moyen
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
YBM
Le #22347841
Rémi Moyen a écrit :
Donc, est-ce que quelqu'un connaîtrait un outil (Linux, bien évidemment)
qui me permettrait facilement et rapidement de trouver la durée réelle
d'un fichier .flv partiellement téléchargé ?



mplayer -ao null -vo null -endpos 0 video.flv 2> /dev/null |
grep duration

donne la durée en secondes.
Nicolas George
Le #22348101
YBM wrote in message
mplayer -ao null -vo null -endpos 0 video.flv 2> /dev/null |
grep duration

donne la durée en secondes.



Sauf que si la durée est indiquée dans les entêtes, ce qui est le cas en
FLV, alors ce sera celle-là qui sera affichée, pas la durée réelle des
données disponibles.

Soit dit en passant, tu aurais pu vérifier avant de poster : ce n'est pas
bien difficile de récupérer un FLV n'importe où, de le tronquer au milieu et
de regarder ce que ça affiche.
YBM
Le #22348201
Nicolas George a écrit :
YBM wrote in message
mplayer -ao null -vo null -endpos 0 video.flv 2> /dev/null |
grep duration

donne la durée en secondes.



Sauf que si la durée est indiquée dans les entêtes, ce qui est le cas en
FLV, alors ce sera celle-là qui sera affichée, pas la durée réelle des
données disponibles.

Soit dit en passant, tu aurais pu vérifier avant de poster : ce n'est pas
bien difficile de récupérer un FLV n'importe où, de le tronquer au milieu et
de regarder ce que ça affiche.



Ahum, ta logique est bien curieuse...

Une chose est sûre : si un flv est tronqué où si son en-tête est fausse,
alors il n'y a AUCUN moyen de connaître sa longueur avant de l'avoir
reçu en entier...

Or Rémi demande s'il peut connaître la longueur (probable en
l'occurrence) AVANT la fin du téléchargement.

J'ai fourni une réponse, point.
Nicolas George
Le #22348241
YBM wrote in message
Ahum, ta logique est bien curieuse...



Non, c'est juste que tu as tout compris de travers.

Une chose est sûre : si un flv est tronqué où si son en-tête est fausse,
alors il n'y a AUCUN moyen de connaître sa longueur avant de l'avoir
reçu en entier...



Ben si, en consultant l'entête. Manifestement tu n'as pas du tout compris le
message de Remi.

Remi a un fichier FLV qui est en train d'être téléchargé, donc qui est,
provisoirement, tronqué.

Il est possible de connaître sa durée totale, celle qu'il aura quand il sera
terminée : il suffit de consulter l'entête du fichier. C'est ce que donne la
commande que tu as postée, mais Remi savait déjà l'obtenir.

Rémi voudrait la durée de la partie déjà téléchargée.
Lucas Levrel
Le #22348321
Le 11 juillet 2010, Rémi Moyen a écrit :

Donc, est-ce que quelqu'un connaîtrait un outil (Linux, bien évidemment)
qui me permettrait facilement et rapidement de trouver la durée réelle
d'un fichier .flv partiellement téléchargé ?



avidemux trouve la bonne taille quand on lui donne un fichier tronqué.
Quand je lance la version avec interface graphique j'ai sur la sortie
standard :
[Editor] Duration in seconds: 723, in samples: 31910738

Je te laisse chercher un moyen de scripter ça (avidemux existe avec une
CLI)...

--
LL
Rémi Moyen
Le #22350521
Le 12/07/2010 10:42, Lucas Levrel a écrit :
Le 11 juillet 2010, Rémi Moyen a écrit :

Donc, est-ce que quelqu'un connaîtrait un outil (Linux, bien évidemment)
qui me permettrait facilement et rapidement de trouver la durée réelle
d'un fichier .flv partiellement téléchargé ?



avidemux trouve la bonne taille quand on lui donne un fichier tronqué.
Quand je lance la version avec interface graphique j'ai sur la sortie
standard :
[Editor] Duration in seconds: 723, in samples: 31910738

Je te laisse chercher un moyen de scripter ça (avidemux existe avec une
CLI)...



Merci pour l'info !

Mais... malheureusement, je ne m'en sors pas du tout, avidemux crash
quand j'essaye d'ouvrir mon fichier (partiel), j'ai mis une partie (en
coupant les messages pour ne garder que la fin, quand il commence à
ouvrir le fichier, mais je peux donner plus si ça aide) de la sortie après.

Ça commence plutôt bien, en particulier le "[FlvType] String :
durationtype", c'est exactement la durée théorique (i.e. si j'avais tout
téléchargé) de mon fichier. Mais je n'arrive pas à trouver la durée
réelle (autour de 23 secondes, en tout cas c'est ce que vlc lit avant de
s'arrêter) et comme il plante...

Même chose avec la version graphique (avidemux2_qt4). J'utilise avidemux
2.5.3, récupéré tout fraîchement sur debian-multimedia.org (testing).

Une idée ?

========================================== [snip plein de choses que je pense ne pas être utiles ici]

FLV file detected...
[FLV] file size :2340304 bytes
[FLV] Video flag
[FLV] Audio flag
[FLV] Skipping 9 header bytes
pos:9/2340304
[FlashString] onMetaData
[FlvType] String : durationtype :0 : ->12558,463867
[FlvType] String : moovPositiontype :0 : ->32,000000
[FlvType] String : widthtype :0 : ->640,000000
[FlvType] String : heighttype :0 : ->360,000000
[FlvType] String : videocodecidtype :2 :
[FlvType] String : audiocodecidtype :2 :
[FlvType] String : avcprofiletype :0 : ->77,000000
[FlvType] String : avcleveltype :0 : ->30,000000
[FlvType] String : aacaottype :0 : ->2,000000
[FlvType] String : videoframeratetype :0 : ->25,000000
[FlvType] String : audiosampleratetype :0 : ->48000,000000
[FlvType] String : audiochannelstype :0 : ->2,000000
[FlvType] String : trackinfotype :10 :
[FLV] Array : 2 entries
type :3 :
Object:lengthtype :0 : ->313960992,000000
Object:timescaletype :0 : ->25000,000000
Object:languagetype :2 :
Object:sampledescriptiontype :10 :
[FLV] Array : 1 entries
type :3 :
Object:sampletypetype :2 :
Object:type :9 :
Object:type :9 :
Object:lengthtype :166 :

*********** BACKTRACK **************
/usr/lib/libADM_core.so(ADM_backTrack+0x4b)
[0xb6f887fb]:0:<ADM_backTrack>:-2
avidemux(_ZN9flvHeader12parseOneMetaEPKcy+0x88)
[0x810c5f8]:1:<flvHeader::parseOneMeta(char const*, unsigned long long)>:0
avidemux(_ZN9flvHeader12parseOneMetaEPKcy+0x35f)
[0x810c8cf]:2:<flvHeader::parseOneMeta(char const*, unsigned long long)>:0
avidemux(_ZN9flvHeader12parseOneMetaEPKcy+0x419)
[0x810c989]:3:<flvHeader::parseOneMeta(char const*, unsigned long long)>:0
avidemux(_ZN9flvHeader12parseOneMetaEPKcy+0x35f)
[0x810c8cf]:4:<flvHeader::parseOneMeta(char const*, unsigned long long)>:0
avidemux(_ZN9flvHeader12parseOneMetaEPKcy+0x419)
[0x810c989]:5:<flvHeader::parseOneMeta(char const*, unsigned long long)>:0
avidemux(_ZN9flvHeader13parseMetaDataEj+0x225)
[0x810cc65]:6:<flvHeader::parseMetaData(unsigned int)>:0
avidemux(_ZN9flvHeader4openEPKc+0x50f)
[0x810d1af]:7:<flvHeader::open(char const*)>:0
avidemux(_ZN12ADM_Composer7addFileEPKch8fileType+0x3c6)
[0x80992b6]:8:<ADM_Composer::addFile(char const*, unsigned char,
fileType)>:0
avidemux() [0x808804f]:9:<avidemux() [0x808804f]>:0
avidemux(_Z10automationv+0x158) [0x8116b18]:10:<automation()>:0
avidemux(_Z9UI_RunAppv+0x14) [0x814f814]:11:<UI_RunApp()>:0
avidemux(main+0x30a) [0x808cb0a]:12:<main>:-2
/lib/i686/cmov/libc.so.6(__libc_start_main+0xe6)
[0xb6a20c76]:13:<__libc_start_main>:-2
avidemux() [0x8083cf1]:14:<avidemux() [0x8083cf1]>:-2
*********** BACKTRACK **************
Cleaning up

[snip encore 2-3 trucs de clôture propre d'avidemux]
--
Rémi Moyen
Lucas Levrel
Le #22351681
Le 12 juillet 2010, Rémi Moyen a écrit :

Mais... malheureusement, je ne m'en sors pas du tout, avidemux crash
quand j'essaye d'ouvrir mon fichier (partiel),



Aïe, c'est reproductible ? (Parfois il crashe au démarrage sans raison
apparente.) Il marche sur ton fichier complet ?

J'ai testé en ouvrant un FLV coupé arbitrairement avec avidemux_gtk
version 2.5.2, ça avait marché (hier avec une taille « ronde », split -b
30M, aujourd'hui avec 30124527 ça marche aussi).

Est-ce que tu as cherché si le format FLV autorise les bitrates
variables ? Sinon règle de trois...

--
LL
Rémi Moyen
Le #22353461
Le 13/07/2010 11:02, Lucas Levrel a écrit :
Le 12 juillet 2010, Rémi Moyen a écrit :

Mais... malheureusement, je ne m'en sors pas du tout, avidemux crash
quand j'essaye d'ouvrir mon fichier (partiel),



Aïe, c'est reproductible ? (Parfois il crashe au démarrage sans raison
apparente.) Il marche sur ton fichier complet ?



J'ai pas testé, j'ai oublié de garder un fichier complet la dernière
fois que j'ai téléchargé une émission...

Bon, je re-essayerais plus tard avec d'autres fichiers.

Est-ce que tu as cherché si le format FLV autorise les bitrates
variables ? Sinon règle de trois...



Je ne sais pas... je n'y connais strictement rien en vidéo, je ne sais
pas si .flv décrit un format unique ou si c'est une catégorie plus
vaste, ni rien d'autre sur le sujet... et à vrai dire, je m'en fiche un
peu : je vais sans doute faire à partir de la taille et de la durée
totale. J'y avais pensé dès le début, mais j'aurais apprécié si j'avais
trouvé plus précis.

Bah, au moins j'ai (re-)découvert avidemux, j'y penserais la prochaine
fois que j'aurais un truc à faire avec une vidéo !

Merci !
--
Rémi Moyen
Fabien LE LEZ
Le #22355191
On Tue, 13 Jul 2010 21:34:43 +0100, Rémi Moyen :

Je ne sais pas... je n'y connais strictement rien en vidéo, je ne sais
pas si .flv décrit un format unique



FLV est un conteneur, tout comme AVI ou MKV.
Si le FLV en question est raisonnablement récent, le flux vidéo est
probablement du H.264.
Il y a donc des chances pour qu'il puisse utiliser du VBR, mais même
dans ce cas, la règle de trois donne probablement une estimation pas
trop mauvaise.

Par ailleurs, si tu télécharges, ce qui t'intéresse, c'est le nombre
d'octets restant à télécharger, plutôt que la durée de la vidéo, non ?
Rémi Moyen
Le #22356871
Le 14/07/2010 12:55, Fabien LE LEZ a écrit :
On Tue, 13 Jul 2010 21:34:43 +0100, Rémi Moyen :

Je ne sais pas... je n'y connais strictement rien en vidéo, je ne sais
pas si .flv décrit un format unique



FLV est un conteneur, tout comme AVI ou MKV.



Je le soupçonnais un peu, mais merci de la confirmation.

Si le FLV en question est raisonnablement récent, le flux vidéo est
probablement du H.264.
Il y a donc des chances pour qu'il puisse utiliser du VBR, mais même
dans ce cas, la règle de trois donne probablement une estimation pas
trop mauvaise.



Oui, je pense aussi. Je n'ai pas vraiment besoin d'un truc précis vu que
je risque de regarder principalement le pourcentage. Je m'en fiche de
connaître l'avancement à l'octet (ou à la seconde) près !

Par ailleurs, si tu télécharges, ce qui t'intéresse, c'est le nombre
d'octets restant à télécharger, plutôt que la durée de la vidéo, non ?



Oui et non : j'aime bien savoir si j'ai téléchargé suffisamment long
pour pouvoir commencer à regarder (soit que je télécharge à moins d'une
seconde d'émission par seconde -- oui, le haut débit c'est encore pour
le futur, ici --, soit que je veux sauter des morceaux), donc la durée
m'est utile. Et je m'en fiche un peu de savoir que j'ai 100 ou 150 Mo,
c'est plus utile/compréhensible si je vois que j'ai 1h ou 1h30. Par
contre, c'est vrai qu'en général je préfère savoir qu'il me reste 100 Mo
à télécharger plutôt que 1h d'émission.

Disons que je posais la question plus par curiosité que parce que j'en
avais absolument besoin.
--
Rémi Moyen
Publicité
Poster une réponse
Anonyme