Учебники

Обработка изображений и видео

Интернет-очистка обычно включает в себя загрузку, хранение и обработку веб-медиа-контента. В этой главе мы расскажем, как обрабатывать контент, загруженный из Интернета.

Вступление

Веб-медиа-контент, который мы получаем во время очистки, может представлять собой изображения, аудио- и видеофайлы в виде не веб-страниц, а также файлы данных. Но можем ли мы доверять загруженным данным, особенно по расширению данных, которые мы собираемся загрузить и сохранить в памяти нашего компьютера? Это делает необходимым знать о типе данных, которые мы собираемся хранить локально.

Получение медиа-контента с веб-страницы

В этом разделе мы узнаем, как мы можем загружать мультимедийный контент, который правильно представляет тип мультимедиа на основе информации с веб-сервера. Мы можем сделать это с помощью модуля запросов Python, как мы это делали в предыдущей главе.

Во-первых, нам нужно импортировать необходимые модули Python следующим образом:

import requests

Теперь укажите URL медиа-контента, который мы хотим загрузить и сохранить локально.

url = "https://authoraditiagarwal.com/wpcontent/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg"

Используйте следующий код для создания объекта ответа HTTP.

r = requests.get(url) 

С помощью следующей строки кода мы можем сохранить полученный контент в виде файла .png.

with open("ThinkBig.png",'wb') as f:
   f.write(r.content) 

После запуска вышеуказанного скрипта Python мы получим файл с именем ThinkBig.png, в котором будет загруженный образ.

Извлечение имени файла из URL

После загрузки контента с веб-сайта мы также хотим сохранить его в файл с именем файла, найденным в URL. Но мы также можем проверить, существуют ли номера дополнительных фрагментов и в URL. Для этого нам нужно найти фактическое имя файла из URL.

С помощью следующего скрипта Python, используя urlparse , мы можем извлечь имя файла из URL —

import urllib3
import os
url = "https://authoraditiagarwal.com/wpcontent/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg"
a = urlparse(url)
a.path

Вы можете наблюдать результат, как показано ниже —

'/wp-content/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg'
os.path.basename(a.path)

Вы можете наблюдать результат, как показано ниже —

'MetaSlider_ThinkBig-1080x180.jpg'

Как только вы запустите приведенный выше скрипт, мы получим имя файла из URL.

Информация о типе контента из URL

При извлечении содержимого с веб-сервера по запросу GET мы также можем проверить его информацию, предоставленную веб-сервером. С помощью следующего скрипта Python мы можем определить, что означает веб-сервер с типом контента —

Во-первых, нам нужно импортировать необходимые модули Python следующим образом:

import requests

Теперь нам нужно предоставить URL медиа-контента, который мы хотим загрузить и сохранить локально.

url = "https://authoraditiagarwal.com/wpcontent/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg"

Следующая строка кода создаст объект ответа HTTP.

r = requests.get(url, allow_redirects=True)

Теперь мы можем узнать, какую информацию о контенте может предоставить веб-сервер.

for headers in r.headers: print(headers)

Вы можете наблюдать результат, как показано ниже —

Date
Server
Upgrade
Connection
Last-Modified
Accept-Ranges
Content-Length
Keep-Alive
Content-Type

С помощью следующей строки кода мы можем получить конкретную информацию о типе контента, скажем, тип контента —

print (r.headers.get('content-type'))

Вы можете наблюдать результат, как показано ниже —

image/jpeg

С помощью следующей строки кода мы можем получить конкретную информацию о типе контента, скажем, EType —

print (r.headers.get('ETag'))

Вы можете наблюдать результат, как показано ниже —

None

Соблюдайте следующую команду —

print (r.headers.get('content-length'))

Вы можете наблюдать результат, как показано ниже —

12636

С помощью следующей строки кода мы можем получить конкретную информацию о типе контента, скажем, Server —

print (r.headers.get('Server'))

Вы можете наблюдать результат, как показано ниже —

Apache

Создание миниатюры для изображений

