Chia sẻ tool dịch tự động, tự động dịch và tạo sub phim

khongtu19bk

https://tuhocvba.net
Tham gia ngày
5 Tháng mười hai 2009
Bài viết
135
Được thích
35
Điểm
370
Tuổi
31
Như đã giới thiệu ở đây: Link video giới thiệu.

Hôm nay mình chia sẻ tool tự động dịch phụ đề phim.
Chức năng của tool:
Nhận phụ đề phim là tiếng anh (có thể sửa trong code để dịch phụ đề ngôn ngữ khác) sang tiếng việt và tạo thành sub phim tiếng việt.
Tool sẽ đi qua hai bước:
Step 1:
Input: sub english
Output: Excel vietnamese
Step 2:
Do file excel do tool dịch ra có thể chưa nuột nà (máy dịch mà), nên cần bàn tay con người tinh chỉnh lại cho hay hơn. Sau khi đã chỉnh xong trên excel ta chạy tool.
Input: Excel
Ouput: File sub vietnamese.
Yêu cầu: Máy tính cài đặt IE phiên bản 11 hoặc cao hơn.
Link download: http://www.mediafire.com/file/2793zj8cfqq0880/Tool_Auto_Translate_sub.rar/file
Chú ý: Đây là bản tool chia sẻ, mọi người tùy ý chỉnh sửa code theo ý mọi người.
 

batman1

Thành viên gắn bó
Tham gia ngày
8 Tháng chín 2014
Bài viết
1,812
Được thích
2,796
Điểm
360
Tôi chạy 1 lần trên Windows 10 thì có, không kiểm tra lại
1
0-->0,000128587962962963
[Đây là phần mềm abetaversion & được làm cho những người không thể chờ đợi. Có thể có lỗi trong bản dịch, ngữ pháp, trong số những người khác. Nếu bạn tìm thấy (các) lỗi, vui lòng gửi email cho chúng tôi (tl.skeweds@gmail.com) dấu thời gian của (các) dòng và cách cải thiện (các) dòng đó. Cảm ơn! Sẽ có một phiên bản sửa chữa cuối cùng nếu tiêu đề sẽ không được phát hành trên phương tiện kỹ thuật số với phụ đề tiếng Anh. ]

2
0,000405787037037037-->0,000416203703703704
Tạm biệt rồi.
...


Tôi không nhớ rõ nhưng có lẽ 0,000405787037037037-->0,000416203703703704 không là dạng của SRT. Sẽ không được trình chiếu phim chấp nhận?

Ngoài ra phụ đề hay không thì bản chất là dịch văn bản. Theo tôi dùng MSXML2.XMLHTTP tốt hơn là khởi động IE, nhất là khi khởi động liên tục với mỗi dòng dữ liệu. Và không cần đòi hỏi phiên bản IE cao như thế.

Tôi có cảm giác là code hơi rườm rà.

Vài lời góp ý để bạn hoàn thiện công cụ chứ không có ý chê trách.
 

khongtu19bk

https://tuhocvba.net
Tham gia ngày
5 Tháng mười hai 2009
Bài viết
135
Được thích
35
Điểm
370
Tuổi
31
Vâng, cảm ơn anh.
Em chưa có điều kiện để test trên win 10. Trên win 7 thì được như này.
Mã:
1
00:00:00,000-->00:00:11,110
[Đây là phần mềm abetaversion & được làm cho những người không thể chờ đợi. Có thể có lỗi trong bản dịch, ngữ pháp, trong số những người khác. Nếu bạn tìm thấy (các) lỗi, vui lòng gửi email cho chúng tôi (tl.skeweds@gmail.com) dấu thời gian của (các) dòng và cách cải thiện (các) dòng đó. Cảm ơn! Sẽ có một phiên bản sửa chữa cuối cùng nếu tiêu đề sẽ không được phát hành trên phương tiện kỹ thuật số với phụ đề tiếng Anh. ]

2
00:00:35,060-->00:00:35,960
Tạm biệt rồi.

