TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua

 找回密码
 新人加入
查看: 6000|回复: 5
打印 上一主题 下一主题

TCAX視頻處理模塊tcVideo Beta版發佈 [复制链接]

Administrator

Shanzhai Pro.

Rank: 7Rank: 7Rank: 7

跳转到指定楼层
楼主
发表于 2014-5-2 01:22:03 |只看该作者 |倒序浏览
說明

使用該模塊 獲取視頻信息 分辨率顏色透明度之類
使用方法: 解壓後 將tcVideo文件夾 複製進tcax程序目錄下 util文件夾內
py編寫時 開頭追加 from util.tcVideo import * 即可

用法 見附帶例子 test_video py內有詳細注釋 (執行腳本前 複製一個任意視頻進工作目錄 改名為test.mp4 )

模塊下載地址:
http://pan.baidu.com/s/1ntoIUfR  

test_video.zip (2.12 KB, 下载次数: 2085)
2

查看全部评分

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

沙发
发表于 2014-5-2 22:15:51 |只看该作者
顶起, 下(you)个(sheng)版(zhi)本(nian)包含这个升级

Rank: 4

板凳
发表于 2014-5-3 10:11:29 |只看该作者
milkyjing 发表于 2014-5-2 22:15
顶起, 下(you)个(sheng)版(zhi)本(nian)包含这个升级

突然想说一句,奶大节哀

Rank: 4

地板
发表于 2014-5-3 20:40:40 |只看该作者
milkyjing 发表于 2014-5-2 22:15
顶起, 下(you)个(sheng)版(zhi)本(nian)包含这个升级

233

Rank: 4

5#
发表于 2014-6-30 08:33:32 |只看该作者
还不清楚怎么用,先看看

Rank: 4

6#
发表于 2014-11-7 23:58:32 |只看该作者
milkyjing 发表于 2014-5-2 22:15
顶起, 下(you)个(sheng)版(zhi)本(nian)包含这个升级

大大 你这话说的   (-。-;)

Rank: 4

7#
发表于 2022-1-26 01:51:05 |只看该作者
本帖最后由 Seekladoom 于 2022-1-26 22:11 编辑
milkyjing 发表于 2014-5-2 22:15
顶起, 下(you)个(sheng)版(zhi)本(nian)包含这个升级

真成有生之年了。。。

