最近因為工作的關係,需要從 Youtube 下載影片到自己建構的 Server。確認影片的合法性之後,自己留存在本地端除了保存問題,也可以讓大陸地區可以觀看,這是最基本的需求。
把影片放在自己架設的Server其實不是一個好的選擇,主要的問題還是在於頻寬與播放問題,頻寬是花錢就有,但播放問題牽扯太廣,主要還是播放的人使用的瀏覽器不確定,此處設想大家都用新的瀏覽器,支援HTML標準Video tag,其餘太複雜的問題就先不管了,日後有需求再來研究。
選定了基本的策略後,再來就是從Youtube上把影片拉下來,工具中最好用的還是youtube-dl,假如不熟悉命令提示字元可以下載youtube-dl-gui,初始的設定即非常友善。底下紀錄一些下載時遇到的問題。
Q1: 在Youtube影片下載,近期的影片聲音部份都是opus編碼,不符合mp4的規格 (要AVC+AAC)
新的youtube聲音規格為opus如底下:
youtube-dl-check available format to download:
所以假如用youtube-dl下載後,選擇輸出mp4會報錯:
[06/28/19 12:04:49] WARNING: Requested formats are incompatible for merge and will be merged into mkv.
改成整合成mkv檔而非mp4,
解決的方法兩個:
(1) 下載比較低音質的m4a (AAC編碼), 或下載較低畫質 1280x720 (直接就是合併好的mp4,不難推論為什麼用手機開youtube都會餵720p的影片,已經事先轉好且相容度最高,流量也合理)
(2) 下載opus音訊檔案後用ffmpeg轉換/合併
如不在意畫質或聲音的問題,簡易的方法則是透過線上下載的網站幫忙轉換, 如: https://yt1s.com/
在意畫質的,可以透過youtube-dl-gui下載,勾選保留最高音質聲音與影片,進行後續ffmpeg處理。下載好的檔案會是分開的聲音跟影片,標準流程就是將聲音轉換成AAC再進行合併。
此時也可以選擇不轉換opus格式,強制ffmpeg把兩個檔案合併成mp4,之後問題就丟給播放器是否支援。在windows上的MPC-HC很強悍都有支援,但在如android裡面遇到不支援opus所以影片沒聲音,開啟軟體解碼才能播放聲音。這點看人選擇,也就是之前提到可能會發生在舊的瀏覽器/播放器會遇到無法播放聲音問題。
Q2: youtube-dl搭配ffmpeg範例
實際下載一個範例看看 (要注意windows底下bestvideo不要加 ‘ 號, 會有錯誤)
youtube-dl download video with bestvideo/bestaudio
最後有提示要用ffmpeg來修正編碼問題, DASH或opus的問題這我還沒去仔細研究,先處理聲音。
音訊檔轉aac的命令:
c:\tools\ffmpeg\ffmpeg.exe -i "Quick Shoe System Movie.f140.m4a" -codec:a aac output.aac
ffmpeg 合併的命令範例如下: (ffmpeg要用新版的否則會遇到不認識opus tag而產生錯誤)
c:\tools\ffmpeg\ffmpeg.exe -i f137.mp4 -i f251.webm -c:v copy -c:a copy output.mp4
以上大致流程,所以除了特別的需求,相容性或最高品質外,其餘的99%的需求應該可以使youtube-dl-gui解決,對於不具備電腦背景知識也可以使用線上的網站幫忙轉檔成標準的格式,會比較直覺不需要處理後續相容的問題。
日後有空再來研究DASH與opus格式。
參考文件資料:
沒有留言:
張貼留言