
КР2
.pdf
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
Кафедра 41
ПРЕПОДАВАТЕЛЬ |
|
|
|
|
|
|
доц., к.т.н., доц. |
|
|
|
О. О. Жаринов |
|
|
|
|
|
|
|
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
Контрольная работа
Основы обработки видео средствами Python
по курсу: Мультимедиа технологии
СТУДЕНТКА ГР. № Z0411 |
11.04.25 |
|
М. В. Карелина |
||
|
|
|
|
|
|
|
номер группы |
|
подпись, дата |
|
инициалы, фамилия |
Номер студенческого билета: 2020/3477
Санкт-Петербург
2025
Цель работы. Получить навыки обработки видео, выполнив индивидуальное задание.
В современном мире видео-контент занимает центральное место в области мультимедиа и коммуникаций, играя ключевую роль в обучении,
развлечении, маркетинге и социальной интеракции. Обработка видео является неотъемлемой частью этого процесса, позволяя изменять свойства видеозаписей для достижения оптимального визуального эффекта и передачи информации. С феноменологической точки зрения, видео представляет собой динамическую последовательность изображений, которые сменяются с высокой частотой, обычно 25 или 30 кадров в секунду. Важно отметить, что в мультимедийных форматах, помимо видео, часто присутствует и аудиодата,
что делает процесс обработки еще более многогранным.
Задачи обработки видео во многом схожи с задачами обработки изображений. Кадры видео могут страдать от различных дефектов, таких как размытие или недостаточная контрастность. Более того, обработка видео нередко включает в себя добавление графических элементов, корректировку цветовых характеристик и создание визуальных спецэффектов. Одной из ключевых особенностей видеопроизводства является его восприятие во времени, что требует изменения параметров обработки от кадра к кадру для создания желаемого динамического эффекта.
Однако с ростом объемов цифрового видео возникает необходимость в эффективных методах хранения и сжатия данных. К счастью, современная технология предлагает разнообразные форматы кодирования, что позволяет решить задачи извлечения информации из видеоматериалов и формирования видеофайлов. В этом контексте Python представляет собой мощный инструмент для обработки видео.
Индивидуальное задание.
Необходимо выполнить обработку видео по варианту, а также произвести обработку аудиодорожки либо фильтром Фурье, ибо рекурсивным фильтром
2

Вариант 7. Применить к кадрам видео операцию соляризации изображения. Кроме обработки видеопоследовательности в каждом варианте нужно обработать и аудиодорожку при помощи фильтра с характеристиками, заданными на выполнения лабораторной работы №2.
Соляризация изображения — это эффект, который преобразует цвета и яркость в изображении таким образом, что часть пикселей инвертируется в зависимости от их яркости. В результате мы получаем эффект, который напоминает негативные фотографии.
Соляризацию может использоваться в видеопроектах для создания:
-Художественных эффектов: Чтобы сделать видео более выразительным (например, в музыкальных клипах).
-Креативного контента: Для художественной интерпретации определенных сцен или персонажей.
-Выделения деталей: Если в видео много темных сцен, соляризация поможет выявить детали, которые иначе были бы невидимы.
Для работы был использован видеофайл, полученный из видеоклипа «Lana Del Ray – Born to die». После скачивания виде было обрезано.
Выполнение индивидуального задания заключается в написании программы осуществляющей обработку видео с применением соляризации кадров, а также с применением фильтра Фурье для обработки аудиодорожки. Код программы приведен в Листинге 1.
Листинг 1. Программа для обработки видео
from moviepy.editor import VideoFileClip, AudioClip import numpy as np
import matplotlib.pyplot as plt import cv2 # Импортируем OpenCV
#Функция для перевода кадра в черно-белый def to_grayscale(frame):
return cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
#Функция для соляризации изображения
def solarize_frame(frame):
# Константа K
X_max = np.max(frame)
K = 4.0 / X_max
3

