{"id":3964,"date":"2022-12-31T10:16:38","date_gmt":"2022-12-31T10:16:38","guid":{"rendered":"http:\/\/kevinbk.com\/?p=3964"},"modified":"2022-12-31T10:16:41","modified_gmt":"2022-12-31T10:16:41","slug":"como-converter-srt-para-texto-com-regex-e-javascript","status":"publish","type":"post","link":"https:\/\/kevinbk.com\/vi\/cach-chuyen-doi-srt-thanh-van-ban-voi-regex-va-javascript\/","title":{"rendered":"C\u00e1ch chuy\u1ec3n \u0111\u1ed5i SRT th\u00e0nh v\u0103n b\u1ea3n b\u1eb1ng Regex v\u00e0 Javascript"},"content":{"rendered":"

B\u1ea1n \u0111ang t\u00ecm c\u00e1ch chuy\u1ec3n \u0111\u1ed5i c\u00e1c t\u1ec7p v\u00e0 v\u0103n b\u1ea3n SRT (ph\u1ee5 \u0111\u1ec1 cho phim, s\u00ea-ri v\u00e0 phim ho\u1ea1t h\u00ecnh) th\u00e0nh v\u0103n b\u1ea3n b\u1eb1ng regex v\u00e0 javascript? B\u00e0i vi\u1ebft n\u00e0y s\u1ebd gi\u00fap b\u1ea1n v\u1edbi \u0111i\u1ec1u n\u00e0y v\u00e0 c\u00e1c l\u1ef1a ch\u1ecdn thay th\u1ebf kh\u00e1c. <\/p>\n\n\n\n

C\u00e1ch chuy\u1ec3n \u0111\u1ed5i SRT th\u00e0nh v\u0103n b\u1ea3n b\u1eb1ng Javascript v\u00e0 Regex<\/h2>\n\n\n\n

\u0110\u1ec3 chuy\u1ec3n \u0111\u1ed5i t\u1ec7p ph\u1ee5 \u0111\u1ec1 SRT (SubRip Text) th\u00e0nh v\u0103n b\u1ea3n b\u1eb1ng regex trong JavaScript, b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng ch\u1ee9c n\u0103ng sau:<\/p>\n\n\n\n

function convertSrtToText(srt) {\n  \/\/ Use a express\u00e3o regular para remover os n\u00fameros de linha e as marcas de tempo\n  return srt.replace(\/^\\d+\\n([\\d:,]+ --> [\\d:,]+\\n)\/gm, '');\n}<\/code><\/pre>\n\n\n\n

H\u00e0m n\u00e0y s\u1eed d\u1ee5ng m\u1ed9t bi\u1ec3u th\u1ee9c ch\u00ednh quy \u0111\u1ec3 x\u00f3a s\u1ed1 d\u00f2ng v\u00e0 d\u1ea5u th\u1eddi gian kh\u1ecfi t\u1ec7p SRT. N\u00f3 tr\u1ea3 v\u1ec1 v\u0103n b\u1ea3n c\u00f2n l\u1ea1i c\u1ee7a t\u1ec7p SRT, tr\u1eeb \u0111i s\u1ed1 d\u00f2ng v\u00e0 d\u1ea5u th\u1eddi gian.<\/p>\n\n\n\n

\u0110\u1ec3 s\u1eed d\u1ee5ng ch\u1ee9c n\u0103ng n\u00e0y, ch\u1ec9 c\u1ea7n g\u1ecdi n\u00f3 chuy\u1ec3n n\u1ed9i dung t\u1ec7p SRT d\u01b0\u1edbi d\u1ea1ng tham s\u1ed1, nh\u01b0 trong v\u00ed d\u1ee5 sau:<\/p>\n\n\n\n

var srt = \"1\\n00:00:10,500 --> 00:00:13,000\\nTexto da linha 1\\n\\n2\\n00:00:13,500 --> 00:00:16,000\\nTexto da linha 2\\n\\n3\\n00:00:16,500 --> 00:00:19,000\\nTexto da linha 3\\n\";\nvar text = convertSrtToText(srt);\nconsole.log(text); \/\/ Exibe \"Texto da linha 1\\n\\nTexto da linha 2\\n\\nTexto da linha 3\\n\"<\/code><\/pre>\n\n\n\n

Chuy\u1ec3n \u0111\u1ed5i SRT b\u1eb1ng M\u00f4-\u0111un JS<\/h2>\n\n\n\n

C\u00f3 c\u00e1c l\u1ef1a ch\u1ecdn thay th\u1ebf kh\u00e1c \u0111\u1ec3 chuy\u1ec3n \u0111\u1ed5i t\u1ec7p SRT th\u00e0nh v\u0103n b\u1ea3n b\u1eb1ng JavaScript. D\u01b0\u1edbi \u0111\u00e2y l\u00e0 m\u1ed9t s\u1ed1 t\u00f9y ch\u1ecdn b\u1ea1n c\u00f3 th\u1ec3 xem x\u00e9t:<\/p>\n\n\n\n

m\u00f4-\u0111un srt-to-vtt<\/strong><\/h3>\n\n\n\n
    \n
  • S\u1eed d\u1ee5ng m\u00f4-\u0111un srt-to-vtt: M\u00f4-\u0111un srt-to-vtt l\u00e0 m\u1ed9t g\u00f3i npm c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 chuy\u1ec3n \u0111\u1ed5i c\u00e1c t\u1ec7p SRT th\u00e0nh v\u0103n b\u1ea3n. \u0110\u1ec3 s\u1eed d\u1ee5ng n\u00f3, b\u1ea1n c\u1ea7n c\u00e0i \u0111\u1eb7t n\u00f3 b\u1eb1ng l\u1ec7nh:<\/li>\n\n\n\n
  • npm c\u00e0i \u0111\u1eb7t srt-to-vtt<\/code><\/li>\n\n\n\n
  • Sau \u0111\u00f3 s\u1eed d\u1ee5ng \u0111o\u1ea1n m\u00e3 sau:<\/li>\n<\/ul>\n\n\n\n
    const srtToVtt = require('srt-to-vtt');\n\nsrtToVtt.convertSrtToVtt('path\/to\/input.srt', 'path\/to\/output.vtt', (err) => {\n  if (err) {\n    console.error(err);\n  } else {\n    console.log('Convers\u00e3o conclu\u00edda com sucesso');\n  }\n});<\/code><\/pre>\n\n\n\n

    m\u00f4-\u0111un srt-to-txt<\/h3>\n\n\n\n

    S\u1eed d\u1ee5ng m\u00f4-\u0111un srt-to-txt: M\u00f4-\u0111un srt-to-txt l\u00e0 m\u1ed9t g\u00f3i npm kh\u00e1c c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 chuy\u1ec3n \u0111\u1ed5i t\u1ec7p SRT th\u00e0nh v\u0103n b\u1ea3n. \u0110\u1ec3 s\u1eed d\u1ee5ng n\u00f3, b\u1ea1n c\u1ea7n c\u00e0i \u0111\u1eb7t n\u00f3 b\u1eb1ng l\u1ec7nh:<\/p>\n\n\n\n

      \n
    • npm c\u00e0i \u0111\u1eb7t srt-to-txt<\/code><\/li>\n<\/ul>\n\n\n\n
      const srtToTxt = require('srt-to-txt');\n\nsrtToTxt('path\/to\/input.srt').then((text) => {\n  console.log(text);\n});<\/code><\/pre>\n\n\n\n

      SubRip-Th\u01b0 vi\u1ec7n v\u0103n b\u1ea3n<\/strong><\/h3>\n\n\n\n

      S\u1eed d\u1ee5ng th\u01b0 vi\u1ec7n SubRip-Text: Th\u01b0 vi\u1ec7n SubRip-Text l\u00e0 m\u1ed9t th\u01b0 vi\u1ec7n JavaScript c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 \u0111\u1ecdc v\u00e0 thao t\u00e1c v\u1edbi c\u00e1c t\u1ec7p SRT. \u0110\u1ec3 s\u1eed d\u1ee5ng n\u00f3, b\u1ea1n c\u1ea7n c\u00e0i \u0111\u1eb7t n\u00f3 b\u1eb1ng l\u1ec7nh: <\/p>\n\n\n\n

        \n
      • npm c\u00e0i \u0111\u1eb7t subrip-text<\/strong><\/li>\n<\/ul>\n\n\n\n
        const SubRipText = require('subrip-text');\n\nconst srt = new SubRipText('path\/to\/input.srt');\n\nconsole.log(srt.getPlainText());<\/code><\/pre>\n\n\n\n

        C\u00e1c c\u00e1ch kh\u00e1c \u0111\u1ec3 chuy\u1ec3n \u0111\u1ed5i SRT sang TXT<\/h2>\n\n\n\n

        C\u00f3 nhi\u1ec1u c\u00e1ch kh\u00e1c \u0111\u1ec3 chuy\u1ec3n \u0111\u1ed5i t\u1ec7p SRT th\u00e0nh v\u0103n b\u1ea3n (TXT). M\u1ed9t s\u1ed1 t\u00f9y ch\u1ecdn b\u1ea1n c\u00f3 th\u1ec3 xem x\u00e9t l\u00e0:<\/p>\n\n\n\n

          \n
        1. S\u1eed d\u1ee5ng c\u00f4ng c\u1ee5 chuy\u1ec3n \u0111\u1ed5i tr\u1ef1c tuy\u1ebfn:<\/strong> c\u00f3 m\u1ed9t s\u1ed1 tr\u00ecnh chuy\u1ec3n \u0111\u1ed5i tr\u1ef1c tuy\u1ebfn cho ph\u00e9p b\u1ea1n chuy\u1ec3n \u0111\u1ed5i t\u1ec7p SRT th\u00e0nh v\u0103n b\u1ea3n. Ch\u1ec9 c\u1ea7n t\u1ea3i t\u1ec7p SRT l\u00ean v\u00e0 tr\u00ecnh chuy\u1ec3n \u0111\u1ed5i s\u1ebd th\u1ef1c hi\u1ec7n chuy\u1ec3n \u0111\u1ed5i cho b\u1ea1n. <\/li>\n\n\n\n
        2. S\u1eed d\u1ee5ng tr\u00ecnh so\u1ea1n th\u1ea3o v\u0103n b\u1ea3n: <\/strong>nhi\u1ec1u tr\u00ecnh so\u1ea1n th\u1ea3o v\u0103n b\u1ea3n nh\u01b0 Notepad++ ho\u1eb7c Sublime Text c\u00f3 c\u00e1c t\u00f9y ch\u1ecdn \u0111\u1ec3 x\u00f3a s\u1ed1 d\u00f2ng v\u00e0 d\u1ea5u th\u1eddi gian kh\u1ecfi t\u1ec7p SRT. B\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng c\u00e1c t\u00f9y ch\u1ecdn n\u00e0y \u0111\u1ec3 x\u00f3a c\u00e1c th\u00e0nh ph\u1ea7n n\u00e0y v\u00e0 l\u01b0u t\u1ec7p d\u01b0\u1edbi d\u1ea1ng t\u1ec7p v\u0103n b\u1ea3n th\u00f4ng th\u01b0\u1eddng.<\/li>\n\n\n\n
        3. S\u1eed d\u1ee5ng t\u1eadp l\u1ec7nh d\u00f2ng l\u1ec7nh: <\/strong>n\u1ebfu b\u1ea1n \u0111ang l\u00e0m vi\u1ec7c v\u1edbi s\u1ed1 l\u01b0\u1ee3ng l\u1edbn t\u1ec7p SRT v\u00e0 c\u1ea7n th\u1ef1c hi\u1ec7n chuy\u1ec3n \u0111\u1ed5i theo c\u00e1ch t\u1ef1 \u0111\u1ed9ng, th\u00ec c\u00f3 th\u1ec3 h\u1eefu \u00edch khi s\u1eed d\u1ee5ng t\u1eadp l\u1ec7nh d\u00f2ng l\u1ec7nh nh\u01b0 t\u1eadp l\u1ec7nh trong b\u00e0i vi\u1ebft n\u00e0y. <\/li>\n<\/ol>","protected":false},"excerpt":{"rendered":"

          T\u00ecm c\u00e1ch chuy\u1ec3n \u0111\u1ed5i c\u00e1c t\u1ec7p v\u00e0 v\u0103n b\u1ea3n SRT (ph\u1ee5 \u0111\u1ec1 cho phim, s\u00ea-ri v\u00e0 phim ho\u1ea1t h\u00ecnh) th\u00e0nh v\u0103n b\u1ea3n b\u1eb1ng regex<\/p>","protected":false},"author":1,"featured_media":3966,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/kevinbk.com\/wp-content\/uploads\/2022\/12\/str.jpg","_links":{"self":[{"href":"https:\/\/kevinbk.com\/vi\/wp-json\/wp\/v2\/posts\/3964"}],"collection":[{"href":"https:\/\/kevinbk.com\/vi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kevinbk.com\/vi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kevinbk.com\/vi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kevinbk.com\/vi\/wp-json\/wp\/v2\/comments?post=3964"}],"version-history":[{"count":2,"href":"https:\/\/kevinbk.com\/vi\/wp-json\/wp\/v2\/posts\/3964\/revisions"}],"predecessor-version":[{"id":3967,"href":"https:\/\/kevinbk.com\/vi\/wp-json\/wp\/v2\/posts\/3964\/revisions\/3967"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kevinbk.com\/vi\/wp-json\/wp\/v2\/media\/3966"}],"wp:attachment":[{"href":"https:\/\/kevinbk.com\/vi\/wp-json\/wp\/v2\/media?parent=3964"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kevinbk.com\/vi\/wp-json\/wp\/v2\/categories?post=3964"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}