🎬 Как обрезать видео в Python: простой и эффективный способ
Для обрезки видео в Python используйте библиотеку moviepy.
from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
def обрезать_видео(входной_файл, начало, конец, выходной_файл):
ffmpeg_extract_subclip(входной_файл, начало, конец, targetname=выходной_файл)
обрезать_видео('видео.mp4', 10, 30, 'вырезанное_видео.mp4')
В функции обрезать_видео, укажите путь к входному видео, время начала и время конца обрезки в секундах, и путь для сохранения обрезанного видео.
Детальный ответ
Как обрезать видео в Python
Обрезка видео - это процесс удаления части видеофайла, чтобы получить только нужный фрагмент. В Python существует несколько способов выполнить это задание. Давайте рассмотрим некоторые из них.
1. Использование библиотеки MoviePy
Библиотека MoviePy предоставляет простой способ обрезать видео. Вот пример кода, демонстрирующий этот процесс:
from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
# Устанавливаем временные метки начала и конца обрезанного фрагмента
start_time = 10 # в секундах
end_time = 20 # в секундах
# Обрезаем видео
ffmpeg_extract_subclip("input.mp4", start_time, end_time, targetname="output.mp4")
В приведенном выше примере мы используем функцию `ffmpeg_extract_subclip()` из библиотеки MoviePy для обрезки видеофайла `"input.mp4"`. Мы устанавливаем временные метки начала и конца обрезанного фрагмента и сохраняем обрезанное видео в файл `"output.mp4"`.
2. Использование библиотеки OpenCV
Библиотека OpenCV также предоставляет средства для обрезки видео. Вот пример кода, демонстрирующий использование OpenCV:
import cv2
# Устанавливаем временные метки начала и конца обрезанного фрагмента
start_time = 10 # в миллисекундах
end_time = 20000 # в миллисекундах
# Загружаем видео
video = cv2.VideoCapture("input.mp4")
# Определяем FPS и количество кадров видео
fps = video.get(cv2.CAP_PROP_FPS)
frame_count = video.get(cv2.CAP_PROP_FRAME_COUNT)
# Вычисляем начальный и конечный кадры для обрезанного фрагмента
start_frame = int(start_time * fps)
end_frame = int(end_time * fps)
# Обрезаем видео
output_frames = []
for frame_index in range(start_frame, end_frame):
video.set(cv2.CAP_PROP_POS_FRAMES, frame_index)
_, frame = video.read()
output_frames.append(frame)
# Создаем обрезанное видео
output_video = cv2.VideoWriter("output.mp4",
cv2.VideoWriter_fourcc(*"mp4v"),
fps,
(frame.shape[1], frame.shape[0]))
for frame in output_frames:
output_video.write(frame)
# Освобождаем ресурсы
video.release()
output_video.release()
В приведенном выше примере мы загружаем видео с помощью функции `cv2.VideoCapture()`, устанавливаем временные метки начала и конца обрезанного фрагмента и проходим по кадрам видео в этом диапазоне. Затем мы записываем каждый обрезанный кадр в список `output_frames` и создаем новый видеофайл `"output.mp4"` с помощью функции `cv2.VideoWriter()`.
3. Использование библиотеки PyAV
Библиотека PyAV - это еще один инструмент, который можно использовать для обрезки видео в Python. Вот пример кода с использованием PyAV:
import av
# Устанавливаем временные метки начала и конца обрезанного фрагмента
start_time = 10 # в секундах
end_time = 20 # в секундах
# Открываем видеофайл
container = av.open("input.mp4")
# Находим видеопоток
video_stream = container.streams.video[0]
# Устанавливаем временные метки начала и конца обрезанного фрагмента
start_pts = int(start_time * video_stream.time_base)
end_pts = int(end_time * video_stream.time_base)
# Создаем новый контейнер для обрезанного видео
output_container = av.open("output.mp4", "w")
# Добавляем видеопоток в новый контейнер
output_stream = output_container.add_stream("h264", video_stream.rate)
# Копируем кадры из исходного видео в обрезанное
for frame in container.decode(video=0):
if frame.pts >= start_pts:
if frame.pts >= end_pts:
break
output_container.mux(output_stream.encode(frame))
# Закрываем контейнеры
container.close()
output_container.close()
В приведенном выше примере мы открываем видеофайл с помощью `av.open()`, находим видеопоток и устанавливаем временные метки начала и конца обрезанного фрагмента. Затем мы создаем новый контейнер для обрезанного видео с помощью `av.open()`, добавляем видеопоток в новый контейнер и копируем кадры из исходного видеофайла в обрезанное.
Это были некоторые из способов обрезки видео в Python. Каждая из этих библиотек имеет свои особенности и возможности, поэтому вам стоит выбрать тот подход, который наиболее подходит к вашим потребностям и предпочтениям.