Про yt-dlp я уже написал целую кучу постов, включая небольшое исследование. Все посты про сабж можно найти по тегу.
Вашему вниманию очередной пост с переписыванием собственных скриптов, в связи с переходом на Linux. В принципе, никто не мешает использовать скрипт из этого поста и в окошках, если разместить рядом утилиту ffmpeg.
Скрипт сегодняшнего вечера — getvideo.py — осуществляет взаимодействие с утилитой yt-dlp. Конечно, только при условии её наличия в системе. Кроме самой утилиты необходима и хорошо знакомая нам программа ffmpeg, которая будет отвечать за слияние аудио и видео потоков в один итоговой медиафайл.
Код скрипта getvideo.py:
#!/usr/bin/python
import subprocess
import argparse
import shutil
import sys
# Заголовок скрипта
title="Скачивание видео с помощью yt-dlp"
# Команда yt-dlp
command="yt-dlp"
# Проверка доступности команды в системе
def is_command_available(command):
return shutil.which(command) is not None
# Скачивание видео
def download_video(url):
format_option = "-f bestvideo[height<=1080][ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best"
merge_format = "--merge-output-format"
output_path = "-o %(title)s.%(ext)s"
try:
subprocess.run([command, format_option, merge_format, 'mp4', url, output_path], check=True)
except subprocess.CalledProcessError as e:
print(f"Ошибка: {e}")
# Скачивание видео списком
def download_video_from_list(url_list):
format_option = "-f bestvideo[height<=1080][ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best"
merge_format = "--merge-output-format"
output_path = "-o %(title)s.%(ext)s"
try:
subprocess.run([command, format_option, merge_format, 'mp4', '-a', url_list, output_path], check=True)
except subprocess.CalledProcessError as e:
print(f"Ошибка: {e}")
# Основная функция
def main():
parser = argparse.ArgumentParser(description=title)
parser.add_argument('--url', type=str, help='URL для скачивания видео.')
parser.add_argument('--list', type=str, help='Путь к файлу со списком URL для скачивания.')
args = parser.parse_args()
if not is_command_available(command):
print(f"Ошибка: {command} не установлен. Установите его и попробуйте снова.")
sys.exit(1)
if args.url and args.list:
print("Ошибка: нельзя использовать одновременно параметры --url и --list.")
sys.exit(1)
if args.url:
download_video(args.url)
if args.list:
download_video_from_list(args.list)
# Точка входа
if __name__ == "__main__":
main()
Интерпретатор уже объявлен в коде скрипта и всё, что нужно — сделать его исполняемым:
sudo chmod +x getvideo.py
Вот так можно передать скрипту отдельную ссылку:
getvideo.py --url http://.../
А так можно осуществить пакетную передачу ссылок из простого линклиста:
getvideo.py --list list.txt
Линклист может быть любым файлом, содержащим простой текст. Даже стиль переноса строк в файле совершенно не важен.