【免費註冊】 【會員登入】 【個人資料】 【會員列表】 【論壇幫助】 【論壇搜尋】 【登出論壇】

∮Ω奧米加空間∮
∮Ω奧米加空間∮»技術文件區»【原創】Netflix 字幕下載 並將 vtt 轉 srt

訂覽該主題更新消息 | 將該主題推薦給朋友 發表新主題 發起投票  回覆
作者 主題    
dc
管理員



性別:男
來自:瓦肯星
發表總數:8244
註冊時間:2002-05-07 16:32
(第 1 篇) 【原創】Netflix 字幕下載 並將 vtt 轉 srt

首先需要有 Netflix 的帳號才能繼續往下走喔~

使用 Chrome 瀏覽器

安裝腳本 Netflix - subtitle downloader
網址是 https://greasyfork.org/zh-TW/scripts/26654-netflix-subtitle-downloader




腳本安裝完後我們回到 Netflix 找影片播放


選右下角的字幕,可以看到多了 Netflix subtitle downloader 這個選項
Download subs for this episode 是下載單集字幕,全部的語言都會下載
Download subs from this ep till last available 是下載全部影集的字幕,全部的語言都會下載。他會自動打開其他集數的影片,並下載字幕打包成 zip 檔。


全部抓完後會打包


zh-Hant.vtt 為繁體中文字幕,可以看到是 WEBVTT 字幕


離線播放的時候無法直接使用必須轉成 srt 格式,在 linux 模式底下的話與 vtt 字幕同一個目錄裡建立 vi t.sh 填入下面的 script
代碼:
rsync -a *.vtt srt/
cd srt

for f in *.vtt; do
  base=`basename $f .vtt`
  mv $f $base.srt
done

find ./*.srt -exec sh -c 'del=`head -n 30 {} | grep -n "NOTE /SegmentIndex" | cut -d":" -f 1` ; del+="d" ; sed -i "1,$del;s/<c.[a-z]*>//g;s/<\/c.[a-z]*>//g;s/<c.[a-z_]*>//g;s/<\/c.[a-z_]*>//g;s/^&[a-z]*;//g;s/position:.*//g" {}' \;


./t.sh 執行

之後到下一層的 srt 目錄打開檔案,可以看到已經轉成 srt 格式了。


為什麼要抓取字幕呢?因為離線下載的字幕是跟著影片解析度在一起的,例如 星艦奇航記:重返地球 Star Trek Voyager 解析度是 480P
如下圖下方是內建的字幕,解析度就是 480P 看得很辛苦。但是外掛字幕的話如下圖上方就非常的清晰不會被影片解析度限制。





本帖由dc最後編輯於2020-02-21 08:13

Your mind to my mind,

your thought to my thought
發表時間:2020-02-20 07:42
dc的個人資料 傳送郵件給dc dc的個人首頁 dc發表的所有文章 送出悄悄話給dc IP:114.*.*.* 編輯  引言回覆 
dc
管理員



性別:男
來自:瓦肯星
發表總數:8244
註冊時間:2002-05-07 16:32
(第 2 篇)

更進階一點的處理方式為

例如
目錄結構為

影集1
|-Episode 1.mp4
|-Episode 2.mp4
|-Episode 3.mp4
|-字幕.zip

影集2
|-Season 1
|       |-01 xx.mp4
|       |-02 xx.mp4
|-Season 2
|       |-01 xx.mp4
|       |-02 xx.mp4
|-字幕.zip

如果離線檔案 mp4 只有標題沒有數字編號的話,必須自己加上 01 02 03 才有辦法對應字幕的 S01E01 S01E02 S01E03

我們要將字幕解壓縮 -> 轉成 srt 格式 -> 放到對應的影集資料夾底下的話,可以在影集的根目錄下 vi t.sh

代碼:
#!/bin/bash

find ./*.zip -exec sh -c 'echo "Unzip the file {}" ; /usr/bin/7z e -ovtt "{}" ; echo "Unzip the file {} is OK"' \;

cd vtt ; echo "Rsync vtt to srt" ; rsync -a *.vtt ../srt ; cd ../srt ; echo "Rename vtt to srt"

for f in *.vtt; do
  base=`basename $f .vtt`
  mv $f $base.srt
done

echo "Change vtt format to srt"

find ./*.srt -exec sh -c 'del=`head -n 30 "{}" | grep -n "NOTE /SegmentIndex" | cut -d":" -f 1` ; del+="d" ; sed -i "1,$del;s/<c.[a-z]*>//g;s/<\/c.[a-z]*>//g;s/<c.[a-z_]*>//g;s/<\/c.[a-z_]*>//g;s/^&[a-z]*;//g;s/position:.*//g" "{}"' \;

cd ..

find ./ -type f | grep -E "\.mp4" | grep -v "@eaDir" | sort -k1,1 -k2n | awk -v awk_newname="newname.txt" 'BEGIN {FS="/"}
{
  if ( ("" != $2) && ("" == $3) )
    {
     delext=$2
     gsub(/.mp4/,".srt",delext)
     print delext >> awk_newname
    }
}
'

find ./ -type f | grep -E "\.mp4" | grep -v "@eaDir" | sort -k2,2 -k3n | awk -v awk_newname="newname.txt" 'BEGIN {FS="/"}
{
  if ( ("" != $2) && ("" != $3) && ("" == $4) )
    {
     delext=$3
     gsub(/.mp4/,".srt",delext)
     print $1"/"$2"/"delext >> awk_newname
    }
}
'

find ./ -type f | grep -E "\zh-Hant.srt" | sort >> oldname.txt

loopTimes=1

echo "Copy zh-Hant.srt to Movie Dir"

while read fileName
do
lineNum=`echo $loopTimes"p"`
newFileName=`sed -n $lineNum newname.txt`
echo "cp $fileName $newFileName"
cp "$fileName" "$newFileName"
loopTimes=`expr $loopTimes + 1`
done < oldname.txt

rm newname.txt
rm oldname.txt


然後 ./t.sh
他就會幫你轉好囉~




本帖由dc最後編輯於2020-02-21 23:55

Your mind to my mind,

your thought to my thought
發表時間:2020-02-21 23:40
dc的個人資料 傳送郵件給dc dc的個人首頁 dc發表的所有文章 送出悄悄話給dc IP:118.*.*.* 編輯  引言回覆 
所有時間均為GMT+8, 現在是2020-02-22 16:01    
訂覽該主題更新消息 | 將該主題推薦給朋友 發表新主題 發起投票  回覆

快速回覆
主題 ( 回覆文章可以不輸入標題 )
URLs自動分析
有回覆時郵件通知
禁用表情符號
使用簽名

<聯絡我們 - OMEGA - 控制面板>

Powered by Centaur & Joksky & DC, ver 2003.08.14
Copyright ©2002-2008 PHPY.COM


頁面生成時間:0.0088520050048828