3
00:00:36,360-->00:00:37,560
Tạm biệt.

4
00:00:40,740-->00:00:42,530
Ren!

5
00:00:44,570-->00:00:46,060
Bạn thấy ...
Code thì sẽ không dịch mấy cái thời gian, bị như vậy chắc là từ lúc mở phụ đề tiếng anh bằng excel đã bị vỡ định dạng rồi ạ. Nếu có thể, anh có thể kiểm tra giúp em xem nguyên nhân là gì được không ạ.
Cảm ơn anh đã quan tâm và cho nhận xét. Em xin tiếp thu.
 

batman1

Thành viên gắn bó
Tham gia ngày
8 Tháng chín 2014
Bài viết
1,812
Được thích
2,796
Điểm
360
Vâng, cảm ơn anh.
Em chưa có điều kiện để test trên win 10. Trên win 7 thì được như này.
1
00:00:00,000-->00:00:11,110
...
Code thì sẽ không dịch mấy cái thời gian, bị như vậy chắc là từ lúc mở phụ đề tiếng anh bằng excel đã bị vỡ định dạng rồi ạ
Lúc mở phụ đề vẫn chuẩn.
Nếu có thể, anh có thể kiểm tra giúp em xem nguyên nhân là gì được không ạ.
Tôi có CamStudioPortable 32 bit nhưng thử thì thấy nó không chạy trên Windows 10 64 bit của tôi nên tôi thử trên đồ cổ XP Home 32 bit + Excel 2010 32 bit.

Xem tập tin AVI.

1. Khi chạy Workbooks.OpenText thì ta có vd. 00:35,1. Trên thanh công thức thì là 00:00:35

2. Khi chạy ActiveWindow.DisplayFormulas = True thì được đổi thành 0,000405787037037037. Trên thanh công thức thì là 00:00:35 nhưng dưới sheet là 0,000405787037037037.

Như vậy là ở thời điểm trên các giá trị được tính. 00:00:35 là thời gian, tức số 0,000405787037037037
 

File đính kèm

Lần chỉnh sửa cuối:

khongtu19bk

https://tuhocvba.net
Tham gia ngày
5 Tháng mười hai 2009
Bài viết
135
Được thích
35
Điểm
370
Tuổi
31
Cám ơn anh ạ. Như vậy vấn đề nằm ở đây:
2. Khi chạy ActiveWindow.DisplayFormulas = True thì được đổi thành 0,000405787037037037. Trên thanh công thức thì là 00:00:35 nhưng dưới sheet là 0,000405787037037037.
Trước đây có một vài phụ đề chạy, excel tự ý đổi số, nên em để lệnh
Mã:
ActiveWindow.DisplayFormulas = True
nhằm ngăn chặn nó tự ý đổi số.
Không hiểu sao trên máy anh lại như vậy. Để em tìm hiểu thêm.
Anh có thể tìm hiểu cùng với em được không ạ.

Đây là kết quả chạy trên máy em, win 7 64bit, office 2013. Không có vấn đề gì.
 

batman1

Thành viên gắn bó
Tham gia ngày
8 Tháng chín 2014
Bài viết
1,812
Được thích
2,796
Điểm
360
Trước đây có một vài phụ đề chạy, excel tự ý đổi số, nên em để lệnh
Mã:
ActiveWindow.DisplayFormulas = True
nhằm ngăn chặn nó tự ý đổi số.
Không hiểu sao trên máy anh lại như vậy. Để em tìm hiểu thêm.
Anh có thể tìm hiểu cùng với em được không ạ.
Đây là kết quả chạy trên máy em, win 7 64bit, office 2013. Không có vấn đề gì.
Một câu lệnh thôi mà tôi làm sao xem được code của Excel để mà đoán. Trong AVI là XP Home + Excel 2010, cả 2 là 32 bit.

Trên laptop là Windows 10 64 bit + Excel 2007 32 bit.

