Parse srt et ass pour séparer toutes les lignes.

boozaa 86f594b840 README 10 months ago
src dec48bc226 first commit 10 months ago
.gitignore 4a62cc854b README 10 months ago
README.md 86f594b840 README 10 months ago
pom.xml dec48bc226 first commit 10 months ago

README.md

SubParser

Librairie java pour découper un fichier de sous-titres en entrée vers un Objet facilement manipulable.

Accepte les fichiers .srt en entrée et renvoit une liste de SubBlock en sortie ou bien crée un fichier yaml.

Un objet SubBlock contient des SubLine. Une SubLine est une ligne de conversation avec les index temporels.

Un SubBlock peut contenir plusieurs SubLine car il stocke les lignes "complètes" qui se suivent en gardant leurs index temporels ainsi que leur index d'ordre dans le fichier original.

Exemples:

SubLine en sortie

File in = new File( "Le.Fichier.srt" );

SubParser parser = new SubParser().setInputFile( in )
                        .setInputFormat( InputFormat.SRT )
                        .setOutputFormat( OutputFormat.SUBLINES );

ArrayList<SubBlock> blocks = parser.parse();

for( SubBlock blk : blocks ){                
    System.out.println( "Block #" + blk.getNumber() );  
    for( SubLine line : blk.getSubLines() ){
        System.out.println( "    " + line.getNumber() ); 
        System.out.println( "    " + line.getTimings().start + " -> " + line.getTimings().end );
        System.out.println( "    " + line.getContent() );                 
    }               
    System.out.println( "" );            
}
Résultat:
Block #1
    1
    00:00:00,353 -> 00:00:03,739
    Précédemment...

Block #2
    2
    00:00:03,958 -> 00:00:05,733
    - On les a fait fuir. - On devrait les poursuivre.

YML sous la forme d'un SubConfiguration en mémoire

File in = new File( "Le.Fichier.srt" );

SubParser parser = new SubParser().setInputFile( in )
                        .setInputFormat( InputFormat.SRT )
                        .setOutputFormat( OutputFormat.YML );

SubConfiguration subConfig = parser.parse();

for( String blockId : subConfig.getKeys( "blocks" ) ){
    System.out.println( "Block #" + blockId );
    
    for( String lineId : subConfig.getKeys( "blocks." + blockId + ".lines" ) ){
        System.out.println( "  Ligne #" + lineId );
        final String ymlNode    = "blocks." + blockId + ".lines." + lineId;
        final String start      = subConfig.getString( ymlNode + ".timings.start.string" );
        final String end        = subConfig.getString( ymlNode + ".timings.end.string" );
        final String content    = subConfig.getString( ymlNode + ".line" );
        System.out.println( "    " + start + " -> " + end + " - " + content );                
    }
    
}
Résultat:
Block #1
  Ligne #1
    00:00:00.353 -> 00:00:03.739 - Précédemment...
Block #2
  Ligne #2
    00:00:03.958 -> 00:00:05.733 - - On les a fait fuir. - On devrait les poursuivre.

YML sous la forme d'un SubConfiguration en fichier

File in     = new File( "Le.Fichier.srt" );
File out    = new File( "output.yml" );

SubParser parser = new SubParser().setInputFile( in )
                    .setInputFormat( InputFormat.SRT )
                    .setOutputFile( out )
                    .setOutputFormat( OutputFormat.YML );

parser.parse();

Résultat dans le fichier de sortie config.yml:
blocks:
  '1':
    lines:
      '1':
        timings:
          start:
            string: '00:00:00.353'
            long: -3599647
          end:
            string: '00:00:03.739'
            long: -3596261
        line: Précédemment...
  '2':
    lines:
      '2':
        timings:
          start:
            string: '00:00:03.958'
            long: -3596042
          end:
            string: '00:00:05.733'
            long: -3594267
        line: '- On les a fait fuir. - On devrait les poursuivre.'