Tình hình là thời gian cách đây không lâu download phim trên torrent dường như khó khăn hơn khôn xiết nhiều, cùng subtitle giờ Việt mang đến mấy phim cũ cũ lại càng không nhiều đi, thiếu hiểu biết cái thằng subscene nó xóa sub đi làm việc gì lần khần :-s

Sau khi kiếm được cái torrent các seed, vất cả cắm máy, xong rồi lên subscene lại thấy không tồn tại cái sub như thế nào vừa căn vặn T.T chỉ mong đập bàn với hét lên >"Load lại loại sub theo từng dòng.Dòng nào quy định thời gian thì cùng hoặc trừ đi thời gian bị lệch.Những dòng còn lại giữ nguyên.

Bạn đang xem: Cách chỉnh sub bị lệch trong mpc

Định dạng tệp tin sub

Có mấy một số loại gì đó, đuôi là srt tuyệt ssa/ass, bọn họ quan trung khu đến loại thằng srt thôi.

100:00:41,010 --> 00:00:43,010Trans by OmegaQ và Alpha, sync by Alpha.200:00:43,010 --> 00:00:46,100Hoa Kỳ giờ đây là 1 vùng đất hoang tàn.300:00:47,890 --> 00:00:49,810Bên vào nó là 1 thành phố.400:00:51,770 --> 00:00:54,690Phía ngoài các bức tường nhóc con giớilà hoang mạc.500:00:54,980 --> 00:00:56,730Một trái đất bị nguyền rủa.600:00:58,240 --> 00:01:01,570Bên giữa những bức tườnglà một thành phố bị nguyền rủa,700:01:01,820 --> 00:01:05,160trải lâu năm từ Boston cho tới tận Washington DC.800:01:06,330 --> 00:01:09,000Một khung cảnh bằngbê-tông cần thiết bị phá vỡ.Chúng ta hoàn toàn có thể thấy mỗi 1 lời thoại được quy định bằng 3 dòng

Số lắp thêm tựThời điểm bước đầu xuất hiện và thời điểm biến mấtNội dung lời thoại

Bắt tay vào làm

public function subtitles() $filename = "test_sub.srt"; $output = "sync_sub.srt"; $file = fopen($output, "wb"); $output = "xEFxBBxBF" . $output; $lines = file($filename, FILE_IGNORE_NEW_LINES); $flag = 1; foreach ($lines as $key => $line) $b = mb_convert_encoding($line, "HTML-ENTITIES", "UTF-8"); if ((int)$b == $flag) $flag++; fputs($file, $b . " "); $a = $key + 1; $modify = self::changeTime($lines<$key + 1>); else if ($a == $key) fputs($file, $modify . " "); else fputs($file, $line . " "); fclose($file); Đoạn code trên dùng làm load toàn cục file theo từng dòng. Tưởng đơn giản dễ dàng nhưng có 1 vấn đề xảy ra là bị lỗi UTF-8, loay hoay mãi mới tìm kiếm được cách là chuyển định dạng của file sub về UTF-8 cùng thêm đoạn này vào:

$b = mb_convert_encoding($line, "HTML-ENTITIES", "UTF-8");thì vẫn hết bị lỗi

*

Rồi, tiếng ta đã làm nuốm nào để xác minh dòng chứa thời gian. Để ý là dòng thời gian đã nằm dưới chiếc số vật dụng tự, nắm thì mình làm 1 cái phát triển thành flag, mang đến chạy tự 1, nếu chiếc flag đó bởi với cái chứa số trang bị tự thì tăng flag++ và dòng ngay sau đó được coi là dòng chứa thời hạn -> lôi ra và chế biến. Phần lớn dòng sót lại thì duy trì nguyên.

À, cái sự việc nữa là dịp mình ghi lại ra file output đầu ra thì lại bị lỗi UTF-8 -_- haizz, giờ Việt thiệt là khổ. Ờ nhưng mà không sao, lại mất 1 hồi search tòi thì họ chỉ đề nghị thêm dòng

