2016-04-15 199 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类型的变量会阻塞代码并使其变得臃肿。