dimanche 25 février 2007

Car/sec. dans SubtitleWorkshop ?
(Enrichir Subitle Workshop - 3)

Mmbon... je devrais peut-être ouvrir une catégorie *Enrichir SW* non ? Ou peut-être aurais-je dû opter pour un système de blog gérant les sous-catégories. Bref, revenons à nos moutons...

une petite image qui en dit long, non ?

(J'en parlais hier, les scripts permettent d'enrichir aisément SW).

Bien sûr, SW permet de gérer des durées minimales respectant un équivalent de ce fameux barême des 25 caractères/seconde via ses outils internes (Shift+Ctrl+R et Shift+Ctrl+Y, si vous n'avez jamais testé ces deux gemmes de SW).

Néanmois, une information de vitesse en car/sec, est peut-être plus pratique et visualisable que de définir la durée d'affichage d'un caractère en ms.


On peut aussi y voir deux autres avantages :
  • L'information car/sec est familière aux habitués de VisualSubSync qui gardent SubtitleWorkshop sous le coude, pour ses fonctions de corrections bien pratiques en resynchro, ou pour son mode "traduction".
  • Les sous-titreurs préférants travailler essentiellement dans ce bon vieux SW, mais amenés à collaborer avec ces maniaques du "Char per Sec!" de VSS (humour), auront à présent la même information sans avoir à recharger/éditer leur fichier de sst dans un autre logiciel.

Pour les personnes intéressées :


J'ai écrit deux versions de ce script.
La première génère un fichier "raport", format txt, à la racine du disque C:\. Ainsi, vous ne changez rien dans votre interface de SW ni dans un éventuel un fichier de traduction. Et ce type de fichier peut aisément être utilisable par d'autres applications (ou par de futurs scripts suplémentaires).

La seconde, correspondant aux screenshoots, n'agit que si vous êtes en mode traduction dans SW. Elle ajoute l'information Caractères/seconde sous forme de commentaires (entre crochets), dans le fichier de traduction lorsqu'il y à dépassement d'une certaine vitesse - pour les répliques du fichier original, mais tout le monde aura compris je pense, et sinon, nouvelle image :



Lien : Récupérer les nouveaux scripts pour SW.

Lien alternatif (download plus rapide, mais limité à une semaine).

Pour rappel : placez ces scripts dans le sous-dossier "PascalScript" de SW.
Ensuite, 'Outils'>>'ScriptPascals'>>'...'.

3 commentaires:

The Lovers a dit…

Hello,

J'aimerais bien récupérer les scripts pour SW, ce script pour les 25cps serait parfait pour des traducteurs, mais les liens sont les 2 invalides. Comment faire pour les avoir SVP.

Encore merci pour ses outils.

Buz a dit…

Comme le lien est mort, voici le code source de ces deux scripts :

-----------------------
1 - CPS Report :
-----------------------
//
//
// Made by Buzcatcher

program ShowCPS;

// ---------------------------------------------

const
cpsreport = 'C:\cps_report.txt';
CRLF = ''#13''#10;
Rsep = ' | ';

var
i, n, p : Integer;
duration, sublength, cps : Integer;
subtxt, report : String;
Ms : TmemoryStream;

begin
Ms := TmemoryStream.Create;
n := GetSubtitleCount-1;

for i := 0 to n do
begin
subtxt := GetSubtitleText(i);
sublength := length(subtxt);

p := pos(''#13''#10, subtxt);
if (p>0) then
sublength := sublength - 2;

duration := GetSubtitleFinalTime(i) - GetSubtitleInitialTime(i);
cps := round((sublength * 1000)/ duration);

report := IntToStr(i+1) + Rsep + IntToStr(sublength) + ' Caractères' + Rsep + IntToStr(duration) + ' durée(en ms)' + Rsep + '==> ' + IntToStr(cps) + ' Car/seconde'
if (cps > 25) then
report := report + Rsep + 'sst TROP RAPIDE'
report := report + CRLF


Ms.Write(report, length(report));

try
Ms.SaveToFile(cpsreport);
except
MsgBox('Couldn''t write to file!', '&Ok', '', '', $20);
end;

end;
Ms.Free;
MsgBox('Rapport sauvegardé !', '&Ok', '', '', $20);
end.

Buz a dit…

Et le second script pascal pour SW :
--------------------

// --= CPS Comment (in translation) =--
// Add info about the Readability Rythm
// of the original sub (Characters per second)
// as a comment [...] in the Translation.
// ------------------------------------
// Made by Buzcatcher - feb.2007
// http://subtitle-spotting.blogspot.com/

program CPScomment;

// -------------------------------------

const
//FYI: 25cps = 40ms spotting for each char ; 20cps=50ms/char. etc.
CPSlimit = 25; //Change as you see fit.
CRLF = ''#13''#10;

var
i, j, n, pln, p1, p2 : Integer;
duration, sublength, cps : Integer;
subtxt, subtrans, report : String;

begin
if not IsTranslatedloaded then
exit;

n := GetSubtitleCount-1;

for i := 0 to n do
begin
subtxt := GetSubtitleText(i);
sublength := length(subtxt);
duration := GetSubtitleFinalTime(i) - GetSubtitleInitialTime(i);

//pure stripped text length doesn't count the CRLF in 2 line subs
pln := pos(''#13''#10, subtxt);
if (pln>0) then
sublength := sublength - 2;

cps := round((sublength * 1000)/ duration); //spotting spead.

if (cps > CPSlimit) then
begin
// To update rather than double the cps info.
subtrans := GetSubtitleTrans(i);
p1 := pos('[*', subtrans);
p2 := pos('*]', subtrans);
while ((p1>0) and (p2>0)) do
begin
subtrans := copy(subtrans, p2+2, length(subtrans)-p2);
p1 := pos('[*', subtrans);
p2 := pos('*]', subtrans);
end;
SetSubtitleTrans(i, subtrans);

//Adding [*xx C/sec*] in the translation text.
report := '[*' + IntToStr(cps) + ' Car/s*]';
subtrans := report + GetSubtitleTrans(i);
SetSubtitleTrans(i, subtrans);
j := j + 1;
end;

end;

MsgBox(IntToStr(j) + ' Sous-Titres dépassent ' + IntToStr(CPSlimit) + ' car/sec' + CRLF + 'Dépassements signalés en commentaire' + CRLF + '( dans le fichier de traduction )', '&Ok', '', '', $20);
end.