Permalänk
Medlem

sed-proffs sökes!

jag har ett litet jobbigt problem med en .srt-fil som jag hoppas då hjälp med - det fattas nämligen en siffra (oftast) i tidskoden, vilken gör att min spelare inte går vidare från första posten och visar samma rad genom hela filmen. (det är min hypotes iaf.)

exempel 1: det typiska fallet

står:

00:04:55,49 --> 00:04:58,44

skall stå:

00:04:55,490 --> 00:04:58,440

exempel 2: en annan lurighet

står:

00:09:24,89 --> 00:09:29

skall stå:

00:09:24,890 --> 00:09:29,000

Visa signatur

bitte kein Hotlinking!

Permalänk
Medlem

Finns exempel 1 och 2 blandat i samma fil? Om inte så borde detta fungera (OBS: _borde_):

Ex1)
cat org.srt | awk '{ printf $1 "0 " $2 " " $3 "0\n"}' > new.srt

Ex2)
cat org.srt | awk '{ printf $1 "0 " $2 " " $3 ",000\n"}' > new.srt

Visa signatur

qw q b

Permalänk
Medlem

ja det är blandat.
det finns även annan text (själva undertexten exempelvis) i samma fil, men inte på samma rad.

Visa signatur

bitte kein Hotlinking!

Permalänk
Medlem

sed känns litet 80-tal men här är ett pythonskript som bör fixa det.
http://rafb.net/p/r4Fqea19.html

Visa signatur

enlisy Systemd
WS1: X2 4400+ | WS2: X2 4000+ | Laptop: Athlon2 P520 | Server: XP 2400+

Permalänk
Medlem

Observera att jag inte har tillgång till någon sed-kapabel miljö så jag kan inte testa - har säker skrivit nått tecken fel

Har du blanksteg efter sista siffrorna på raden? (Antar att det är slut på raden där)

Vet inte hur hård matchning du behöver (hur mycket annat som kan matchas), men jag skulle nog sikta på något liknande:

Exempel 1 fixar du med:

sed fil.srt 's/\(..:..:..,..\) /\10 /' | sed 's/\(..:..:..,..\)$/\10/' > tmp.srt

Första sed-satsen fixar felet till vänster om pilen och den andra det som är sist på raden (saknar blanksteg efter) - Gillar att dela upp det så man kan köra more och kolla att respektive steg funkar

Om du även skall täcka in att sista värdet saknas helt (Exempel 2):

sed tmp.srt 's/\(..:..:..\) /\1,000 /' | sed 's/\(..:..:..\)$/\1,000/' > fixad_fil.srt

Kommer inte ihåg om semikolon eller komma är skyddade tecken i sed ... i så fall gör man bara backslash före eftersom jag vill matcha mot det faktiska tecknet ...

*EDIT*

SED är lite som VI ... rätt lowtech men är ibland rätt najs att ha om det inte finns sånna där färglådor eller hightech verktyg

AWK är lite gränsfall

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Jonos
sed känns litet 80-tal men här är ett pythonskript som bör fixa det.
http://rafb.net/p/r4Fqea19.html

ah, det verkar fungera alldeles utmärkt. tack!
jag som precis tänkte dra fram min 'byte of python'-kompendie...

Citat:

SED är lite som VI ... rätt lowtech men är ibland rätt najs att ha om det inte finns sånna där färglådor eller hightech verktyg

jag tänkte att det var det bästa sättet att intressera de av 'rätta virket' så att säga...

Visa signatur

bitte kein Hotlinking!

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av Jonos
sed känns litet 80-tal men här är ett pythonskript som bör fixa det.
http://rafb.net/p/r4Fqea19.html

Får jag påminna om att Python även känns 80-tal? ;D

Började åtminstonde planeras då.

Dessutom, sed gör sitt jobb utmärkt, dessutom bra mycket smidigare än ditt "lilla" Python-skript där så jag ser ingen anledning till att klanka ner på det (ursäkta om jag missförstod ditt uttalande ovan dock).

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av tubgirl
jag tänkte att det var det bästa sättet att intressera de av 'rätta virket' så att säga...

Hehe ... det funkade

Finns inget härligare än att se folk köra fast när de märker att det endast finns VI som editor, när dom i vanliga fall tycker att Xemacs är för lowtech

Aaaaahh ... underbart ...

Bra att kunna: VI, sed, find, sort, uniq, grep

Tycker det är förvånansvärt ofta som folk sitter där med 'arg list too long' i sin ls/rm/mv/cp ... muahaha

Permalänk
Inaktiv

Oneliner:

$ cat test.srt 00:04:55,491 --> 00:04:58,44 00:04:55,490 --> 00:04:58,44 00:04:55,49 --> 00:04:58,443 junk 00:09:24 --> 00:09:29 00:09:24,892 --> 00:09:29 00:09:24 --> 00:09:29,49 more junk $ sed -E -e 's/(,[0-9]{2})(( |$))/\10\2/g' -e 's/(:[0-9]{2})(( |$))/\1,000\2/g' < test.srt > new.srt $ cat new.srt 00:04:55,491 --> 00:04:58,440 00:04:55,490 --> 00:04:58,440 00:04:55,490 --> 00:04:58,443 junk 00:09:24,000 --> 00:09:29,000 00:09:24,892 --> 00:09:29,000 00:09:24,000 --> 00:09:29,490 more junk