[..] Extraire les chapîtres d'une playlist AVCHD

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 321
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [..] Extraire les chapîtres d'une playlist AVCHD

#21

Message par Anthony »

Heu, j'ai pas beaucoup de cerveau, mais là quand même :P
T'as dû confondre total du mpls avec le total de chaque m2ts, ce que je cherche à faire :wink:
Avec ce mpls on voit mieux le hic :wink:
00000.rar
00000.rar
(183 Octets) Téléchargé 159 fois
Code:
► Afficher le texte
PS: Tes 2 propositions de code me paraissent intéresantes :wink:
Je suis diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- 2025/03/17 --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Cool: Base64 Compression Tool --- des fichiers dans vos scripts
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Extraire les chapîtres d'une playlist AVCHD

#22

Message par mikell »

Bon bin j'espère que c'est ça cette fois :P
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 321
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [..] Extraire les chapîtres d'une playlist AVCHD

#23

Message par Anthony »

Je viens de découvrir un petit beug dans le code avec cette playlist
00001.rar
00001.rar
(333 Octets) Téléchargé 149 fois
En rouge ce qui devrait apparaître et qui n'apparait pas, en bleu la liste des m2ts que j'aurai besoin mais absente dù au manque (cité précédement)
Voilà après j'ai toutes les infos dont j'ai besoin (sauf beug :P )
► Afficher le texte
Code au3:
► Afficher le texte
Je suis diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- 2025/03/17 --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Cool: Base64 Compression Tool --- des fichiers dans vos scripts
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Extraire les chapîtres d'une playlist AVCHD

#24

Message par mikell »

Pas de bug, juste que c'est difficile de faire comprendre à un code que plusieurs .m2ts qui portent le même nom et n'ont tous qu'une seule piste de durée identique au millième de sec près, sont pourtant différents :roll:
Va t'en expliquer à un code que 2 <> 2
Le seul moyen serait de relever le nombre de m2ts dans le mpls (qui figure à l'offset 41, $caract[65] dans le code) et faire en sorte que le code les note tous même si ça lui parait incohérent

Je trouve le moment particulièrement opportun pour te fournir mes 2 outils fabriqués avec tant d'amour afin que tu puisses t'immerger toi-même encore davantage dans les charmes du dépiautage de mpls, et faire toi-même les menus aménagements nécessaires dans le code qui n'est après tout pas si difficile à comprendre :P
► Afficher le texteconvertisseur temps-hexa
► Afficher le texteaddition-soustraction de temps au format hh:mm:ss:xxx
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 321
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [..] Extraire les chapîtres d'une playlist AVCHD

#25

Message par Anthony »

OK Merci je vais regarder çà ;)
Je suis diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- 2025/03/17 --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Cool: Base64 Compression Tool --- des fichiers dans vos scripts
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 321
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [..] Extraire les chapîtres d'une playlist AVCHD

#26

Message par Anthony »

Voilà, je suis de retour mikell :P .....
Voici mon code actuel mais je n'arrive pas à avoir correcte la dernière valeur :shock:
Image
#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.6.1
 From idea of:      Web Free Software
 Author:            mikell

 Script Function:
    _Include_MPLSs_+_Extract_Chapters_List.au3

#ce ----------------------------------------------------------------------------

; analyse de fichier playlist *.mpls

#Include <Array.au3>
#include <File.au3>
;
;
; ===== #Get difference with two H:M:S# ==============================================================================
Local $Duration1, $Operator, $Duration2, $Duration
Func _UDF_WFS_H_M_S_msec_Diff($Duration1, $Operator, $Duration2, ByRef $Duration)   ; _UDF_WFS_H_M_S_msec_Diff("10:10:10.101", "-", "01:01:01.010", $Duration)
   $MS1              = (StringMid( $Duration1, 1,2)*1000*60*60 + StringMid( $Duration1, 4,2)*1000*60 + StringMid( $Duration1, 7,2)*1000 + StringMid( $Duration1,10,3))
   $MS2              = (StringMid( $Duration2, 1,2)*1000*60*60 + StringMid( $Duration2, 4,2)*1000*60 + StringMid( $Duration2, 7,2)*1000 + StringMid( $Duration2,10,3))
   If $Operator         = "-" Then $DurationMS  = $MS1 - $MS2
   If $Operator         = "+" Then $DurationMS  = $MS1 + $MS2
   If $Operator         = "*" Then $DurationMS  = $MS1 * $MS2
   If $Operator         = "/" Then $DurationMS  = $MS1 / $MS2
