Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Durée d'une vidéo en Flash

10 réponses
Avatar
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

10 réponses

Avatar
YBM
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.
Avatar
Nicolas George
YBM wrote in message <4c3a5e7c$0$650$:
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.
Avatar
YBM
Nicolas George a écrit :
YBM wrote in message <4c3a5e7c$0$650$:
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.
Avatar
Nicolas George
YBM wrote in message <4c3ad794$0$9128$:
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.
Avatar
Lucas Levrel
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
Avatar
Rémi Moyen
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
Avatar
Lucas Levrel
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
Avatar
Rémi Moyen
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
Avatar
Fabien LE LEZ
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 ?
Avatar
Rémi Moyen
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