Forum général.général Aide sous-titres vidéo

Posté par  . Licence CC By‑SA.
Étiquettes :
3
23
sept.
2025

Bonjour,

J'ai un fichier de sous-titres .srt pour une vidéo.

Malheureusement, celui-ci est mal formaté.

Il me faudrait effacer toutes les lignes vides entre le code temporel et le texte.

Par exemple :

00:02:51,459 --> 00:02:53,770

Christian trouvera ton tire-bouchon on

00:02:53,770 --> 00:02:53,780
Christian trouvera ton tire-bouchon on

00:02:53,780 --> 00:02:55,210
Christian trouvera ton tire-bouchon on
peut toujours trouver un tire-bouchon eh

00:02:55,210 --> 00:02:55,220
peut toujours trouver un tire-bouchon eh

Devrait être :

00:02:51,459 --> 00:02:53,770
Christian trouvera ton tire-bouchon on

00:02:53,770 --> 00:02:53,780
Christian trouvera ton tire-bouchon on

00:02:53,780 --> 00:02:55,210
Christian trouvera ton tire-bouchon on
peut toujours trouver un tire-bouchon eh

00:02:55,210 --> 00:02:55,220
peut toujours trouver un tire-bouchon eh

Je dois donc effacer la ligne vide du début entre

00:02:51,459 --> 00:02:53,770

et

Christian trouvera ton tire-bouchon on

Comme le film dure une heure et qu'il y a souvent cette erreur, comment faire ? Je ne souhaite pas le faire à la main.

Merci des conseils.

  • # je ferai en perl

    Posté par  . Évalué à 6 (+3/-0). Dernière modification le 23 septembre 2025 à 15:43.

    #!/usr/bin/perl
    
    use strict;
    
    while(my $line = <>){
       if( $line =~ /-->/) {
          print $line;
          while( ($line = <>) =~ /^\s*$/ ){}
        }
      print $line;
    }
    
    }

    a noter que j'ai fais du explicite, on pourrait virer les $line et se contenter de $_, et si y'a plusieurs lignes vide je les manges toute

    while(my $line = <>){
       if( $line =~ /-->/) {
          print $line;
          $line = <>;
          if ( $line =~ /\w/) {
            print $line;
          }
          $line = <>;
        }
      print $line;
    }

    n'en mange qu'une seule :)

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

    • [^] # Re: je ferai en perl

      Posté par  . Évalué à 5 (+3/-0). Dernière modification le 23 septembre 2025 à 17:24.

      J'ai l'impression que ton truc supprime toutes les lignes vides ce qui n'est pas le résultat escompté.

      Un simple sed ou awk devrait suffire, exemple (il ya sûrement beaucoup plus concis) :

      sed -i '/^$/d;/\,[0-9]\{3\}/i\\n' fichier.srt

      la première commande /^$/d supprime toutes les lignes vides
      la seconde /\,[0-9]\{3\}/i\\n insère un saut de ligne après le motif une virgule suivie de trois chiffres

      • [^] # Re: je ferai en perl

        Posté par  . Évalué à 4 (+2/-0).

        hum, je n'ai pas les yeux en fac des trous…
        Effectivement j'aurais pus filtrer sur le motif -->, ce qui simplifie un peu :

        sed -i '/^$/d;/-->/i\\r' fichier.srt

        et le saut de ligne est inséré avant la ligne contenant ce motif

      • [^] # Re: je ferai en perl

        Posté par  . Évalué à 5 (+2/-0).

        J'ai l'impression que ton truc supprime toutes les lignes vides ce qui n'est pas le résultat escompté.

        Non je vire les lignes vides après --> dans la première version et une ligne vide maximum après -->

        Par contre si y'a que des lignes vides entre 2 timestamp la première version risque de poser problème :)

        La solution bourrinne virant toutes les lignes vides puis en ajoutant juste une avant celle avec --> est pas mal :)

        while(<>){
           print "\n" if (/-->/);
           print if (/\w/);
        }

        ce qui peut bien évidemment se faire en ligne de commande

        perl -ne '{print "\n" if (/-->/);print if (/\w/) }'

        Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • # Merci

    Posté par  . Évalué à 4 (+3/-0).

    Merci à vous deux, ça m'a donné des idées et en cherchant j'ai trouvé (pas tout seul hein) ça en cli :

    perl -ne 'chomp; if(/-->/){print "\n$\n"; $p=0; next} if(/\S/){print "$\n"; $p=1}' fichier.srt > fichier_nettoye.srt

    arnauld

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.