;~    ConsoleWrite("$DurationMS " & $DurationMS & @CRLF)
   $DurationMS       = StringFormat('%.3f', $DurationMS / 1000)
   $Sec              = StringSplit($DurationMS, ".")
   $MSec          = StringSplit($DurationMS, ".")
   $H             = Int ($Sec[1] / 3600)
   $M             = Int(($Sec[1] - $H * 3600) / 60)
   $S             =      $Sec[1] - $H * 3600 - $M * 60
   $MS               =      $MSec[2]
   $Duration         = StringFormat('%02d:%02d:%02d.%03d', $H, $M, $S, $MS)
;~    ConsoleWrite("$Duration " & $Duration & @CRLF)
   Return $Duration
EndFunc
; ===============================================================================================================================
;
;

_Get_All_MPLSs()

; ==> _Get_All_MPLSs() ===============================================
Func _Get_All_MPLSs()
   ;Global $SourcePath = "F:\Temp Recode\ssifSource5 GUI\Titanic\BDMV Disk 2\PLAYLIST\"
;~    Global $SourcePath = ".\"
   Global $SourcePath = ".\BDMV\PLAYLIST\"
   ConsoleWrite($SourcePath & @CRLF)
   Local $FileList = _FileListToArray($SourcePath,'*.mpls', 1)
   $MPLSsCount = UBound($FileList)-1
   _ArraySort($FileList)
   For $i = 0 to UBound($FileList)-2
      Global $mfile = $FileList[$i]
      _Extract_Chapters_List()
   Next
   If @error = 1 Or @error = 4 Then
      MsgBox(0, "", "No Folders or MPLS Files Found.")
   Else
;~       MsgBox(0, "", "Done.")
   EndIf
EndFunc     ; ==> _Get_All_MPLSs()
; <== _Get_All_MPLSs() ===================================================

; ==> _Extract_Chapters_List() ===========================================
Func _Extract_Chapters_List()
   Local $info, $ch, $m2, $ps, $n = 82, $chap[1][2], $oldm2tsFile, $m2tsFile, $olddureeM2TS, $info2
   Global $m2ts[1][3]

   $size = FileGetSize($SourcePath&$mfile)
   $mpls = FileOpen($SourcePath&$mfile, 16)
   Global $caract = StringRegExp(FileRead($mpls), '[[:xdigit:]]{2}', 3)
   FileClose($mpls)
;~    _arraydisplay($caract, "fichier")

   For $i = 40 to $size-20  
      If _M2ts($i)<>0 Then
         $m2 += 1
         ReDim $m2ts[$m2+1][3]
         $res = _M2ts($i)
         $m2ts[$m2][0] = $res[0][0]
         $m2ts[$m2][1] = $res[0][1]
         $m2ts[$m2][2] = $res[0][2]
      EndIf
   Next
   $m2ts[0][0] = $m2
;~    _arraydisplay($m2ts, "durées")

   $in = _GetZeBin($n)
;~    $info &= "point d'entrée" & @TAB & _Display($in) & @crlf

   $chap[0][1] = -1

   For $i = $n+8 to $size-4
      If _Chapitres($i)<>0 Then
         $ch += 1
         ReDim $chap[$ch+1][2]
         $pos = $i-4
         $res1 = _Chapitres($i)
         $chap[$ch][0] = $res1[0][0]
         $chap[$ch][1] = $res1[0][1]
         
         If $chap[$ch][1]<>$chap[$ch-1][1] Then
            $m2tsFile = $m2ts[$chap[$ch][1]+1][0]
;~             If  $oldm2tsFile <> "" and $m2tsFile<>$oldm2tsFile Then $info &= @TAB&@TAB&@TAB& ">>Chapitre " & StringFormat("%02i", $ch) & @TAB & $dureeM2TS & @CRLF
            If  $oldm2tsFile <> "" and $m2tsFile<>$oldm2tsFile Then $info2 = @TAB&@TAB&@TAB& ">Chapitre " & StringFormat("%02i", $ch) & @TAB & $dureeM2TS & @CRLF
            $ps += $m2ts[$chap[$ch][1]+1][1]
            $dureeM2TS = _Display($ps)
                 
            $oldm2tsFile = $m2tsFile

         _UDF_WFS_H_M_S_msec_Diff( $olddureeM2TS, "-", $dureeM2TS, $Duration)
         $info &= $m2tsFile &" ("& _UDF_WFS_H_M_S_msec_Diff( $dureeM2TS, "-", $olddureeM2TS, $Duration) &")" & @CRLF & $info2 ;

         $olddureeM2TS = $dureeM2TS

         EndIf
         $info &= @TAB&@TAB&@TAB& "Chapitre " & StringFormat("%02i", $ch) & @TAB & _Display($chap[$ch][0]-$in) & @CRLF

      EndIf
   Next
