#python
#python
Вопрос:
Я осмотрелся и не могу найти конкретного ответа на свое решение, и на данный момент мой мозг перегружен. Я пытаюсь создать видео mp4 на основе некоторых bmp-файлов в папке. Однако я хочу, чтобы файлы были упорядочены по самой ранней дате изменения видео. Итак, я использую самую старую измененную дату. Я нашел здесь кое-что об использовании os.path.getmtime, однако, если я добавлю это, он сообщит мне, что не может найти файл. Я предполагаю, что это потому, что файлы расположены в сети, а не в моем локальном пути, где установлен python. Вот мой код. Я подтвердил, что все остальное работает, поэтому все, что мне нужно, это выяснить, как сортировать файлы.
import cv2
import numpy as np
import os
from os.path import isfile, join
#change this to the path where the pictures are located
pathIn= #MyPathWhichIsOnANetworkNotWherePythonIsInstalled
#input your video name amp; video type:
vid_name = "FirstCalPics.mp4"
#change this to the path where the video should be saved:
pathSave = #AlsoAPathWhichIsOnANetworkNotWherePythonIsInstalled
#set your fps here:
fps = 10
pathOut = pathSave vid_name
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
frame_array = []
files = [f for f in os.listdir(pathIn) if isfile(join(pathIn, f))]
#Sort files based on date modified:
files.sort(key=os.path.getmtime) #<--- HERE'S THE ISSUE
for i in range(len(files)):
filename=pathIn "\" files[i]
#reading each files
img = cv2.imread(filename)
height, width, layers = img.shape
size = (width,height)
#inserting the frames into an image array
frame_array.append(img)
out = cv2.VideoWriter(pathOut, fourcc, fps, size)
for i in range(len(frame_array)):
# writing to a image array
out.write(frame_array[i])
out.release()
Комментарии:
1.
files.sort(key=lambda f: os.path.getmtime(join(pathIn, f)))
Ответ №1:
Причина, по которой он говорит, что он не отображается как файл при попытке использовать just os.path.getmtime
, заключается в том, что вы проверяете just path
, когда у вас также есть каталог: pathIn
.
Вы можете использовать join
при сортировке:
files.sort(key=lambda f: os.path.getmtime(join(pathIn, f)))
Или (и синтаксис зависит от вашей версии Python) вы можете напрямую изначально сохранить полный путь к файлу:
files = [fullPath for path in os.listdir(pathIn) if isfile((fullPath := join(pathIn, f)))]
Это устраняет необходимость в filename=pathIn "\" files[i]
дальнейшем в вашем коде.
Комментарии:
1. @RufusVS не могли бы вы объяснить? Похоже, что OP
os.path.join
успешно использовался в предыдущих частях кода2. Упс, вы правы, я не заметил
from
версию инструкции import.3. Оператору walrus не потребовалось много времени, чтобы стать полезным.