Обработка произвольного количества пар начала и конца времени для сокращения файла фильма - PullRequest
0 голосов
/ 08 июня 2019

Я пишу функцию, которая принимает список кортежей и строку пути к файлу в качестве аргументов и выводит урезанное видео, которое включает только кадры, попадающие в предоставленные пары начала / остановки.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...