;~    $info &= @TAB & $oldm2tsFile & @TAB & $dureeM2TS & @CRLF
   Msgbox(0, "MPLS Infos", $mfile &" ("&$dureeM2TS&")" &@CRLF&@CRLF & $info)
EndFunc


;================================================
Func _M2ts($pos)
   Local $array[1][3], $char[20]
   For $i = 0 to 19
      $char[$i] = "0x" & $caract[$pos+$i]
   Next
   Local $ext = StringFormat("%.2X%.2X%.2X%.2X", $char[5], $char[6], $char[7], $char[8])
   If $ext = "4D325453" Then
      $nbr = Chr($char[0]) & Chr($char[1])& Chr($char[2]) & Chr($char[3]) & Chr($char[4])
      $in1 = "0x" & StringFormat("%.2X%.2X%.2X%.2X", $char[12], $char[13], $char[14], $char[15])
      $out1 = "0x" & StringFormat("%.2X%.2X%.2X%.2X", $char[16], $char[17], $char[18], $char[19])
      $dur1 = $out1-$in1
      $array[0][0] = $nbr & ".m2ts" ;   m2ts 2D & 3D
      $array[0][1] = $dur1  
      $array[0][2] = _Display($dur1)
      Return $array
   Else
      Return 0
   EndIf
EndFunc

Func _GetZeBin($pos)
   $bin = "0x" & $caract[$pos] & $caract[$pos+1]& $caract[$pos+2] & $caract[$pos+3]
   Return $bin
EndFunc

Func _Chapitres($pos)
   Local $char[12], $add, $array[1][2]
   For $i = 0 to 11
      $char[$i] = "0x" & $caract[$pos-8+$i]
   Next
   Local $postref = StringFormat("%.2X%.2X%.2X%.2X", $char[8], $char[9], $char[10], $char[11])
   If $postref = "FFFF0000" Then
      Local $backref = StringFormat("%.2X%.2X%.2X%.2X", $char[0], $char[1], $char[2], $char[3])
      Local $ref = "0x" & StringFormat("%.2X%.2X%.2X%.2X", $char[4], $char[5], $char[6], $char[7])
      For $i = 0 to $m2ts[0][0]
         If $backref = "0001000" & $i Then
            For $j = 1 to $i
               $add += $m2ts[$j][1]
            Next
            $array[0][0] = $ref + $add
            $array[0][1] = $i
            Return $array
         EndIf
      Next
   Else
      Return 0
   EndIf
EndFunc

Func _Display($pts)
   $sec = $pts/45000
   Return StringFormat("%02.0f:%02.0f:%06.3f", Floor($sec/3600), Floor(Mod($sec, 3600)/60), Mod($sec, 60) )
EndFunc
Fichiers joints
Extraire les chapîtres d'une playlist AVCHD.rar
(3.1 Kio) Téléchargé 94 fois
Je suis diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- 2025/03/17 --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Cool: Base64 Compression Tool --- des fichiers dans vos scripts
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Extraire les chapîtres d'une playlist AVCHD

#27

Message par mikell »

Quoi ?! tu t'imagines sérieusement que je vais replonger maintenant dans ce truc infernal qui m'avait il y a 4 ans fait cramer un nombre non négligeable de neurones ?
Surtout que j'ai tout oublié, en plus :roll:
Même si tu m'offrais le dernier déambulateur de chez Lamborghini je n'y toucherais quand même pas
Désolé
Image
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Extraire les chapîtres d'une playlist AVCHD

#28

Message par orax »

mikell a écrit :Quoi ?! tu t'imagines sérieusement que je vais replonger maintenant dans ce truc infernal
Image
Plutôt que de tout faire avec AutoIt, une autre solution serait d'utiliser un programme externe (en ligne de commande, de préférence). Celui-ci pourrait être appelé par le script. Par contre, je n'en connais pas. J'ai fait une recherche rapide sans rien trouver.
J'essayerai (pour m'amuser*) de voir si je trouve ce qui cloche dans le code, mais j'en doute !!

* pour m'autoflageller
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 321
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [..] Extraire les chapîtres d'une playlist AVCHD