Tôi không có Win 7 64 bit + Excel 2013 để thử.

Nhưng căn cứ vào
Trước đây có một vài phụ đề chạy, excel tự ý đổi số, nên em để lệnh
thì có thể kết luận nó "tự ý" đổi số. Thế thì rất có thể lúc khác nó lại "không tự ý" đổi số. Tức lúc đổi lúc không. Lúc không có ActiveWindow.DisplayFormulas = True thì đổi, lúc có ActiveWindow.DisplayFormulas = True cũng đổi. Tùy vào phiên bản chăng hay thiết lập gì đó?
 

batman1

Thành viên gắn bó
Tham gia ngày
8 Tháng chín 2014
Bài viết
1,812
Được thích
2,796
Điểm
360
Tôi đề nghị đổi thành
Call Workbooks.OpenText(FilePath, Origin:=65001, fieldinfo:=Array(Array(1, 2)))
Lúc này thì có hay không ActiveWindow.DisplayFormulas = True thì trên cả 2 máy của tôi đều đã chuẩn. Trước đó 00:00:00,000 --> 00:00:11,110 được chia thành 3 ô, trong đó ô 1 và 3 dạng Time. Sau khi đổi thì mỗi dòng chỉ 1 ô tức 00:00:00,000 --> 00:00:11,110 ở 1 ô và rõ ràng nó là Text nên Excel có muốn chơi đểu cũng không thể thay bằng số được
Bài đã được tự động gộp:

Xem AVI
 

File đính kèm

Lần chỉnh sửa cuối:

khongtu19bk

https://tuhocvba.net
Tham gia ngày
5 Tháng mười hai 2009
Bài viết
135
Được thích
35
Điểm
370
Tuổi
31
Em cảm ơn anh. Anh bận thế mà đã xem cho em, em không biết nói gì hơn.
Em đã test trên máy em và cho kết quả tốt ạ. Vậy cho phép em được sửa code theo hướng của anh có được không ạ.
Vì thiếu kiến thức cho nên em đã không biết thiết định tham số fieldinfo:=Array(Array(1, 2))) . Có thời gian, em sẽ tìm hiểu thêm ạ.
Chân thành cảm ơn sự góp sức của anh để phiên bản tới được hoàn thiện hơn, đáp ứng được mong mỏi của những người mê phim ^_^
 

batman1

Thành viên gắn bó
Tham gia ngày
8 Tháng chín 2014
Bài viết
1,812
Được thích
2,796
Điểm
360
Em đã test trên máy em và cho kết quả tốt ạ. Vậy cho phép em được sửa code theo hướng của anh có được không ạ.
Bạn xem AVI ở bài cuối thì thấy chỗ tôi cũng ổn. :D.

Trên diễn đàn nếu không ai viết rõ là cấm, là thu phí, là phải ghi tác giả thì dĩ nhiên là cho phép, là miễn phí, là không phải ghi tác giả rồi.
 

khongtu19bk

https://tuhocvba.net
Tham gia ngày
5 Tháng mười hai 2009
Bài viết
135
Được thích
35
Điểm
370
Tuổi
31
Bạn xem AVI ở bài cuối thì thấy chỗ tôi cũng ổn. :D.

Trên diễn đàn nếu không ai viết rõ là cấm, là thu phí, là phải ghi tác giả thì dĩ nhiên là cho phép, là miễn phí, là không phải ghi tác giả rồi.
Vâng em đã xem video anh gửi và thấy ổn rồi. Cảm ơn anh đã ghi lại video, em yên tâm rồi ạ. Cách làm việc của anh thật chuyên nghiệp. Cảm ơn anh rất nhiều vì sự support kịp thời, nhờ đó mà lỗi sẽ được giải quyết triệt để. Em sẽ sớm chỉnh lại tool và phát hành lại ạ.
Chân thành cảm ơn anh và các anh chị trên GPE trong suốt thời gian qua đã giải đáp giúp em nhiều điều. Em không biết nói gì hơn.
 

