#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