Как я могу использовать Python для ускорения видео без удаления кадров

#python #video-processing #moviepy

#python #обработка видео #moviepy

Вопрос:

У меня есть видео продолжительностью 1: 24 минуты и частотой кадров в секунду 10 без какого-либо звука. Мне нужно, чтобы видео сократилось до 28 секунд и добавило к нему звук, не отбрасывая кадры, и, очевидно, увеличило частоту кадров в секунду. Я пытался использовать MoviePy to для достижения этой цели.

 clip = VideoFileClip(in_loc)
final = clip.fx(vfx.speedx, 3)
final.write_videofile(out_loc, audio=audio_loc)
  

Но когда я проверил детали файла, файл все еще был 10 кадров в секунду. Итак, этот метод отбрасывал кадры.
Затем я попробовал следующий код.

 clip.write_videofile(out_loc, fps=30, audio=audio_loc)
  

Результирующий файл по-прежнему длился 1: 24 минуты, хотя атрибут fps увеличился до 30.
Как я могу этого добиться?

Примечание: Все _loc переменные являются строками, которые содержат местоположение соответствующего файла.
Я не против установки других библиотек.

Ответ №1:

Я думаю, что нашел решение, используя set_fps атрибут Clip класса. Действительно, set_fps функция возвращает копию клипа с измененным количеством кадров в секунду. При применении преобразования к этой копии вы получаете правильное количество кадров в секунду.

Поскольку вы не предоставили воспроизводимый пример, я использовал стандартное видео (переименованное dummy_in.mp4 ) продолжительностью 15 секунд и 24 кадра в секунду без звука. В итоге я получаю 5-секундный клип и 72 кадра в секунду, используя этот код :

 from moviepy.editor import VideoFileClip
import moviepy.video.fx.all as vfx

in_loc = 'dummy_in.mp4'
out_loc = 'dummy_out.mp4'

# Import video clip
clip = VideoFileClip(in_loc)
print("fps: {}".format(clip.fps))

# Modify the FPS
clip = clip.set_fps(clip.fps * 3)

# Apply speed up
final = clip.fx(vfx.speedx, 3)
print("fps: {}".format(final.fps))

# Save video clip
final.write_videofile(out_loc)
  

Он выдает этот вывод :

 fps: 23.976023976023978
fps: 71.92807192807193
Moviepy - Building video dummy_out.mp4.
Moviepy - Writing video dummy_out.mp4

Moviepy - Done !
Moviepy - video ready dummy_out.mp4