Миниатюра — это очень маленькое описание или представление. Пользователь может захотеть сохранить только миниатюру большого изображения или сохранить как изображение, так и миниатюру. В этом разделе мы собираемся создать эскиз изображения под названием ThinkBig.png, загруженного в предыдущем разделе «Получение медиа-контента с веб-страницы».

Для этого скрипта Python нам нужно установить библиотеку Python с именем Pillow, вилку библиотеки изображений Python, имеющую полезные функции для работы с изображениями. Это может быть установлено с помощью следующей команды —

pip install pillow

Следующий скрипт Python создаст миниатюру изображения и сохранит его в текущем каталоге, добавив префикс Th_ в файл миниатюр.

import glob
from PIL import Image
for infile in glob.glob("ThinkBig.png"):
   img = Image.open(infile)
   img.thumbnail((128, 128), Image.ANTIALIAS)
   if infile[0:2] != "Th_":
      img.save("Th_" + infile, "png")

Приведенный выше код очень прост для понимания, и вы можете проверить наличие файла миниатюр в текущем каталоге.

Скриншот с сайта

В веб-очистке очень распространенная задача — сделать снимок экрана веб-сайта. Для реализации этого мы будем использовать селен и веб-драйвер. Следующий скрипт Python возьмет скриншот с веб-сайта и сохранит его в текущем каталоге.

From selenium import webdriver
path = r'C:\\Users\\gaurav\\Desktop\\Chromedriver'
browser = webdriver.Chrome(executable_path = path)
browser.get('https://tutorialspoint.com/')
screenshot = browser.save_screenshot('screenshot.png')
browser.quit

Вы можете наблюдать результат, как показано ниже —

DevTools listening on ws://127.0.0.1:1456/devtools/browser/488ed704-9f1b-44f0-
a571-892dc4c90eb7
<bound method WebDriver.quit of <selenium.webdriver.chrome.webdriver.WebDriver
(session="37e8e440e2f7807ef41ca7aa20ce7c97")>>

После запуска скрипта вы можете проверить текущий каталог на файл screenshot.png .

Скриншот

Генерация миниатюр для видео

Предположим, мы загрузили видео с веб-сайта и хотели создать для них миниатюры, чтобы можно было щелкнуть конкретное видео на основе его миниатюры. Для создания миниатюры для видео нам нужен простой инструмент под названием ffmpeg, который можно скачать с www.ffmpeg.org . После загрузки нам необходимо установить его в соответствии со спецификациями нашей ОС.

Следующий скрипт Python сгенерирует миниатюру видео и сохранит его в нашем локальном каталоге —

import subprocess
video_MP4_file = “C:\Users\gaurav\desktop\solar.mp4
thumbnail_image_file = 'thumbnail_solar_video.jpg'
subprocess.call(['ffmpeg', '-i', video_MP4_file, '-ss', '00:00:20.000', '-
   vframes', '1', thumbnail_image_file, "-y"]) 

После запуска вышеуказанного скрипта мы получим миниатюру с именем thumbnail_solar_video.jpg, сохраненную в нашем локальном каталоге.

Копирование видео MP4 в MP3

Предположим, вы загрузили видеофайл с веб-сайта, но для этого вам нужно только аудио из этого файла, тогда это можно сделать на Python с помощью библиотеки Python moviepy, которую можно установить с помощью следующей команды:

pip install moviepy

Теперь, после успешной установки moviepy с помощью следующего скрипта, мы можем конвертировать MP4 в MP3.

import moviepy.editor as mp
clip = mp.VideoFileClip(r"C:\Users\gaurav\Desktop\1234.mp4")
clip.audio.write_audiofile("movie_audio.mp3")

Вы можете наблюдать результат, как показано ниже —

[MoviePy] Writing audio in movie_audio.mp3
100%|¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 674/674 [00:01<00:00,
476.30it/s]
[MoviePy] Done.

Приведенный выше скрипт сохранит аудиофайл MP3 в локальном каталоге.