日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

自动翻译视频字幕

發(fā)布時(shí)間:2023/12/10 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自动翻译视频字幕 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

某天我在看電影的時(shí)候發(fā)現(xiàn)了某部電影只有英文字幕,找了半天沒(méi)找到合適的中文字幕,便想著自己制作中英對(duì)照字幕。初步設(shè)計(jì)為3步:1、提取內(nèi)嵌英文字幕。2、獲取字幕的翻譯。3、將翻譯填入字幕文件。最后成功獲取中英文對(duì)照字幕。

1、提取內(nèi)嵌英文字幕
安裝并配置ffmpeg
https://www.ffmpeg.org/download.html
安裝后用python調(diào)用,代碼如下

def get_srt(file, outfile):cmd = "ffmpeg-2021-10-21-git-2aa343bb6f-full_build\\bin\\ffmpeg" + ' -i ' + file + ' -map 0:s:0 ' + outfileos.system(cmd)

2.獲取字幕的翻譯
由于字幕文本過(guò)大,無(wú)法使用免費(fèi)的翻譯接口,故選擇selenium大法控制百度來(lái)翻譯,selenium配置方法如下:
https://blog.csdn.net/tk1023/article/details/109078613
配置完成后用python封裝:

from selenium import webdriverimport xlwtimport timeimport sysimport shutilimport osimport mathclass Browser(object):def __init__(self, xls_name='https://fanyi.baidu.com/?aldtype=16047#auto/zh'):self.xls_name = xls_nameself.browser = webdriver.Edge()def tran(self, str):self.browser.get("https://fanyi.baidu.com/?aldtype=16047#en/zh/" + str) # 打開翻譯主頁(yè)for i in range(10):time.sleep(1)b = self.browser.find_element_by_xpath("/html/body/div[1]/div[3]/div/div/div[1]/div[2]/div[1]/div[2]/div/div/div[1]/p [2]/span")c = b.text # 提取翻譯結(jié)果if c.strip() != '':breakreturn c

3.將翻譯填入字幕文件
這步比較簡(jiǎn)單,根據(jù)字幕文本寫對(duì)應(yīng)python腳本

def add_eng(src, dst):state = 'null'box1 = []box2 = []eng = ''b = Browser()with open(src) as f:for line in f.readlines():if state == 'null':state = 'get_count'box1.append(line)box2.append(line)elif state == 'get_count':state = 'get_time'box1.append(line)box2.append(line)elif state == 'get_time':if len(line.strip()) > 0:eng += line.strip() + ' 'box1.append(line)else:state = 'null'try:cn = b.tran(eng)except:cn = ''box2.append(cn)with open(dst, 'a+') as frr:for i in box1:frr.write(i)frr.write('\n')for i in box2:frr.write(i)frr.write('\n\n')box1 = []box2 = []eng = ''

結(jié)果
原始字幕:
1
00:00:55,255 --> 00:00:57,557
My planet
Arrakis is so beautiful

2
00:00:57,624 --> 00:00:59,192
when the sun is low.

生成字幕:
1
00:00:55,255 --> 00:00:57,557
My planet
Arrakis is so beautiful

1
00:00:55,255 --> 00:00:57,557
我的星球阿拉基斯是如此美麗

2
00:00:57,624 --> 00:00:59,192
when the sun is low.

2
00:00:57,624 --> 00:00:59,192
當(dāng)太陽(yáng)低的時(shí)候。

整體代碼

trans.py:

from selenium import webdriver import xlwt import time import sys import shutil import os import mathclass Browser(object):def __init__(self, xls_name='https://fanyi.baidu.com/?aldtype=16047#auto/zh'):self.xls_name = xls_nameself.browser = webdriver.Edge()def tran(self, str):self.browser.get("https://fanyi.baidu.com/?aldtype=16047#en/zh/" + str) # 打開翻譯主頁(yè)for i in range(10):time.sleep(1)b = self.browser.find_element_by_xpath("/html/body/div[1]/div[3]/div/div/div[1]/div[2]/div[1]/div[2]/div/div/div[1]/p [2]/span")c = b.text # 提取翻譯結(jié)果if c.strip() != '':breakreturn c

main.py:

import os import json import random import hashlib import time import re from trans import Browserdef get_srt(file, outfile):cmd = "ffmpeg-2021-10-21-git-2aa343bb6f-full_build\\bin\\ffmpeg" + ' -i ' + file + ' -map 0:s:0 ' + outfileos.system(cmd)def add_eng(src, dst):state = 'null'box1 = []box2 = []eng = ''b = Browser()with open(src) as f:for line in f.readlines():if state == 'null':state = 'get_count'box1.append(line)box2.append(line)elif state == 'get_count':state = 'get_time'box1.append(line)box2.append(line)elif state == 'get_time':if len(line.strip()) > 0:eng += line.strip() + ' 'box1.append(line)else:state = 'null'try:cn = b.tran(eng)except:cn = ''box2.append(cn)with open(dst, 'a+') as frr:for i in box1:frr.write(i)frr.write('\n')for i in box2:frr.write(i)frr.write('\n\n')box1 = []box2 = []eng = ''file = r'xxx.mkv' mid = 'subs.srt' dst = 'new.srt'get_srt(file, mid) add_eng(mid, dst)

總結(jié)

以上是生活随笔為你收集整理的自动翻译视频字幕的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。