Я пишу функцию, которая принимает список кортежей и строку пути к файлу в качестве аргументов и выводит урезанное видео, которое включает только кадры, попадающие в предоставленные пары начала / остановки.
I 'Я застреваю, потому что я не уверен, что метод .trim () объекта 'infile' изменяет существующий объект или создает новый или делает что-то еще полностью.
список пусков / остановокпары кадров могут быть произвольно длинными, каждый найденный мной пример касается определенного числа пар начала и конца, и я не могу найти ничего, описывающего, какую структуру данных необходимо передать обратно в ffmpeg.concat ().
Мой код отображается ниже:
import ffmpeg
frameStamps = [(50,75),(120,700),(1250,1500)]
videoFilePath = 'C:/Users/Kieran/Videos/testMovie.mp4'
outputFolder = 'C:/Users/Kieran/Videos/'
def slice_video(frameStamps, videoFilePath, outputFolder):
originalFile = ffmpeg.input(videoFilePath)
for stamp in frameStamps:
ffmpeg.concat(originalFile.trim(start_frame=stamp[0], end_frame=stamp[1]))
ffmpeg.output(outputFolder + 'testoutput.mp4')
ffmpeg.run()
slice_video(frameStamps, videoFilePath, outputFolder)
Теперь я могу получить следующее, когда я по отдельности распечатываю originalFile.trim (), который распознается в консоли как объекты "FilterableStream"
trim(end_frame=75, start_frame=50)[None] <29b4fb0736ec>
trim(end_frame=700, start_frame=120)[None] <c66c4e1a48f5>
trim(end_frame=1500, start_frame=1250)[None] <13e0697a5288>
и я попытался передать их обратно в виде списка, словаря и кортежа и не смог заставить его работатьng
Ошибки вывода:
File "C:/Users/Kieran/Example.py", line 21, in slice_video
ffmpeg.output(outputFolder + 'testoutput.mp4')
File "C:\ProgramData\Anaconda3\lib\site-packages\ffmpeg\_ffmpeg.py", line 94, in output
return OutputNode(streams, output.__name__, kwargs=kwargs).stream()
File "C:\ProgramData\Anaconda3\lib\site-packages\ffmpeg\nodes.py", line 282, in __init__
kwargs=kwargs
File "C:\ProgramData\Anaconda3\lib\site-packages\ffmpeg\nodes.py", line 170, in __init__
self.__check_input_len(stream_map, min_inputs, max_inputs)
File "C:\ProgramData\Anaconda3\lib\site-packages\ffmpeg\nodes.py", line 149, in __check_input_len
raise ValueError('Expected at least {} input stream(s); got {}'.format(min_inputs, len(stream_map)))
ValueError: Expected at least 1 input stream(s); got 0