time code calculs temps et nb image. thierry ?

fifi

XLDnaute Occasionnel
Bonjour,

pour un ami vidéastre je recherche une formule (ou VBA) pour calculer des durées de séquences vidéos à partir de timecodes sous le format hh: mm: ss: ii (avec ii variable exprimant le nombre d'image par seconde, 25images = 1seconde) voir 15images secondes pour d'autre formats (une option serait de pouvoir définir le référentiel image/s pour faire les calculs=.


j'ai une colonne avec ce format hh: mm: ss: ii et il faudrait réussir à calculer le nombre d'images (nb_images), le temps (00:00:00) et la différence de timecode (00:00:00:00) entre 2 timecodes (suite à sélection de 2 cellules)

01:23:12:05 - 01:23:08:01 = 01:23:04:04

j'avoue avoir du mal a pouvoir calculer le nombre d'images entre 2 time codes

j'ai vu que Thierry avait déjà une expérience la dedans :D.

merci ;D
 

Noukita

XLDnaute Nouveau
Bonsoir,

je suis toute nouvelle ici, je ne connais que très peu Excel.

Je me permets de déterrer ce sujet bien qu'il soit presque vieux de dix ans, non pas parce que j'ai la solution (malheureusement!), mais parce que je la recherche aussi... J'ai téléchargé le fichier "classeur1.xls" joint par JHA un peu plus haut, mais soit je m'en sers mal, soit la formule est erronée/incomplète?

Car pour reprendre l'exemple de mentionné entre 01:23:12:05 et 01:23:08:01 la différence est 00:00:04:03 (au lieu de 01:23:04:04 comme indiqué, ce qui donne donc et @ 25 images par secondes, un décalage de 103 images (4 secondes = 4 x 25, + 3 images, on a bien 103) et non pas 101 comme indiqué dans le fichier). Dans cet exemple j'arrive presque à le faire de tête car les deux timecodes sont très proches, mais dans ma "vraie vie" de monteuse vidéo, c'est presque toujours moins facile, il faut calculer de gros décalages et là je suis très vite perdue.

La difficulté vient sans doute du fait qu'il y a deux échelles dans le même timecode, celle du temps (heure minutes et secondes qui vont respectivement de 00 jusqu'à 23, 59, 59, et (le dernier chiffre) celle des images, qui va de 0 jusqu'à 24 dans le cas de 25 images/secondes. C'est comme pour les heures et les minutes, il ne faut pas oublier le 00 ;-), donc le compte est bon, on a bien 25 images, même si l'affichage s'arrête à 24. Je le dis pour ceux et celles que ça pourrait perturber, ce n'est peut-être pas évident pour tout le monde...

Enfin bref, pour résumer mon message est: "S'il vous plaît, quelqu'un aurait-il la formule magique pour calculer un décalage de time code dans un fichier Excel?" Je suis reconnaissante pour toute aide!

Merci d'avance!
Noukita
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Pourquoi ce calcul vous paraît il faux ? : 01:23:12,05 - 01:23:08,01 = 00:00:04,04
Je trouve 101 images à raison de 25 par seconde et 60,6 à raison de 15 par seconde.
Je garde la différence en jours (c'est l'unité de temps requise pour le format hh:mm:ss,00) que je multiplie par 86400 pour l'avoir en secondes puis par le nombre d'images par seconde.
 

Dranreb

XLDnaute Barbatruc
Je n'avais pas tout vu du classeur d'il y a dix ans. Il me semble y avoir une aberration fondamentale dans sa forme. Il va de soit que les 2 chiffres après la virgule ne sauraient être que des centièmes de secondes. Ça ne m'a pas un instant effleuré l'esprit que ça pouvait être autre chose. Si le calcul doit partir d'un temps en secondes entières et d'un excédent à ce temps exprimé en nombre d'images, il faut impérativement que ce dernier soit dans une colonne séparée, sinon ça n'a pas de sens. Vous auriez meilleur temps de joindre un classeur montrant comment le problème se pose réellement pour vous.
 

Dranreb

XLDnaute Barbatruc
Ou alors utilisez une donné texte pour vos TimeCode avec une barre verticale pour séparer le nombre d'images excédentaires du temps en secondes, car c'est vraiment très très incorrect d'utiliser les deux points pour autre chose que séparer les heures, minutes et seconde, et utilisez ces deux fonction perso pour calculer un nombre d'images à partir d'un TimeCode et vice versa :
VB:
Option Explicit
Function NbImages(ByVal TimeCode As String, ByVal IpS As Integer) As Long
   NbImages = Int(TimeValue(Left$(TimeCode, 8)) * 86400 * IpS + 0.5) + Right$(TimeCode, 2)
   End Function
Function TimeCode(ByVal NbImages As Long, ByVal IpS As Integer) As String
   Dim Excéd As Long
   Excéd = NbImages Mod IpS: NbImages = NbImages - Excéd
   TimeCode = Format(NbImages / IpS / 86400, "hh:mm:ss") & "|" & Format(Excéd, "00")
   End Function
=TimeCode(124805;25) vaut "01:23:12|05", et
=NbImages("01:23:12|05";25) vaut 124805
Mais je ne trouve plus 101 à NbImages("01:23:12|05";25) - NbImages("01:23:08|01";25), ni vos 103, mais 104 soit 4 * 25 + 4.
 
Dernière édition:

Noukita

XLDnaute Nouveau
Bonsoir Dranreb,

tout d'abord merci beaucoup de m'avoir répondu!

Et mea culpa, j'ai fait une bête faute de calcul mental , vous avez absolument raison, la différence entre 01:23:12:05 et 01:23:08:01 est bien 00:00:04:04, soit en chiffres et en lettres, 4 secondes et 4 images.

Par contre, pour reprendre l'exemple déjà utilisé, si on a un bout de film (ou un décalage, c'est égal) qui dure 4 secondes et 4 images, à 25 images par seconde, ce clip/ cet espace comporte bel et bien ((4 x 25 images) + 4 images), soit (100 + 4) = 104 images et pas 101. Donc la piste énoncée dans votre message envoyé à 4:09 me parait belle et bien correcte :) ! C'était justement faux d'obtenir 101 images pour 4 secondes et 4 images, comme on l'obtient dans le classeur (c'est pourquoi j'ai fait remonter le sujet).

