На самом деле это довольно просто объяснить, :вы не установили компонент PyQt5 QtWebEngine.
(В Fedora 28...)
$ sudo dnf install python3-qt5-webengine
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
python3-qt5-webengine x86_64 5.10.1-4.fc28 updates 113 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 113 k
Installed size: 449 k
Is this ok [y/N]:
Тогда, как и сейчас, пакет PyQt5 не был монолитным. Некоторые компоненты разбиты на подпакеты.
$ sudo dnf list python3-qt5-\*
Installed Packages
python3-qt5-base.x86_64 5.10.1-4.fc28 @updates
python3-qt5-devel.x86_64 5.10.1-4.fc28 @updates
python3-qt5-webengine.x86_64 5.10.1-4.fc28 @updates
python3-qt5-webkit.x86_64 5.10.1-4.fc28 @updates
пожалуйста, используйте код ниже YoutubeDown.bash
#!/bin/bash
if [[ $2 == 0 ]]
then
if [[ ! -a youtubePlayListNames ]]
then
youtube-dl --get-filename -o '%(title)s' $1 --restrict-filenames | awk 'BEGIN{OFS=",";}{print NR,$0}' > youtubePlayListNames
fi
for q in $(cat youtubePlayListNames)
do
row=$(echo $q | awk -F',' '{print $1}')
fName=$(echo "$q" | awk -F',' '{print $2}')
[[ $(find. -name *$fName* | wc -l) -eq 1 ]] && continue || break
done
youtube-dl --playlist-start $row -o '%(uploader)s/%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s' $1 --restrict-filenames
elif [[ $2 == 1 ]]
then
youtube-dl -o '%(uploader)s/%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s' $1 --restrict-filenames
fi
Я использовал как показано ниже:
YoutubeDown.bash https://youtubeURL 0
Вот кое-что, что я написал сейчас, что запускаю каждую строку batch-file.txt
и запускаю на ней youtube -dl.
Если нет соединения с веб-сайтом, который вы пытаетесь загрузить с него, он будет зацикливаться до тех пор, пока соединение не будет восстановлено (, вам, вероятно, следует добавить для него некоторый тайм-аут, поскольку он не остановится.)
Я использовал curl
с ожидаемым кодом состояния 200
, поскольку, если это не сработает, вы, вероятно, не сможете загрузить.
Содержание batch-file.txt
такое же, как и раньше.
Запуск скрипта:
download.sh./batch-file.txt {download_web_site_url}
# Example:
download.sh./batch-file.txt google.com`
#!/bin/bash
# B"H
# Insted of using youtube-dl batch-file option read the file using bash.
URLS=$1 # "batch-file.txt"
# Pass the URL for site you trying to download from.
SITE_URL=$2
# This function check if url is returning 200 status code.
check_site_connection()
{
# curl to 'your_site_url' with -I option for only the respons info only
# pipe the respons tp awk with 'NR < 2' so only the first line with the status code is printed.
# Return up if respons is 200.
if [[ $(curl -Is $SITE_URL | awk 'NR < 2 {print $2}') == "200" ]];
then
echo up;
else
echo down;
fi
}
# read the batch-file.
while IFS= read -r line
do
# for each line in batch-file loop until conection to site is up with 2 seconds delay.
while [[ $(check_site_connection) == "down" ]]
do
echo "waiting for internet conection"
sleep 2
done
# run youtube-dl where line is the url to dowmload.
./youtube-dl "$line"
done < "$URLS"
Редактировать:
Только что нашел это в README.md и протестировал его работу.
Это на случай, если каждая строка представляет собой список воспроизведения, а не отдельное видео.
youtube-dl --download-archive archive.txt URL_TO_PLAYLIST
Это будет загружать только новые видео при каждом запуске, поэтому, если вы добавите --download-archive archive.txt
к сценарию выше в ./youtube-dl --download-archive archive.txt "$line"
Поэтому, если он начнется снова, он пройдет по всему плейлисту, но загрузка начнется только с того места, где она остановилась.