2016-04-15 197 views
2

好吧,所以我用我寫的bash腳本有這個小問題。youtube-dl問題(腳本)

這個腳本應該是這樣運行的:

bash script.sh https://www.youtube.com/user/<channel name> 

OR

bash script.sh https://www.youtube.com/user/<random characters that make up a youtube channel ID> 

它下載一個完整的YouTube頻道,以一個名爲

<uploader>{<uploader_id>}/ 

文件夾或者,至少它應該...

我得到的問題是youtube-dl創建的archive.txt文件不是與視頻在同一個目錄中創建的。它在運行腳本的目錄中創建。

是否有grep或sed命令,我可以用它來獲取archive.txt文件到視頻文件夾?

或者可能創建文件夾第一,然後cd到它,並從那裏運行命令? 我不知道

這裏是我的腳本:

#!/bin/bash 
pwd 
sleep 1 
echo "You entered: $1 for the URL" 
sleep 1 
echo "Now downloading all videos from URL "$1"" 
youtube-dl -iw \ 
--no-continue $1 \ 
-f bestvideo+bestaudio --merge-output-format mkv \ 
-o "%(uploader)s{%(uploader_id)s}/[%(upload_date)s] %(title)s" \ 
--add-metadata --download-archive archive.txt 
exit 0 
+0

您正在告訴它將存檔創建爲'archive.txt',以便在當前目錄中發生。除非'youtube-dl'在這個參數中支持'%(uploader)s'等等,否則你只會用一個命令(或者任何一組命令,除非你有其他方法以某種方式獲取上傳者姓名和ID)。 –

+0

@EtanReisner,是的,%(上傳)s,&tc是youtube-dl使用的變量。如果youtube-dl只是將它作爲bash變量導出,那麼這會更容易,然後我可以做一個簡單的「cd」 – TheSqrtMinus1

+0

它不能這樣做。這是不可能的。它*可以*支持'--download-archive'參數中的格式。除此之外,您需要「解析」輸出並在下載後手動將文件移動到正確的目錄。這可能是值得提交的東西,但與youtube-dl有關。 –

回答

0

我結束了這個解決它:

uploader="$(youtube-dl -i -J $URL --playlist-items 1 | grep -Po '(?<="uploader": ")[^"]*')" 
uploader_id="$(youtube-dl -i -J $URL --playlist-items 1 | grep -Po '(?<="uploader_id": ")[^"]*')" 
uploaderandid="$uploader{$uploader_id}" 
echo "Uploader: $uploader" 
echo "Uploader ID: $uploader_id" 
echo "Folder Name: $uploaderandid" 
echo "Now downloading all videos from URL "$URL" to the folder "$DIR/$uploaderandid"" 

基本上,我曾與grep來解析JSON,因爲YouTube的-DL開發者說,在任何其他變量中實現-o類型的變量會阻塞代碼並使其變得臃腫。