[R語言應用] 用R語言+剪映製作YouTube直播剪輯影片 – 完全免費
0Last Updated on 2024-12-09
你有沒有想把 YouTube 的影片檔案轉成 mp3,下載到電腦裡面,但又覺得每個手動去貼網址很麻煩?這篇文章告訴你解決方法。
有喜歡的實況主或是主播或是VTuber,平常會固定開台聊天、雜談,或者直播唱歌,想剪輯精華影片或者cover曲目,幫忙他們推廣,但不知道怎麼開始嗎?過程很繁雜,要下載原始直播的影片(mov/mp4),接著剪輯你需要的片段,丟到影片編輯器後要加上開場、結尾,還要上字幕、上圖卡,最後再上傳到YouTuber上,感覺好難!沒關係,R語言加上剪映可以搞定一切,重點是完全免費
流程概述
我們先以YouTube直播為例,描述如何製作剪輯影片:
- 步驟一:鎖定你想要的直播影片,接著想辦法下載它
- 卡點一:直播動輒兩三小時,網路上的youtube2mp3、youtube 2mp4工具無法處理
- 步驟二:剪輯你想要的直播影片,接著要想辦法剪輯它
- 卡點二:整串丟到剪輯影片裡,檔案滿大的
- 步驟三:上字幕,如果是雜談要手打逐字稿,如果是歌回要找歌詞對秒數
- 卡點三:上字幕很耗時間
- 步驟三:輸出後把影片上傳到YouTube
- 這步驟最簡單
- 步驟四:為了推廣給外國人、方便聽障朋友讀影片,你想上字幕
- 剪映要付費版才能輸出srt!
你需要的工具
- 下載影片工具:RStudio + R
- 剪輯工具:RStudio + R
- 影片編輯工具:剪映
- 其他工具:json轉srt工具、youtube cc字幕轉srt工具
步驟一:下載影片,可以用R
我們在之前的文章 [R語言應用] 利用R語言把YouTube影片下載成mp3 有介紹過怎麼利用 youtube-dl 這個專案把影片下載成mp3。
裡面主要是安裝R語言套件lares
,搭配GitHub上的專案youtube-dl
,接著再回去調用lares
的函數,把影片抓成mp3。事實上,lares
是額外在R裡面方便R愛用者街上youtube-dl
,事情不一定要透過它完成、你也不一定要用R語言進行。
我們這篇會用另一個跟youtube-dl有關的專案,叫做yt-dlp。請你按照這篇文章的教學安裝yt-dlp。如果你不確定怎麼做,可以試試看在terminal(終端機)裡面執行底下的程式碼
sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp
或者在RStudio視窗裡面,下方console旁邊的terminal,點進去後貼上上面那段程式碼,應該就可以下載下來了。
安裝好之後,接著你就可以下載mp4或者其他格式的影片。程式碼長這樣
system('yt-dlp --output "%(title)s.%(ext)s" --embed-thumbnail --add-metadata --merge-output-format mp4 "https://www.youtube.com/watch?v=-AzoKJwuqs4"')
裡面的YouTube連結放上你想要的就好,它就會將影片下載到你R語言專案的預設路徑。因為直播時常往往超過一小時,所以會一直顯示在跑,請耐心等候。接下來就可以開始準備剪輯囉。
步驟二:剪輯影片,可以用R
剪輯影片部分,你可以用R剪輯(其實是用yt-dlp
),也可以直接丟到影片編輯軟體裡面處理,這部分看你。
丟到R有什麼好處?我覺得寫程式跟影片編輯軟體那種圖形介面(Graphic User Interface,GUI)最大差異就是能否標準化,藉此提升效率。
有幾個地方我覺得R比GUI好:用R可以不用手動拖拉決定要剪到哪一段、用R可以不用手動算秒數、用R可以設定參數確保檔案名稱不會亂寫;如果用心寫函數的話,R應該也可以幫上後面產出SRT檔,但這塊我還沒鑽研。
上面提的好處發生在什麼地方?先給大家看我的程式碼。
### 寫一個function轉秒數
timecode_to_second <- function(timecode) {
# 將輸入轉換為字串
timecode <- as.character(timecode)
# 確認長度是否為四位數,否則補零到四位
if (nchar(timecode) < 4) {
timecode <- sprintf("%04d", as.integer(timecode))
} else if (nchar(timecode) != 4) {
stop("輸入的 timecode 格式不正確,應為四位數,例如 '0518' 或 518")
}
# 計算分鐘和秒數
minutes <- as.integer(substr(timecode, 1, 2))
seconds <- as.integer(substr(timecode, 3, 4))
# 回傳總秒數
return(minutes * 60 + seconds)
}
### 設置秒數
time_start <- timecode_to_second(2748)
time_end <- timecode_to_second(3113)
### 設置檔名
name_file <- "【歌回】VTuber 123 20241202.mp4"
name_newfile <- "VTuber 123 - 每次都想呼喊你的名字 cover.mp4"
### 執行剪輯
system(paste0('ffmpeg -hide_banner -loglevel panic -y -ss ', time_start, ' -to ', time_end,' -i "',name_file,'" "', name_newfile,'" '))
後面步驟還在撰寫中!
No Comments