#Преобразование изображения в float32 для работы с яркостью frame = frame.astype(np.float32)
#Применение формулы соляризации к каждому пикселю
#Y = K * X * (Xmax - X)
Y = K * frame * (X_max - frame)
# Ограничиваем значения в диапазоне [0, 255]
Y = np.clip(Y, 0, 255)
return Y.astype(np.uint8)
# Функция для наложения цвета на соляризованные кадры def to_color(solarized_frame, original_frame):
#Создадим цветной кадр на основе оригинального color_frame = np.zeros_like(original_frame)
#Используем значения RGB из оригинального кадра для цветового восстановления
for i in range(3): # для каждого канала R, G, B color_frame[..., i] = (solarized_frame / 255.0) *
original_frame[..., i]
return color_frame.astype(np.uint8)
# Обработка аудиосигнала
def process_audio(audio, lower_frequency=1500, upper_frequency=2000):
#Преобразуем аудиосигнал в массив numpy input_signal = audio.to_soundarray(fps=44100) N = input_signal.shape[0]
Fd = 44100 # Частота дискретизации
#Вычисляем спектр входного сигнала
Spectr_input = np.fft.fft(input_signal, axis=0)
#Задаем граничные частоты полосы пропускания фильтра n_dn = round(N * lower_frequency / Fd)
n_up = round(N * upper_frequency / Fd)
#Создаем массив значений передаточной функции фильтра
W = np.zeros_like(Spectr_input) W[n_dn:n_up + 1] = 1.0 # Первая половина
W[N - n_up:N - n_dn + 1] = 1.0 # Зеркальная половина
# Применяем фильтр
Spectr_output = Spectr_input * W
# Выполняем обратное ДПФ для получения обработанного аудиосигнала output_signal = np.fft.ifft(Spectr_output, axis=0).real
return output_signal
class CustomAudioClip(AudioClip):
def __init__(self, audio_array, fps): self.audio_array = audio_array self.fps = fps
self.duration = len(audio_array) / fps
self.nchannels = audio_array.shape[1] if audio_array.ndim > 1 else 1
# Определяем количество каналов
def get_frame(self, t):
4

# Убедитесь, что t - это скаляр if np.isscalar(t):
#Возвращаем аудиофрейм для времени t frame_index = int(t * self.fps)
#Проверяем, что индекс остается в пределах размерности if frame_index >= len(self.audio_array):
return np.zeros(self.nchannels) # Возвращаем нулевой массив соответствующей размерности
return self.audio_array[frame_index] else:
# Если t массив, обрабатываем каждый элемент отдельно frames = [self.get_frame(time) for time in t]
return np.array(frames)
# Открытие видеофайла
clip = VideoFileClip('KR.mp4')
# Применяем эффект к каждому кадру видео def process_frame(frame):
#Сохраняем оригинальное изображение для последующей цветной обработки original_frame = frame.copy()
#Переводим в черно-белый
gray_frame = to_grayscale(frame)
# Применяем соляризацию
solarized_frame = solarize_frame(gray_frame)
# Возвращаем цвет
return to_color(solarized_frame, original_frame)
# Применяем все эффекты к видео solarized_video = clip.fl_image(process_frame)
#Обработка аудиосигнала audio = clip.audio
processed_audio = process_audio(audio)
#Создаем новый аудиотрек с использованием кастомного аудиоклипа
new_audio = CustomAudioClip(processed_audio.astype(np.float32), fps=44100)
#Объединяем соляризованное видео с обработанным звуком final_video = solarized_video.set_audio(new_audio)
#Сохраняем обработанное видео в формате mp4
final_video.write_videofile('KR.4.mp4', codec='mpeg4')
#Достаем из видео отдельные кадры, чтобы убедиться,
#что соляризация работает корректно.
duration = clip.duration
#Устанавливаем время для отображения кадров times = [5, 10, 28]
#Функция для отображения трех кадров
def show_frames(clip, times, title): plt.figure(figsize=(12, 4))
for i, t in enumerate(times):
frame = clip.get_frame(t) / 255 # Нормируем для корректного отображения
plt.subplot(1, 3, i + 1) plt.imshow(frame) plt.title(f"{title} at {t:.2f} sec") plt.axis('off')
5