楼主度盘下不了的朋友看这里,分卷下好后一起解压即可到tcVideo模块:
tcVideo.part1.rar (950 KB, 下载次数: 1731)
tcVideo.part2.rar (950 KB, 下载次数: 1696)
tcVideo.part3.rar (797.06 KB, 下载次数: 1718)
  1. from tcaxPy import *
  2. from util.tcVideo import *

  3. def tcaxPy_User():
  4.     file_name = GetVal(val_OutFile) + '.ass'
  5.     ass_header = GetVal(val_AssHeader)
  6.     ASS_FILE = CreateAssFile(file_name, ass_header)
  7.     fx_fps = GetVal(val_FXFPS)
  8.     ASS_BUF = []
  9.     tcVideoInit()    # 初始化
  10.     video = tcVideoOpen('test.mp4')  # 載入視頻
  11.     print(tcVideoGetProps(video))  # tcVideoGetProps()獲取屏幕分辨率
  12.     tcVideoSetRes(video, 848, 480) # 縮放
  13.     print(tcVideoGetProps(video))  # 還是獲取分辨率
  14.     PIX = tcVideoGetFrame(video, 100)  # 獲取第100幀的畫面像素信息 返回一個PIX結構(和粒子字是一樣的)
  15.     SavePix(abspath('screenshot1.png'), PIX)  # 沒什麼用 輸出圖片
  16.     PIX = tcVideoGetFrameByTime(video, 100 / fx_fps) # 按時間獲取
  17.     SavePix(abspath('screenshot2.png'), PIX)
  18.     tcVideoSetRes(video, 1280, 720)  
  19.     for i in range(1000):
  20.         r, g, b, a = tcVideoGetFrameColor(video, i)   #獲取第i幀 顏色(平均值)基本一點用都沒有
  21.         clr = FmtRGB(r, g, b)
  22.         ass_main(ASS_BUF, SubL(i * 100 / fx_fps, (i + 1) * 100 / fx_fps), pos(100, 100) + color1(clr) + color3("0000FF") + bord(2) + alpha(0), 'R')  # alpha(255-a) 可以調用alpha值 這邊例子為了充分顯示顏色 不加透明度

  23.         r2, g2, b2, a2 = tcVideoGetFramePosColor(video, i,1100,620) #取第i幀 (1100,620)坐標的顏色
  24.         clr2 = FmtRGB(r2, g2, b2)
  25.         ass_main(ASS_BUF, SubL(i * 100 / fx_fps, (i + 1) * 100 / fx_fps), pos(1100, 620) + color1(clr2) + color3("0000FF")+ bord(2) + alpha(0), 'H')

  26.         r3, g3, b3, a3 = tcVideoGetFrameRectColor(video, i,590,310,690,410) #取第i幀 區域方塊顏色的中值 (590,310) 是區域左上角坐標 (690,410)為區域右下角坐標 因為還是用排序來取中值 如果設置範圍太大 運算效率會很低 我姑且測試了一下 (0,0)到(1280,720) i5 CPU 4G內存 1000幀用了 近300秒  
  27.         clr3 = FmtRGB(r3, g3, b3)
  28.         ass_main(ASS_BUF, SubL(i * 100 / fx_fps, (i + 1) * 100 / fx_fps), pos(640, 360) + color1(clr3) + color3("0000FF") + bord(2) + alpha(0), '日')

  29.         progress(i + 1, 1000)
  30.     WriteAssFile(ASS_FILE, ASS_BUF)
  31.     tcVideoClose(video)
  32.     tcVideoFin()
  33.     FinAssFile(ASS_FILE)



  34. ##############################################

  35. def tcas():
  36.     file_name = GetVal(val_OutFile) + '.tcas'
  37.     fx_width = GetVal(val_ResolutionX)
  38.     fx_height = GetVal(val_ResolutionY)
  39.     fx_fps = GetVal(val_FXFPS)
  40.     TCAS_FILE = CreateTcasFile(file_name, fx_width, fx_height, fx_fps)
  41.     TCAS_BUF = []
  42.     tcas_main(...)
  43.     WriteTcasFile(TCAS_FILE, TCAS_BUF)
  44.     FinTcasFile(TCAS_FILE)


  45. def ass():
  46.     file_name = GetVal(val_OutFile) + '.ass'
  47.     ass_header = GetVal(val_AssHeader)
  48.     ASS_FILE = CreateAssFile(file_name, ass_header)
  49.     ASS_BUF = []
  50.     fx_fps = GetVal(val_FXFPS)
  51.     FinAssFile(ASS_FILE)
复制代码

Rank: 4

8#
发表于 2022-1-26 03:11:59 |只看该作者
本帖最后由 Seekladoom 于 2022-1-26 03:13 编辑

居然是用def tcaxPy_User写的,试试看能不能改成def tcaxPy_Init的格式并运行。

Rank: 4

9#
发表于 2022-1-29 04:26:19 |只看该作者
本帖最后由 Seekladoom 于 2022-1-29 04:27 编辑

