fcpx快速添加字幕 | final cut pro導入fcpxml字幕文件與視頻時間對不上?我用代碼搞定了

點擊觀看視頻課程 ↓↓↓

fcpx快速添加字幕 | final cut pro導入fcpxml字幕文件與視頻時間對不上?教你一招搞定

大家好,我是寧一,這段時間我升級了剪輯視頻的設備,從iMovie升級成了fcpx,花了我10頓火鍋、100頓麻辣燙的錢,這樣想想怎麼莫名的有點心疼。。
主要是想要提高一下自己製作視頻的質量,最主要的想要給視頻加上字幕,但是做字幕的時候把我卡住了,導入fcpxml字幕文件與視頻時間的對不上

接下來給大家演示一下製作字幕的步驟,並展示一下問題以及我的解決方法

首先只導出視頻的語音mp3文件,注意導出的語音文件不要有背景音樂

再將這個文件導入到網易見外工作臺這個網站裏面,調整錯誤之後,我們就能得到一個srt字幕文件

然後用網站將srt文件轉成fcpxml文件,導入到fcp裏面,一直到這一步都很順利

但是後面,我將字幕粘貼到項目中的時候,發現這些字幕都沒有對齊,每條字幕都好像長了一點

並且切換字幕的時候,有重疊

並且是那種一開始能對的上,越往後時間誤差越大的那種,要是都對不上,我還可以統一拖動字幕,現在這樣需要我一個一個去對時間,太麻煩了

但是,我們程序員不是吃素的,這種批量處理的問題可以用代碼解決的~~

於是我打開了fcpxml字幕文件,分析了一下他的源碼,果然讓我找到了解決的方法!

具體分析過程我就不說了,我是花了一天半的時間分析出來的。。直接跟大家說說時間對不上的原因吧

就是我們導出的字幕裏面,結尾和開頭都是一樣的時間,這樣在視頻中,在同一個時間上面,就會有兩個字幕幀

這樣每條字幕的長度都長出了一幀,然後導致後面的誤差越來越大

我們需要將每個字母的時間都縮短一幀的長度,這樣字幕就正確了,就是將fcpxml文件中的duration字段後面的數字減掉100,比如

//原先
 duration="2700/3000s"
//修改後
 duration="2600/3000s"

你不是程序員的話,可以直接粘貼我的代碼,不需要安裝其他軟件,直接跟着我一步步操作就可以

我們先將這個fcpxml字幕文件複製一下,重命名爲new文件,並將原始的字幕文件重命名爲old

在來拿到old這個文件的路徑,右鍵點擊這個文件,點擊顯示簡介,這個位置就是路徑,我們複製一下

來到應用程序裏面打開終端,粘貼路徑,粘貼下來可能與顯示的不太一樣,變成英文的格式,就是像是這樣,這裏的用戶就會變成User

接下來我們用Ruby語言來解決,蘋果電腦上面都會自動安裝ruby環境的,如果你不確定是否有這個環境,可以輸入ruby -v檢查一下,-v前面有個空格,如果出現了版本號,就說明有ruby環境,可以跟着我進行下面的操作了

~$ ruby -v
ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-darwin14]

如果沒有的話,可以找身邊的程序員朋友,給他我接下來粘貼的代碼,幫你轉換一下哦~~

當然別忘了給人家發一個紅包,畢竟程序員都是很忙滴~~~

我們在終端輸入irb,前面會變成序號加一個向右的箭頭,現在就進入了代碼編輯的狀態

~$ irb
2.2.1 :001 >

接下來我們來定義一個路徑,這個路徑替換成你剛剛複製的old.fcpxml文件的路徑

~$ path = "/Users/xuzhaoning/Downloads"

接下來複制下面的代碼

#第一次複製的代碼
text = File.read("#{path}/old.fcpxml")
f = File.open("#{path}/old.fcpxml", "r")
f.each_line do |line|
  m_duration = line.match(/duration.{2}(\d*)\/3000s.{1}/)
  if m_duration && m_duration[1]
  	m_duration_num = m_duration[1].to_i
  	if m_duration_num > 100
  	m_duration_num = m_duration_num - 100
  	end
  	m_duration_true = m_duration[0].gsub(m_duration[1],m_duration_num.to_s)
    puts "===m_duration=========#{m_duration[0]}======"
  	puts "===m_duration_true=========#{m_duration_true}======"
  	text = text.gsub(m_duration[0],m_duration_true)
  end
end

會打印出一些信息,m_duration_true後面的數字總是比上一行m_duration後面的數字小100,就說明代碼運行成功了

接下來我們再複製下面的代碼,將改正之後的字幕導入到new.fcpxml文件中

#第二次複製
path2 = "#{path}/new.fcpxml"
file = File.open(path2,"w")
file.write(text)
file.close

運行完成後,我們再將這個new.fcpxml文件導入到fcp中,現在字幕就與視頻的時間是一致的了。

如果字幕比較少的話,也可以在fcpxml文件中手動修改duration這個數值,要注意的是,這個值只能是100的倍數,不能是50 55這樣的數字

我們字幕的問題這樣就解決啦,所以大家好好學着寫代碼吧,不僅能用來寫項目,也能解決很多日常的問題,加油~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章