$output = "xEFxBBxBF" . $output;như bên trên kia là ngừng thôi, giờ thì chú tâm vào loại hàm changeTime nữa là xong.

Chỉnh lại thời gian

public function changeTime($time) $time = explode(" --> ", $time); $addTime = 85.995;//second $time0 = self::addTime($time<0>, $addTime); $time1 = self::addTime($time<1>, $addTime); return implode(" --> ", <$time0, $time1>); Ở trên bản thân cho thời hạn cần cung ứng để sub chạy chính xác là 85.995 giây để tăng cường độ khó mang lại game :v còn trên thực tiễn mà mẫu sub nào bị lệch như thế này thì vất đi chứ duy trì lại làm gì :-s

00:00:43,010 --> 00:00:46,100CHúng ta tách dòng này ra có tác dụng 2 mốc thời gian bằng cam kết tự --> và cùng thêm cho cả 2 mốc thời hạn này 1 khoảng 85.995 giây. Và đó là các bước của thằng addTime(), tôi chỉ có nhiệm vụ tách ra rồi nối lại thôi, không thân thiện tới việc của bạn khác.

Xem thêm:

Cộng thêm thời gian

00:00:43,010Khỉ thật, lằng nhắng phết đấy tuy vậy mà mình làm kết thúc rồi và viết lại thì thấy đơn giản lắm

*
) Đại ý là nỗ lực này, bóc tách cái thằng bên trên thành giờ thông thường 00:00:43 với giờ micro giây 0.010.

Ta tách bằng vết , rồi gán lại cái micro giây bởi dấu . Xong xuôi rồi cộng với $addTime mang phần dư gán lại vào micro giây này, còn phần thừa cộng tiếp vào cái giờ thông thường kia, để ý lúc là string dịp là integer, hàm cách xử trí của nó như thế này:

public function addTime($time, $addTime) $explodeTime = explode(",", $time); $explodeTime<1> = +("0." . $explodeTime<1>); $a = $explodeTime<1> + $addTime; $microTime = $a - floor($a); $addTime = floor($a); $normalTime = $explodeTime<0>; $normalTimeArr = explode(":", $normalTime); $normalSecond = +$normalTimeArr<2> + $addTime; $normalMinute = +$normalTimeArr<1>; $normalHour = +$normalTimeArr<0>; if ($normalSecond > 59) $xxx = (int)($normalSecond / 60); $normalSecond = $normalSecond - $xxx * 60; $normalMinute = $normalMinute + $xxx; if ($normalMinute > 59) $xxx = (int)($normalMinute / 60); $normalMinute = $normalMinute - $xxx * 60; $normalHour = $normalHour + $xxx; $normalTime = implode(":", < $normalHour 10 ? "0" . $normalHour : $normalHour, $normalMinute 10 ? "0" . $normalMinute : $normalMinute, $normalSecond 10 ? "0" . $normalSecond : $normalSecond, >); $microTimeArr = explode(".", number_format($microTime, 3)); return $normalTime . "," . $microTimeArr<1>; Có vẻ khiếp gớm dẫu vậy thật ra là ghê gớm thật.À, nhưng ko biết tất cả ai do dự cái đoạn

number_format($microTime, 3);```này không nhỉ? khá là độc đáo :D### Kết quảSubtile của phim `Dredd` đã có được sync lại, chạy cấp tốc hơn `85.995` giây :-s!<1.JPG>(https://images.cdvhnghean.edu.vn/70cb76e3-6d73-4b62-8ea7-3836c0fcf0fe.jpg)## Kết luận- khuyên bảo vừa rồi áp dụng cho cộng thêm thời gian cho sub chạy chậm, so với sub chạy cấp tốc thì trừ đi thời gian, có tác dụng tương tự.- Thêm size upload tệp tin nữa là ngon lành luôn.- sau cuối là thưởng thức bộ phim thôi.:v