HeSanbi

Thành viên tích cực
Tham gia ngày
24 Tháng hai 2013
Bài viết
838
Được thích
604
Điểm
560
Bạn chia sẻ code dịch dùng Google Dịch để dịch thông qua Browser IE thì thật là bất hợp lý, vì nó sẽ tốn nhiều tài nguyên mạng, WinHTTPRequest hay MSXML2.XMLHTTP đủ để làm điều đó.

Dùng WebBrowser khi nào? Khi mà mình muốn lấy thành phần dịch trong đó bao gồm, từ đồng nghĩa, trái nghĩa, từ gợi ý khác, câu ví dụ, cách đọc, ....

Theo tôi biết thì Google cung cấp 3 link :
1. Nền tảng Mobile: Chỉ có thể dịch, và phương pháp đọc nếu có. (Nhanh)
2. WebBrowser: tất cả dịch vụ phiên dịch. (Phụ thuộc WebBrowser)
3. Google Dịch API: ... và phát hiện ngôn ngữ. (Nhanh)


Tôi khuyên bạn nên dùng link Google Dịch API.

Thấy bạn chia sẻ tool mà vào code nó như "một đống bùi nhùi", comment Code rối loạn, tên Module thì đủ các kiểu "viện da liễu".

Bạn nên đặt tên tiêu đề là "Hoàn thiện tool" thay cho "Chia sẻ tool". Code của bạn sẽ phát sinh một số lỗi bất ngờ vì nó chưa được tối ưu.
Và việc đặt Author không hợp lí lắm. Vì code của bạn chỉ ở mức cơ bản, thậm chí các khai báo Thuộc tính thư viện bạn đã sửa toàn bộ thành khai báo chung là "As Object" thì xem như không có tính chuyên nghiệp.

Nếu bạn muốn cầu kì thì nên viết tool ở dạng một Class cho nó nhất quán.

Yêu cầu: Máy tính cài đặt IE phiên bản 11 hoặc cao hơn.
Và IE 11 là phiên bản IE cuối cùng mà Microsoft đã phát triển và công bố.
Cái này lại liên quan đến tính chuyên nghiệp.
 
Lần chỉnh sửa cuối:

khongtu19bk

https://tuhocvba.net
Tham gia ngày
5 Tháng mười hai 2009
Bài viết
135
Được thích
35
Điểm
370
Tuổi
31
Bạn chia sẻ code dịch dùng Google Dịch để dịch thông qua Browser IE thì thật là bất hợp lý, vì nó sẽ tốn nhiều tài nguyên mạng, WinHTTPRequest hay MSXML2.XMLHTTP đủ để làm điều đó.

Dùng WebBrowser khi nào? Khi mà mình muốn lấy thành phần dịch trong đó bao gồm, từ đồng nghĩa, trái nghĩa, từ gợi ý khác, câu ví dụ, cách đọc, ....

Theo tôi biết thì Google cung cấp 3 link :
1. Nền tảng Mobile: Chỉ có thể dịch, và phương pháp đọc nếu có. (Nhanh)
2. WebBrowser: tất cả dịch vụ phiên dịch. (Phụ thuộc WebBrowser)
3. Google Dịch API: ... và phát hiện ngôn ngữ. (Nhanh)


Tôi khuyên bạn nên dùng link Google Dịch API.

Thấy bạn chia sẻ tool mà vào code nó như "một đống bùi nhùi", comment Code rối loạn, tên Module thì đủ các kiểu "viện da liễu".

Bạn nên đặt tên tiêu đề là "Hoàn thiện tool" thay cho "Chia sẻ tool". Code của bạn sẽ phát sinh một số lỗi bất ngờ vì nó chưa được tối ưu.
Và việc đặt Author không hợp lí lắm. Vì code của bạn chỉ ở mức cơ bản, thậm chí các khai báo Thuộc tính thư viện bạn đã sửa toàn bộ thành khai báo chung là "As Object" thì xem như không có tính chuyên nghiệp.