#29

Message par Anthony »

mikell
Tu avais déjà fait un très beau boulot à l'époque, c'est vrai mais là je me suis un peu équipé pour bosser à ma pause entre 12h et 13h sur mon projet de lecteur encodeur vidéo (Blu-Ray par platlist et mkv 3D) pour casque VR mais tu as déjà fait beaucoup, les bases sont là et encore merci ;)

orax
J'adore le chat Potté d’ailleurs mon adresse mail date de la sortie du premier de la quadrilogie Shrek (j'adore) et mon cas est bien représenté sur la capture d'écran Potté.
Image
Ces logiciels existent, il y a eac3to ou tsMuxeR mais tous les deux demandent l'analyse et la présence de tous les fichiers physiques et l'opération est plutôt longue et fait pas mal pédaler les lecteurs Blu-Ray (le mien est vieillissant) pour juste récupérer des informations alors que je cherche la rapidité grâce à l'autonomie.
J'avais tenté une interface sous Multimedia Builder mais pas aussi puissant que autoit ici: http://forum.doom9.org/showthread.php?t=169651&page=3
Voici mon but, vous savez tout.

Merci à tous les deux pour l'aide apportée ;)
Je suis diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- 2025/03/17 --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Cool: Base64 Compression Tool --- des fichiers dans vos scripts
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Extraire les chapîtres d'une playlist AVCHD

#30

Message par mikell »

orax a écrit :J'essayerai (pour m'amuser*) de voir si je trouve ce qui cloche dans le code, mais j'en doute !!
* pour m'autoflageller
La souscription pour un pack "neurostimulants / prothèse corticale / déambulateur" est ouverte :twisted:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 321
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [..] Extraire les chapîtres d'une playlist AVCHD

#31

Message par Anthony »

" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
:P
Je suis diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- 2025/03/17 --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Cool: Base64 Compression Tool --- des fichiers dans vos scripts
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 321
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [..] Extraire les chapîtres d'une playlist AVCHD

#32

Message par Anthony »

Merci quand même...
Projet abandonné, je n'ai pas le niveau... au moins j'aurais essayé :|
Je suis diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- 2025/03/17 --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Cool: Base64 Compression Tool --- des fichiers dans vos scripts
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 321
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [..] Extraire les chapîtres d'une playlist AVCHD

#33

Message par Anthony »

Pour ceux qui seraient tenté voici de quoi travailler sur quelques mpls
00000-2D.mpls
00000-3D-AVC.mpls ; (AVC/MVC)
00010-2D.mpls
00011-3D-MVC.mpls ; (MVC/AVC)
First view of SSIF.exe ; pour connaitre la vue 3D de base AVC/MVC ou MVC/AVC
First view of SSIF.exe: http://forum.doom9.org/showthread.php?p ... ost1635457
Dossiers PLAYLIST et BDMV.rar
(302.83 Kio) Téléchargé 102 fois
Je suis diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- 2025/03/17 --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Cool: Base64 Compression Tool --- des fichiers dans vos scripts
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 321
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [..] Extraire les chapîtres d'une playlist AVCHD

#34

Message par Anthony »

Mon UDF à l'époque dés fois que çà puisse servir (First view of SSIF.exe)
;
; ===== #Get first 3D view from Blu-Ray Disc mpls# ==============================================================================
Local $mpls, $View
Func _UDF_Get_First_3D_View( $mpls, ByRef $View)
   If Not FileExists( $mpls) Then
     $View           = "?"
     Return
   EndIf
   $FileOpen      = FileOpen($mpls, 16)
   $Caract        = StringRegExp(FileRead($FileOpen), '[[:xdigit:]]{2}', 3)
   FileClose($FileOpen)
   $Hexa       = $Caract[56]
   $HexValue      = StringSplit($Hexa,'')
   $Binary        = ''
   $Bits       = StringSplit("0000|0001|0010|0011|0100|0101|0110|0111|1000|1001|1010|1011|1100|1101|1110|1111",'|')
   For $n            = 1 to $HexValue[0]
     $Binary         &= $Bits[Dec($HexValue[$n])+1]
   Next
   $StringSplit   =  StringSplit($Binary, '')
   If $StringSplit[4]   = 1 Then
     $View           = "MVC"
   Else
     $View           = "AVC"
   EndIf
   Return $View
EndFunc
; ===============================================================================================================================
;
;
Je suis diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- 2025/03/17 --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Cool: Base64 Compression Tool --- des fichiers dans vos scripts
Répondre