传个能跑的脚本:
【tcVideo】TCAX Karaoke Effect test.rar (7.2 KB, 下载次数: 1623)


  1. from tcaxPy import *
  2. from util.tcVideo import *

  3. def tcaxPy_Init():
  4.     global fontSize    # as name implies
  5.     global resX        # horizontal resolution
  6.     global resY        # vertical resolution
  7.     global marginX     # horizontal margin
  8.     global marginY     # vertical margin
  9.     global spacing     # space between texts
  10.     global frameDur    # milliseconds per frame
  11.     global lineNum     # number of lines
  12.     global textNum     # textNum[i], number of texts in ith line
  13.     global _BT         # _BT[i], start time of a line
  14.     global _ET         # _ET[i], end time of a line
  15.     global _KT         # _KT[i][j], karaoke time of a syllable
  16.     global _SK         # _SK[i][j], elapsed karaoke time before reaching a certain syllable
  17.     global _TXT        # _TXT[i][j], as name implies
  18.     global _L          # _L[i], total width of a line
  19.     global _W          # _W[i][j], width of a text
  20.     global _H          # _H[i][j], height of a text
  21.     global _A          # _A[i][j], advance of a text, usually larger than width
  22.     global _AD         # _AD[i][j], distance between the current text to the first text of the line
  23.     fontSize     = GetVal(val_FontSize)
  24.     resX         = GetVal(val_ResolutionX)
  25.     resY         = GetVal(val_ResolutionY)
  26.     marginX      = GetVal(val_OffsetX)
  27.     marginY      = GetVal(val_OffsetY)
  28.     spacing      = GetVal(val_Spacing)
  29.     frameDur     = 1000 / GetVal(val_FXFPS)
  30.     lineNum      = GetVal(val_nLines)
  31.     textNum      = GetVal(val_nTexts)
  32.     _BT          = GetVal(val_BegTime)
  33.     _ET          = GetVal(val_EndTime)
  34.     _KT          = GetVal(val_KarTime)
  35.     _SK          = GetVal(val_KarTimeDiff)
  36.     _TXT         = GetVal(val_Text)
  37.     _L           = GetVal(val_TextLength)
  38.     _W           = GetVal(val_TextWidth)
  39.     _H           = GetVal(val_TextHeight)
  40.     _A           = GetVal(val_TextAdvance)
  41.     _AD          = GetVal(val_TextAdvanceDiff)


  42.     global _FD
  43.     global _Fs
  44.     global Font
  45.     global fx_fps
  46.     _FD = 1000 / GetVal(val_FXFPS)
  47.     _Fs = GetVal(val_FontSize)
  48.     Font = InitFont(GetVal(val_FontFileName), GetVal(val_FaceID), _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), 0xFFFFFF, 0, 0)
  49.     fx_fps = GetVal(val_FXFPS)
  50.      
  51. def tcaxPy_Fin():
  52.     FinFont(Font)

  53. def tcaxPy_User():
  54.     # 创建ASS文件
  55.     file_name = GetVal(val_OutFile) + '.ass'
  56.     ass_header = GetVal(val_AssHeader)
  57.     ASS_FILE = CreateAssFile(file_name, ass_header)
  58.     fx_fps = GetVal(val_FXFPS)
  59.     ASS_BUF = []
  60.    
  61.     # tcVideo
  62.     tcVideoInit()    # 初始化
  63.     video = tcVideoOpen('mekakucityactors_NCED.mp4')  # 載入視頻
  64.     print(tcVideoGetProps(video))  # tcVideoGetProps()獲取屏幕分辨率
  65.     tcVideoSetRes(video, 1920, 1080) # 縮放
  66.     print(tcVideoGetProps(video))  # 還是獲取分辨率
  67.     PIX = tcVideoGetFrame(video, 100)  # 獲取第100幀的畫面像素信息 返回一個PIX結構(和粒子字是一樣的)
  68.     SavePix(abspath('screenshot1.png'), PIX)  # 沒什麼用 輸出圖片
  69.     PIX = tcVideoGetFrameByTime(video, 100 / fx_fps) # 按時間獲取
  70.     SavePix(abspath('screenshot2.png'), PIX)
  71.     tcVideoSetRes(video, 1920, 1080)

  72.     for i in range(lineNum):
  73.         initPosX = marginX + (resX - _L[i]) / 2                 # an 7, 4, 1
  74.         initPosY = marginY                                      # an 7, 8, 9
  75.         for j in range(textNum[i]):
  76.             if _TXT[i][j] == '' or _TXT[i][j] == ' ' or _TXT[i][j] == ' ':
  77.                 continue
  78.             t0 = _BT[i] - 15 + j * 7
  79.             t1 = t0 + 50
  80.             frames = int((_ET[i] - 60 - t1) * 10 / _FD + 0.5)
  81.             # an 2
  82.             DX = initPosX + _AD[i][j] + _A[i][j] / 2
  83.             DY = initPosY + resY - 44
  84.             for c in range(frames):
  85.                 r, g, b, a = tcVideoGetFrameRectColor(video,c,0,1000,1920,1065) #取第c帧区域矩形颜色的中值(1100,620)坐標的顏色
  86.                 clr = FmtRGB(r, g, b)
  87.                 ass_main(ASS_BUF, SubL(c * 100 / fx_fps,(c + 1) * 100 / fx_fps), pos(DX, DY) + color1(clr) + color3("0000FF") + bord(2) + alpha(0), _TXT[i][j])

  88.                 progress(c + 1, 2208)
  89.     WriteAssFile(ASS_FILE, ASS_BUF)
  90.     tcVideoClose(video)
  91.     tcVideoFin()
  92.     FinAssFile(ASS_FILE)
复制代码

您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-11-22 05:34

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH