Moviepy: отображение финального файла клипа в ошибке окна tkinter

Я пытаюсь создать небольшой видеоредактор с использованием графического интерфейса 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 и выше вызывает ошибку, указанную выше


person Seán Cahill    schedule 08.03.2021    source источник
comment
Я не думаю, что это связано с вашей проблемой, но вы должны сохранить ссылку на end_frame_image, поэтому добавьте end_frame_label.image = end_frame_image   -  person TheLizzard    schedule 08.03.2021
comment
@TheLizzard Спасибо, добавил это. Не могли бы вы объяснить почему? Относительно новичок в этом (первый вопрос на SO и т. Д.) Проблема не устранена.   -  person Seán Cahill    schedule 08.03.2021
comment
Это не должно было решить проблему. Предполагалось, что нужно избежать этой проблемы.   -  person TheLizzard    schedule 08.03.2021
comment
Вы пытались напечатать repr(end_time), чтобы увидеть, может ли быть различие типов по сравнению с тем, когда пользователь указывает время окончания?   -  person j_4321    schedule 08.03.2021
comment
@ j_4321 После дальнейшего тестирования ввести 56.11 вручную не получается. Я отредактировал исходный пост. Раньше я вводил 56 без .11   -  person Seán Cahill    schedule 08.03.2021
comment
@ j_4321 При печати я получаю тот же 56.11, если он выполняется пользователем end_time = float (end_time_entry.get () или генерируется end_time = source_video.duration   -  person Seán Cahill    schedule 08.03.2021
comment
Учитывая редактирование, проблема, похоже, в том, что.get_frame() считает времена ›= 56,04 превышающими время окончания и не может вернуть соответствующий кадр. Это несовместимо со временем окончания, указанным source_video.duration, поэтому вы должны сообщить об этом, если это еще не было сделано: github .com / Zulko / moviepy / issues   -  person j_4321    schedule 08.03.2021
comment
@ j_4321 Спасибо! Сделаю это. Никаких признаков этой проблемы нет, поэтому зарегистрируйте ее сейчас.   -  person Seán Cahill    schedule 08.03.2021