Я пытаюсь создать небольшой видеоредактор с использованием графического интерфейса Tkinter и Moviepy.
Время начала / окончания желаемого подклипа вводится пользователем. Ошибка возникает, когда пользователь не указывает время окончания (программа использует длительность исходного видео как время окончания для вспомогательного клипа.
source_video = VideoFileClip (sample_video_clip.mp4)
start_time = float(start_time_entry.get())
например: 6 секунд
Пользователь не указал время окончания, поэтому программа использует продолжительность исходного клипа с помощью функции длительности ролика.
end_time = source_video.duration
например. 56,11 секунды
Затем я пытаюсь отобразить кадры, относящиеся к этим временным точкам.
end_frame_image_array = source_video.get_frame(end_time)
end_frame_image_location = Image.fromarray(end_frame_image_array)
end_frame_image_resized = end_frame_image_location.resize((150,100))
end_frame_image = ImageTk.PhotoImage(end_frame_image_resized)
end_frame_label.config(image=end_frame_image)
Появляется следующая ошибка.
OSError: Ошибка MoviePy: не удалось прочитать первый кадр видеофайла C: / Users /.../ sample_video_clip.mp4. Это может означать, что файл поврежден. Это также может означать, что вы используете устаревшую версию FFMPEG. Например, в Ubuntu / Debian версия в репозиториях устарела. Пожалуйста, обновитесь до последней версии с веб-сайта.
Если пользователь вводит допустимое время окончания, не считая ручного ввода 56,11 секунды (длительность клипа), отображается кадр.
Начальный кадр также отображается с использованием аналогичного кода и отлично работает
Изменить 1.0: попытался использовать другие файлы .mp4, и ошибка не исчезла. Я не думаю, что это связано с повреждением файла, поскольку я могу открывать файлы в медиаплеере, а также импортировать их в Adobe Premier Pro 2015.
Редактировать 2.0: просмотрел кадр через 1 секунду от времени окончания, и изображение отображается (см. Изменение кода ниже). Ошибка продолжается, если -.1
не включен
end_frame_image_array = source_video.get_frame((end_time-.1))
Изменить 3.0: вручную введенные временные клипы, пока я не добрался до этой ошибки. Длительность исходного клипа (длина) = 56,11 секунды, ввод 56,038 секунд, поскольку время окончания генерирует клип по желанию, ввод 56,04 и выше вызывает ошибку, указанную выше
end_frame_image
, поэтому добавьтеend_frame_label.image = end_frame_image
- person TheLizzard   schedule 08.03.2021repr(end_time)
, чтобы увидеть, может ли быть различие типов по сравнению с тем, когда пользователь указывает время окончания? - person j_4321   schedule 08.03.2021.get_frame()
считает времена ›= 56,04 превышающими время окончания и не может вернуть соответствующий кадр. Это несовместимо со временем окончания, указаннымsource_video.duration
, поэтому вы должны сообщить об этом, если это еще не было сделано: github .com / Zulko / moviepy / issues - person j_4321   schedule 08.03.2021