plt.show()
#Отображение трех кадров исходного видео show_frames(clip, times, "Исходный кадр")
#Отображение трех кадров обработанного видео (соляризация) show_frames(solarized_video, times, "Соляризованный кадр")
Основные задачи, выполняемые кодом:
1. Импорт библиотек: Используются необходимые библиотеки для работы с видео (moviepy), математическими операциями (numpy),
визуализацией (matplotlib) и обработкой изображений (cv2).
2.Функция to_grayscale: Преобразует кадры видео из цветного формата
вчерно-белый (оттенки серого).
3.Функция solarize_frame: Применяет эффект соляризации к черно-
белым кадрам, изменяя их яркость по определенной формуле для достижения визуального эффекта.
4. Функция to_color: Восстанавливает цвет оригинальных кадров,
накладывая их цвет на соляризованные черно-белые кадры, используя значения RGB из оригинального изображения.
5. Функция process_audio: Обрабатывает аудиосигнал, применяя фильтрацию в указанных частотных диапазонах (1500–2000 Гц). Аудиосигнал преобразуется во временную область через быстрое преобразование Фурье
(БПФ) и фильтруется, затем выполняется обратное БПФ для получения обработанного аудиосигнала.
6.Класс CustomAudioClip: Создает кастомный аудиоклип, который позволяет извлекать звуковые фреймы по заданному времени.
7.Открытие видеофайла: Загружает видео из файла с именем 'KR.mp4'.
8.Функция process_frame: Обрабатывает каждый кадр видео,
преобразовывая его в черно-белый формат, применяя эффект соляризации, а
затем возвращая цвет.
9. Применение эффектов к видео: Использует метод fl_image для применения функции обработки к каждому кадру видео.
6

10.Обработка аудиосигнала: Аудиотрек видео обрабатывается с использованием функции process_audio.
11.Создание нового аудиотрека: Создается новый аудиотрек на основе обработанного аудиосигнала и класса CustomAudioClip.
12.Объединение видео с обработанным звуком: Соединяет полученное соляризованное видео с новым аудиотреком.
После выполнения кода был получен видеофайл KR.3 в котором была применена соляризация кадров, также была изменена аудио дорожка. Звук получился более винтажный, как из старых записей музыки. Результат выполнения программного кода на рисунках 1-2.
Ссылка на видеофайлы: https://drive.google.com/drive/folders/1- T1Y_1foDcRzw5ROi7un1AuykKyI-kU1?usp=drive_link
Рисунок 1 – Исходные кадры видео
Рисунок 2 – Обработанные кадры видео
7
Вывод
В процессе обработки видео и аудио с помощью кода на Python удалось добиться ярких и заметных изменений.
С визуальной стороны, был применен эффект соляризации к видео,
который изменил его цветовую гамму, придавая кадрам негативный вид. Это значит, что светлые области стали темными, а темные наоборот – светлыми.
Такой эффект создал необычные и креативные изображения, которые выглядят как старинные фотографии. Видео приобрело некий художественный смысл.
Что касается звука, он тоже изменился. После обработки он стал звучать как будто был записан много лет назад, что придает ему винтажный вайб. Хотя звук и потерял некоторую четкость, текст песни остался вполне узнаваемым.
Слушатель может легко понять слова и прочувствовать эмоции, которые передаются в композиции, несмотря на старомодное звучание.
Таким образом, работа по обработке видео и аудио привела к созданию интересного и выразительного произведения. Эффект соляризации и обработанный звук сделали проект более увлекательным и придавали ему особую атмосферу. Мне выполнение данной работы показалось очень увлекательным.
8
Список используемых источников
1.Работа с видеофайлами с помощью Python //URL:https://codeby.net/thr eads/rabota-svideofajlamispomoschjupython.80169/?ysclid=m187x3i4j363198489
2.MoviePy Documentation // URL:http://zulko.github.io/moviepy/
3.FFmpeg Documentation // URL:https://ffmpeg.org/documentation.html
4.Real Python - working with Video Files in Python // URL: https://realpython.com/python-video-processing/
9