Nếu bạn muốn cầu kì thì nên viết tool ở dạng một Class cho nó nhất quán.



Và IE 11 là phiên bản IE cuối cùng mà Microsoft đã phát triển và công bố.
Cái này lại liên quan đến tính chuyên nghiệp.
Cảm ơn bạn đã mất thời gian cho ý kiến. Bạn có thể làm thử cho mình xem được không ạ?
Có vài điều mình không hiểu, bạn có thể giải đáp giúp mình được không ạ?

Tôi khuyên bạn nên dùng link Google Dịch API.
Cái này có miễn phí không ạ?
tên Module thì đủ các kiểu "viện da liễu".
Bạn có thể nói cụ thể hơn được không ạ. Nên đặt tên như thế nào để dễ hiểu hơn? Bạn có thể làm thử và đưa file lên đây được không ạ?
toàn bộ thành khai báo chung là "As Object"
Mình thì chưa tới mức ấy đâu-chuyên nghiệp ấy. Hiện nay định nghĩa như thế nào là chuyên nghiệp ạ? Mình nên tham khảo ở đâu để trông như chuyên nghiệp ạ? Bạn có thể viết mẫu rồi cho lên đây để mình và những người khác tham khảo được không ạ?
Nếu bạn muốn cầu kì thì nên viết tool ở dạng một Class cho nó nhất quán.
Bạn viết thử rồi chia sẻ lên đây được không ạ.
MSXML2.XMLHTTP đủ để làm điều đó.
Theo mình hiểu thì chỉ khi IE truy cập vào trang chứa hình ảnh, dẫn tới tốc độ chậm, thì mới nghĩ tới điều này. Trang google translate không có hình ảnh gì nên mình nghĩ không ảnh hưởng.
Bạn có thể làm code bằng MSXML2.XMLHTTP và so sánh được không ạ?

Và việc đặt Author không hợp lí lắm
Nếu mình muốn tạo sub dịch thì mình có thể dùng tool nào ạ? Hiện nay có tool nào chưa ạ? Cái gì cơ bản thì không được đặt tên ạ? Cái này là luật chung trên diễn đàn hay luật của riêng cá nhân bạn ạ? Cái cơ bản tự nhiên nó có hay là cũng phải mất thời gian tạo ra ạ?
 

batman1

Thành viên gắn bó
Tham gia ngày
8 Tháng chín 2014
Bài viết
1,812
Được thích
2,796
Điểm
360
Bạn có thể làm code bằng MSXML2.XMLHTTP và so sánh được không ạ?
Bạn đã tham gia chủ đề này.


Ngay trên bài của bạn là bài của HeSanbi. Link tới bài có code với MSXML2.ServerXMLHTTP. Nhưng hình như code đó không chạy được nữa thì phải. Server trả về error thì phải. Google thay đổi liên tục.

Về việc dùng google translate thì trên GPE có nhiều bài rồi. Bạn có thể nhấn "Tìm kiếm" ở góc trên bên phải rồi nhập google translate
 

huuthang_bd

Chuyên gia GPE
Tham gia ngày
10 Tháng chín 2008
Bài viết
6,987
Được thích
7,803
Điểm
860
Nơi ở
TP.HCM
Mấy hôm nay vọc Google App Script. Thấy ý tưởng của bạn cũng hay nhưng đàng nào cũng phải dùng internet mà Google App Script có sẵn class LanguageApp rất tiện nên mạnh dạng làm thử xem sao.

Do Google giới hạn số lần gọi lệnh dịch của mỗi tài khoản (số lần / ngày) nên tôi không để ứng dụng chạy với danh nghĩa tài khoản của tôi để tránh bị hết hạn dẫn đến không dùng được, vì vậy, bạn nào test thì cần đăng nhập tài khoản Google.

 

batman1