Ensuite, juste une précision: ce classeur n'est pas de moi, mais il a été gentiment mis à disposition par l'utilisateur JHA (en réponse à Fifi) dans un des messages, c'est très sympa, même s'il ne semble pas fonctionner parfaitement.

Vu mes connaissances archi-basiques d'Excel (en exagérant à peine, tout juste si je sais faire une addition du contenu de deux cellules (!) et mon manque de talent sur ce qui touche aux chiffres, j'ai beaucoup de peine à suivre vos explications pour le modifier (cela vient de moi, pour ceux et celles qui s'y connaissent, elles sont sans doute tout à fait claires et précises!).

Si je comprends qu'il faut séparer le dernier chiffre (celui des images) dans une autre cellule, je suis complètement perdue pour la suite, je ne sais pas du tout/ne comprends pas où ni comment intégrer la formule que vous me donnez (je veux dire le passage de Option … à End fonction) dans le classeur fourni dans ce fil? Je dois coller tout ça (?) dans quelle(s) cellule(s)?

Désolée, je ne suis vraiment pas fortiche dans le domaine!

Cordialement,
Noukita
 

Modeste geedee

XLDnaute Barbatruc
Bonsour®
Si je comprends qu'il faut séparer le dernier chiffre (celui des images) dans une autre cellule,
c'est le principe ...
car un TimeCode n'est pas une durée reconnue par EXCEL

pour le fun une version sans VBA, tout en formules...:cool:
1571258638367.png

les nombres de secondes en lignes 9 et 11
sont obtenus via la formule et le format : [s]
 

Pièces jointes

  • timecode1.xls
    71 KB · Affichages: 51
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonsoir.
Pour des formules plus simples car utilisant les fonctions perso que j'ai indiquées, faite Alt+F11, puis à tout hasard Ctrl+R. enfin Alt+IM.
Collez le code de mes fonction dans la grande fenêtre de droite surmontée de deux listes déroulante avec "(Général)" porté dans celle de gauche.
1571261131663.png
 

Noukita

XLDnaute Nouveau
Bonjour Modeste geedee, re-bonjour Dranreb,

Un tout grand merci pour ces infos complémentaires! Ces jours je travaille beaucoup et je n'aurai malheureusement pas le temps de me plonger sérieusement dans tout ça avant ce weekend, mais je ne perds pas le fil et je vous tiendrai au courant... Merci encore et à bientôt!
Noukita
 

eriiic

XLDnaute Barbatruc
Bonjour à tous,

un ensemble de fonctions personnalisées que j'avais faites pour une demande similaire.
J'ai fait quelques améliorations, j'espère que des erreurs ne se sont pas glissées malgré les contrôles.



2019-10-17_12-17-33.jpg


1571307972212.png


VB:
Option Explicit

    Const convSec As Long = 86400

Function T2i(T, Optional imgs As Long = 25)
    ' conversion images ou TC "hh:mm:ss:img" en images
    ' imgs : images par seconde
    If T Like "##:[0-5]#:[0-5]#:##" Then
        T2i = CDate(Left(T, 8)) * convSec * imgs + CLng(Right(T, 2))
    ElseIf IsNumeric(T) Then
        T2i = CLng(T)
    Else
        T2i = CVErr(xlErrValue)
    End If
End Function

Function T2TC(ByVal T, Optional imgs As Long = 25)
    ' conversion images ou TC en TC "hh:mm:ss:img"
    ' imgs : images par seconde
    T = T2i(T, imgs)
    T2TC = format(CDate(Int(T / imgs) / convSec), "hh:mm:ss") & ":" & format(T Mod imgs, "00")
End Function

Function TPlus_i(T1, T2, Optional imgs As Long = 25)
    ' T2+T1 (images ou TC) en images
    TPlus_i = T2i(T2, imgs) + T2i(T1, imgs)
End Function

Function TMoins_i(T1, T2, Optional imgs As Long = 25)
    ' T2-T1 (images ou TC) en images
    TMoins_i = T2i(T2, imgs) - T2i(T1, imgs)
End Function

Function TSomme_i(plage As Range, Optional imgs As Long = 25)
    ' somme des T (images ou TC) en images
    Dim c As Range
    For Each c In plage
    TSomme_i = TPlus_i(TSomme_i, c.Value, imgs)
    Next c
End Function

Function TPlus_TC(T1, T2, Optional imgs As Long = 25)
    ' T2+T1 (images ou TC) en TC "hh:mm:ss:img"
    TPlus_TC = T2TC(TPlus_i(T1, T2, imgs), imgs)
End Function

Function TMoins_TC(T1, T2, Optional imgs As Long = 25)
    ' T2+T1 (images ou TC) en TC "hh:mm:ss:img"
    TMoins_TC = T2TC(TMoins_i(T1, T2, imgs), imgs)
End Function

Function TSomme_TC(plage As Range, Optional imgs As Long = 25)
    ' somme des T (images ou TC) en TC "hh:mm:ss:img"
    TSomme_TC = T2TC(TSomme_i(plage, imgs), imgs)
End Function
 

Pièces jointes

  • TimeCode 1.1.xlsm
    23.9 KB · Affichages: 37

Dranreb

XLDnaute Barbatruc
Bonjour.
Apparemment ça a l'air d'être une norme, dans votre job, cette utilisation du ':' devant le nombre d'image ?
Après tout le nombre d'image peut être considéré comme une subdivision du temps, et plus précisément de la seconde.
Je propose une réécriture de mon code, toujours avec seulement 2 fonctions publiques, mais de noms plus courts, NbImg et TCode, acceptant des tableaux et admettant 25 image / seconde par défaut de spécification.
VB:
Option Explicit
Function NbImg(ByVal TCode, Optional ByVal IpS As Integer = 25)
   Dim L As Long, C As Long
   If TypeOf TCode Is Range Then TCode = TCode.Value
   If IsArray(TCode) Then
      For L = 1 To UBound(TCode, 1): For C = 1 To UBound(TCode, 2)
         TCode(L, C) = NbImages(TCode(L, C), IpS): Next C, L: NbImg = TCode
   Else: NbImg = NbImages(TCode, IpS): End If
   End Function
Function TCode(ByVal NbImg, Optional ByVal IpS As Integer = 25)
   Dim L As Long, C As Long
   If TypeOf NbImg Is Range Then NbImg = NbImg.Value
   If IsArray(NbImg) Then
      For L = 1 To UBound(NbImg, 1): For C = 1 To UBound(NbImg, 2)
         NbImg(L, C) = TimeCode(NbImg(L, C), IpS): Next C, L: TCode = NbImg
   Else: TCode = TimeCode(NbImg, IpS): End If
   End Function
Private Function NbImages(ByVal TimeCode As String, ByVal IpS As Integer) As Long
   NbImages = Int(TimeValue(Left$(TimeCode, 8)) * 86400 * IpS + 0.5) + Right$(TimeCode, 2)
   End Function
Private Function TimeCode(ByVal NbImages As Long, ByVal IpS As Integer) As String
   Dim Excéd As Long
   Excéd = NbImages Mod IpS: NbImages = NbImages - Excéd
   TimeCode = Format(NbImages / IpS / 86400, "hh:mm:ss") & ":" & Format(Excéd, "00")
   End Function
Permet d'écrire des formules genre =TCode(SOMME(NbImg(C2:C50)))
 
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Bonsour®
Apparemment ça a l'air d'être une norme, dans votre job, cette utilisation du ':' devant le nombre d'image ?


Pour Noukita
Vu mes connaissances archi-basiques d'Excel (en exagérant à peine, tout juste si je sais faire une addition du contenu de deux cellules (!)
pour résumer mon message est: "S'il vous plaît, quelqu'un aurait-il la formule magique pour calculer un décalage de time code
manipulations via formules :

TimeCode (TC)==>Nbimages
NbImages=ImagesParSec * (GAUCHE(TC;8)*1/86400)+DROITE(TC;2)

Nbimages ==> Timecode
TC=TEXTE(ENT(NbImages/ImagesParSec)*1/86400;"hh:mm:ss")& ":"&TEXTE(MOD(NbImages;ImagesParSec);"00")

en travaillant en Nombre d'images les calculs mathématiques restent standards
les résultats sont convertibles en TimeCode
 

Noukita

XLDnaute Nouveau
Bonjour tout le monde,

j'ai un peu de retard, mais je suis débordée ces temps et je n'ai pas pu me manifester durant le weekend comme j'avais pensé le faire.

La conversation a pris une évolution bien au-dessus de mes capacités ;-) et je la suis donc "de loin" mais je pense que ça peut-être intéressant pour les plus doués d'entre vous qui en captent tous les détails...

Bref, pour cette fois je me suis contentée du rôle d'utilisatrice et j'ai pu à l'instant me servir sans encombres du fichier de Modeste Geedee.
Un IMMENSE MERCI, car de pouvoir calculer facilement et "offline" ces décalages m'enlève une sacrée épine du pied!!!

Encore un TOUT GRAND MERCI aussi à Dranreb et à Eriiic d'avoir contribué. Je n'arrive malheureusement pas à ouvrir / faire fonctionner le fichier d'Eriiiic (même après avoir accepté les macros dans mes préférences. Dans Excel, un message me dit que le fichier est peut-être endommagé, et il n'y a pas d'icone, juste un carré blanc à côté du nom, j'ai essayé plusieurs fois sans succès. Je peux l'ouvrir avec Open Office mais la formule ne me parvient qu'incomplète, il m'affiche "dièze-nom ?" dans les colonnes bleu foncé et bleu clair), mais j'ai de vielles versions de ces logiciels, c'est peut-être ça, en tout cas, je pense que le problème est plutôt de mon côté.

Belle fin d'après-midi à tout le monde :)
Noukita
 

Statistiques des forums

Discussions
312 177
Messages
2 085 976
Membres
103 077
dernier inscrit
kamel26asus