Skip to content

Commit

Permalink
更新 0.3.1 优化版
Browse files Browse the repository at this point in the history
1.修复个别中文视频识别错误问题
2.支持输出翻译进度,优化翻译机制
3.优化软件日志输出机制
  • Loading branch information
wxbool committed Aug 4, 2020
1 parent edfae07 commit d43d013
Show file tree
Hide file tree
Showing 5 changed files with 109 additions and 42 deletions.
3 changes: 2 additions & 1 deletion app/aliyun/tool.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ func AliyunAudioResultWordHandle(result [] byte , callback func (vresult *Aliyun

if ischinese {
block += word.Word
if tool.IsChineseNumber(word.Word) && FindSliceIntCount(chineseNumberWordIndexs , i) == 0 {
if tool.CheckChineseNumber(word.Word) && FindSliceIntCount(chineseNumberWordIndexs , i) == 0 {
cl := tool.ChineseNumberToLowercaseLength(word.Word)

if (cl - utf8.RuneCountInString(word.Word)) > 0 {
Expand All @@ -137,6 +137,7 @@ func AliyunAudioResultWordHandle(result [] byte , callback func (vresult *Aliyun
}

blockRune = utf8.RuneCountInString(block)

//fmt.Println("chineseNumberDiffLength : " , chineseNumberWordIndexs , chineseNumberDiffLength , word.Word)

for channel , p := range audioResult {
Expand Down
23 changes: 13 additions & 10 deletions app/log.go
Original file line number Diff line number Diff line change
@@ -1,24 +1,27 @@
package app

import "strings"
import (
"github.com/lxn/walk"
)

type TaskLog struct {
content []string
TextEdit *walk.TextEdit
}

func NewTasklog() *TaskLog {
func NewTasklog(textEdit *walk.TextEdit) *TaskLog {
task := new(TaskLog)
task.TextEdit = textEdit
return task
}

func (t *TaskLog) AppendLogText(s string) {
t.content = append(t.content , s)
func (t *TaskLog) SetTextEdit(textEdit *walk.TextEdit) {
t.TextEdit = textEdit
}

func (t *TaskLog) ClearLogText() {
t.content = []string{}
func (t *TaskLog) AppendLogText(s string) {
t.TextEdit.AppendText(s + "\r\n")
}

func (t *TaskLog) GetString() string {
return strings.Join(t.content , "\r\n")
}
func (t *TaskLog) ClearLogText() {
t.TextEdit.SetText("")
}
21 changes: 17 additions & 4 deletions app/tool/chinese_simple.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,22 @@ import (
)


func CheckChineseNumber(s string) bool {
regx := regexp.MustCompile("(.*)([一|二|两|三|四|五|六|七|八|九|十|百|千|万|亿]+)(.*)")
return regx.MatchString(s)
}

func ChineseNumberToLowercaseLength(s string) int {
if (!IsChineseNumber(s)) {
return 0
st := GetStringUtf8Length(s)
regx := regexp.MustCompile("([一|二|两|三|四|五|六|七|八|九|十|百|千|万|亿]+)(.*)")
s = regx.ReplaceAllString(s , "$1")
if s == "" || !IsChineseNumber(s) {
return st
}
rst := GetStringUtf8Length(s)
cha_t := 0
if st > rst {
cha_t = st - rst
}
s = strings.TrimSpace(s)
zhTexts := strings.Split(s , "")
Expand Down Expand Up @@ -38,7 +51,7 @@ func ChineseNumberToLowercaseLength(s string) int {
}
numberPosi = !numberPosi
}
return maxBaseNumber
return maxBaseNumber+cha_t
}


Expand All @@ -64,7 +77,7 @@ func IsChineseNumber(text string) bool {


func ValiChineseNumberChar(s string , unit bool) bool {
zh_number := []string{"一","二","两","三","四","五","六","七","八","九","十"}
zh_number := []string{"一","二","两","三","四","五","六","七","八","九","十","百","千","万"}
zh_unit := []string{"十","百","千","万","亿"}

if unit {
Expand Down
72 changes: 68 additions & 4 deletions app/video.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package app
import (
"bytes"
"errors"
"fmt"
"github.com/buger/jsonparser"
"os"
"path"
Expand Down Expand Up @@ -230,7 +231,8 @@ func (app *VideoSrt) Run(video string) {

//翻译字幕块
if e := AliyunAudioResultTranslate(app , video , AudioResult , IntelligentBlockResult); e != nil {
app.Log("字幕翻译失败,已强制关闭翻译,仅保留原始文件" , video)
app.Log("字幕翻译失败:" + e.Error() , video)
app.Log("已强制关闭翻译,仅输出原始字幕文件" , video)
app.TranslateCfg.TranslateSwitch = false
}

Expand Down Expand Up @@ -382,7 +384,6 @@ func AliyunAudioRecognition(engine aliyun.AliyunClound , filelink string) (Audio

//遍历获取识别结果
resultError := engine.GetAudioFileResult(taskid , client , func(result []byte) {
//mylog.WriteLog(string(result))

//结果处理
statusText, _ := jsonparser.GetString(result, "StatusText") //结果状态
Expand Down Expand Up @@ -462,28 +463,91 @@ func AliyunAudioResultTranslate(app *VideoSrt , video string , AudioResult map[i
return nil
}

//输出音轨
outputSoundTrack := app.SoundTrack

//计算总任务行数
totalRow := 0 //总处理行数
var lastrv float64 = 0 //最后进度(%)

if app.OutputType.SRT || app.OutputType.LRC {
for _,result := range IntelligentBlockResult {
for channel , result := range IntelligentBlockResult {
soundChannel := channel + 1
if outputSoundTrack != 3 && outputSoundTrack != 0 {
if outputSoundTrack != int(soundChannel) {
continue //跳出非输出音轨转换
}
}
totalRow += len(result)
}
}
if app.OutputType.TXT {
for channel,result := range AudioResult {
soundChannel := channel + 1
if outputSoundTrack != 3 && outputSoundTrack != 0 {
if outputSoundTrack != int(soundChannel) {
continue //跳出非输出音轨转换
}
}
totalRow += len(result)
}
}

index := 0
//翻译任务
if app.OutputType.SRT || app.OutputType.LRC {
for channel , result := range IntelligentBlockResult {
soundChannel := channel + 1
if outputSoundTrack != 3 && outputSoundTrack != 0 {
if outputSoundTrack != int(soundChannel) {
continue //跳出非输出音轨转换
}
}

for _ , data := range result {
transResult,e := app.RunTranslate(data.Text , video)
if e != nil {
return e
//panic(e) //终止翻译
}
data.TranslateText = strings.TrimSpace(transResult.TransResultDst) //译文

index++
rv := (float64(index)/float64(totalRow))*100
if (rv - lastrv) > 20 {
//输出比例
app.Log("字幕翻译已处理:" + fmt.Sprintf("%.2f" , rv) + "%" , video)
lastrv = rv
}
}
}
}

if app.OutputType.TXT {
for _,result := range AudioResult {
for channel,result := range AudioResult {
soundChannel := channel + 1
if outputSoundTrack != 3 && outputSoundTrack != 0 {
if outputSoundTrack != int(soundChannel) {
continue //跳出非输出音轨转换
}
}

for _ , data := range result {
transResult,e := app.RunTranslate(data.Text , video)
if e != nil {
return e
//panic(e) //终止翻译
}
data.TranslateText = strings.TrimSpace(transResult.TransResultDst) //译文


index++
rv := (float64(index)/float64(totalRow))*100
if (rv - lastrv) > 20 {
//输出比例
app.Log("字幕翻译已处理:" + fmt.Sprintf("%.2f" , rv) + "%" , video)
lastrv = rv
}
}
}
}
Expand Down
32 changes: 9 additions & 23 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import (
)

//应用版本号
const APP_VERSION = "0.3.0"
const APP_VERSION = "0.3.1"

var AppRootDir string
var mw *MyMainWindow
Expand Down Expand Up @@ -73,7 +73,7 @@ func main() {
operateFrom.Init(appSetings)

//日志
var tasklog = NewTasklog()
var tasklog = NewTasklog(logText)

//字幕生成应用
var videosrt = NewApp(AppRootDir)
Expand Down Expand Up @@ -847,7 +847,7 @@ func main() {
startTranslateBtn.SetEnabled(true)
startBtn.SetText("生成字幕")

logText.AppendText("\r\n\r\n任务完成!")
tasklog.AppendLogText("\r\n\r\n任务完成!")

//清空临时目录
videosrt.ClearTempDir()
Expand All @@ -868,22 +868,14 @@ func main() {
startTranslateBtn.SetEnabled(true)
startBtn.SetText("生成字幕")

logText.AppendText("\r\n\r\n任务完成!")
tasklog.AppendLogText("\r\n\r\n任务完成!")

//清空临时目录
videosrt.ClearTempDir()
}()
}
})

//日志输出
go func() {
for finish == false {
logText.SetText("")
logText.AppendText(tasklog.GetString())
time.Sleep(time.Millisecond * 150)
}
}()
},
},

Expand Down Expand Up @@ -988,7 +980,7 @@ func main() {
startTranslateBtn.SetEnabled(true)
startTranslateBtn.SetText("字幕翻译")

logText.AppendText("\r\n\r\n任务完成!")
tasklog.AppendLogText("\r\n\r\n任务完成!")
}()
}
})
Expand All @@ -1006,19 +998,10 @@ func main() {
startTranslateBtn.SetEnabled(true)
startTranslateBtn.SetText("字幕翻译")

logText.AppendText("\r\n\r\n任务完成!")
tasklog.AppendLogText("\r\n\r\n任务完成!")
}()
}
})

//日志输出
go func() {
for finish == false {
logText.SetText("")
logText.AppendText(tasklog.GetString())
time.Sleep(time.Millisecond * 150)
}
}()
},
},
},
Expand All @@ -1041,6 +1024,9 @@ func main() {
time.Sleep(1 * time.Second)
}

//更新
tasklog.SetTextEdit(logText)

//校验依赖库
if e := ffmpeg.VailFfmpegLibrary(); e != nil {
mw.NewErrormationTips("错误" , "请先下载并安装 ffmpeg 软件,才可以正常使用软件哦")
Expand Down

0 comments on commit d43d013

Please sign in to comment.