Эта статья о создании видео Reddit видео с нуля с помощью Python. Наш загрузчик сможет загружать видео вместе со звуком.
Reddit делает жестко загружать выступом видео напрямую. Это потому, что Reddit сохраняет аудио и видео отдельно на своих серверах. Но это не большая проблема, так как мы скачаем как аудио, так и видео отдельно и присоединяйтесь к ним, используя FFMPEG
Отказ
Как получить URL-адрес видео?
Каждый пост Reddit может быть проанализирован как JSON, просто добавив .json
к URL. Таким образом,
https://www.reddit.com/r/PublicFreakout/comments/kwif5d/insurrectionist_gets_arrested_trying_to_break/
становится
https://www.reddit.com/r/PublicFreakout/comments/kwif5d/insurrectionist_gets_arrested_trying_to_break.json
Перейти к URL JSON, и вы должны увидеть что-то вроде,
Оттуда это легко. Нажмите Ctrl + F
и искать .mp4.
.
Это то, что нам нужно, Завергивающийся URL
Отказ Теперь приходится выяснить, как добраться сюда, начиная с вершины.
Если вы пытаетесь поэкспериментировать с этим самостоятельно, убедитесь, что вы либо загружаете JSON или попробуйте использовать jupyter.
или калабиль
. Функция ограничения скорости Reddit не позволит вам часто получать данные JSON.
Во-первых, получите данные JSON, используя Запросы
Отказ
data = requests.get(post_url).json()
где post_url
это URL JSON.
Получить URL-адрес, используя,
url = data[0]["data"]["children"][0]["data"]["secure_media"]["reddit_video"][ "fallback_url" ]
Так выглядит типичный видео URL,
https://v.redd.it/jvjih3f894b61/DASH_1080.mp4?source=fallback
Не лучший подход. Здесь мы даже не проверили, существуют ли ключи. Предположим, это стандартный формат для всех постов.
Как насчет аудио URL?
Аудио URL недоступен в данных JSON. Но это можно получить, используя простой взлом.
Как уже упоминалось выше, это URL-адрес видео. Перейдите на URL и проверьте, только ли это видео.
https://v.redd.it/jvjih3f894b61/DASH_1080.mp4?source=fallback
Здесь Dash_1080.mp4
Имя файла, где 1080 – это разрешение. Замените разрешение на Аудио
, а вы получаете аудио URL.
Таким образом, аудио URL, соответствующий нашему URL, является https://v.redd.it/jvjih3f894b61/dash_audio.mp4source=Aldback
Теперь, когда у вас есть как аудио, так и видео, скачайте их в питоновом пути.
import urllib.request urllib.request.urlretrieve( url, filename=output_path, )
Если вы большой поклонник прогресса, добавьте один, используя ReportHook
urlretRiev.
from tqdm import tqdm class DownloadProgressBar(tqdm): def update_to(self, b: int = 1, bsize: int = 1024, tsize: int = None): if tsize is not None: self.total = tsize self.update(b * bsize - self.n) with DownloadProgressBar(unit="B", unit_scale=True, miniters=1) as d: urllib.request.urlretrieve( url, filename=output_path, reporthook=d.update_to, )
Давайте объединиться
Как только файлы загружаются в audio.mp4
и Video.mp4
Давайте объединим их с помощью FFMPEG.
FYI, вы можете иметь любое имя для аудио и видео выходных файлов.
Если у вас не установлен FFMPEG, скачайте его из здесь для окон.
Для Linux,
sudo apt install ffmpeg
Теперь убедитесь, чтобы объединить их оба,
ffmpeg -i video.mp4 -i audio.mp4 -c:v copy -c:a aac output.mp4
Это не займет более нескольких секунд, чтобы слиться. После завершения наслаждайтесь видео.
Вывод
В этом посте мы увидели, как скачать видео Reddit вместе со своим аудио с помощью Python. Такого подхода ничего не было; Все, что нам нужно было сделать, было как-то URL. Если есть лучший подход, пожалуйста, скажите.
Я пошел вперед и создал Python Cli по имени Redl
Отказ Бегать,
redl https://www.reddit.com/r/PublicFreakout/comments/kwif5d/insurrectionist_gets_arrested_trying_to_break/
скачать видео.
Весь код можно найти в
amalshaji/Редл
Reddit Video Downloader (с аудио) в Python
⚠️ Требуется FFMPEG установлен
Redl Scrapes The Reddit Post JSON и избирает как аудио, так и видео URL. Как только эти файлы будут загружены, он использует FFMPEG
присоединиться к ним.
Установка
pip install redl --user
использование
redl https://www.reddit.com/r/Damnthatsinteresting/comments/kwrbde/making_a_grapefruit_dessert/
Оригинал: “https://dev.to/amal/build-a-reddit-video-downloader-with-python-5djb”