Thành viên gắn bó
Tham gia ngày
8 Tháng chín 2014
Bài viết
1,812
Được thích
2,796
Điểm
360
Do Google giới hạn số lần gọi lệnh dịch của mỗi tài khoản (số lần / ngày)
Bạn có biết cái giới hạn này là bao nhiêu không? Thực ra tôi không cần nên không muốn bỏ công gú gồ, nhưng nếu biết được thì cũng tốt
 

huuthang_bd

Chuyên gia GPE
Tham gia ngày
10 Tháng chín 2008
Bài viết
6,987
Được thích
7,803
Điểm
860
Nơi ở
TP.HCM
Bạn có biết cái giới hạn này là bao nhiêu không? Thực ra tôi không cần nên không muốn bỏ công gú gồ, nhưng nếu biết được thì cũng tốt
Em cũng không đọc nhưng có lẽ cũng khoản 2000 lần (nhẩm tính số lần chạy thử). Do lúc đầu code theo hướng dịch từng câu sau vài lần chạy thử thì bị báo hết hạn.
Code hiện tại dịch toàn bộ file 1 lần thì có lẽ không lo vấn đề giới hạn nhưng do tài khoản của em đã hết số lần nên phải chờ 24h mới dùng được tiếp :)
 

batman1

Thành viên gắn bó
Tham gia ngày
8 Tháng chín 2014
Bài viết
1,812
Được thích
2,796
Điểm
360
Code hiện tại dịch toàn bộ file 1 lần thì có lẽ không lo vấn đề giới hạn
Tôi nhiều lần dịch tay trực tiếp trên trang web và khi dán 10 KB thì nó cắt chỉ dịch khoảng 4 KB, 5 KB thôi (không nhớ rõ). Do đó phải chia làm 2 lần dịch. Dùng cái "kia" thì nó cho mỗi lần dịch là bao nhiêu?
 

befaint

|||||||||||||
Tham gia ngày
6 Tháng một 2011
Bài viết
8,555
Được thích
9,719
Điểm
560
Mấy cái class có sẵn của Google script có 'quota' thường rất ít. Nên thông thường sẽ chuyển sang dùng API.
Ví dụ LanguageApp.translate thì có thể dùng Translation API :

Hoặc một cách khác:
PHP:
function translate_lang(source_text, source_lang, target_lang) { 
  var url = "https://translate.googleapis.com/translate_a/single?client=gtx&sl=" 
            + source_lang.to + "&tl=" + target_lang + "&dt=t&q=" + encodeURI(source_text);
  
  var result = JSON.parse(UrlFetchApp.fetch(url).getContentText());
  return result[0][0][0];
}
 

huuthang_bd

Chuyên gia GPE
Tham gia ngày
10 Tháng chín 2008
Bài viết
6,987
Được thích
7,803
Điểm
860
Nơi ở
TP.HCM
Tôi nhiều lần dịch tay trực tiếp trên trang web và khi dán 10 KB thì nó cắt chỉ dịch khoảng 4 KB, 5 KB thôi (không nhớ rõ). Do đó phải chia làm 2 lần dịch. Dùng cái "kia" thì nó cho mỗi lần dịch là bao nhiêu?
Em thử với file này thấy dịch được toàn bộ.
 

File đính kèm

befaint

|||||||||||||
Tham gia ngày
6 Tháng một 2011
Bài viết
8,555
Được thích
9,719
Điểm
560
Google có nhiều "kẽ hở" cho người dùng miễn phí rất nhiều tài nguyên cực xịn nếu biết khai thác.

Ví dụ nguyên trang này: https://translate.google.com/
ta có thể khai thác được vài thứ cực hữu dụng, bằng mẹo chia nhỏ dữ liệu/ mỗi requets rồi ghép lại
- Dịch không bị giới hạn;
- Đọc văn bản (Text to speech). Google mới nâng cấp các giọng đọc Việt rất mềm mại từ hồi tháng 4/2019.

Hoặc tận dụng dịch vụ miễn phí speech to text của Google
làm trợ lý ảo ra lệnh giọng nói tiếng Việt.
 
Top