Почему время процесса увеличивается с увеличением положения обрезки? - PullRequest
0 голосов
/ 05 марта 2020

Недавно я обрезал некоторые видео, используя ffmpeg, и заметил, что с увеличением позиции обрезки время, затрачиваемое на обрезку видео, также увеличивается. Даже если продолжительность одинакова. (5 seconds)

enter image description here

Ниже дана команда обрезать видео с 0 до 5 секунд, и обработка занимает всего 1 секунду .

ffmpeg -y \
    -i input.mp4 \
    -filter_complex \
        "[0:v]trim=0:5,setpts=PTS-STARTPTS[v0]; 
     [0:a]atrim=0:5, asetpts=PTS-STARTPTS[a0] 
" -map "[v0]" -map "[a0]" output.mp4

Но когда я пытаюсь обрезать видео точно такой же командой, но с другим индексом, от 300 секунды до 305, это займет 5 seconds.

ffmpeg -y \
    -i input.mp4 \
    -filter_complex \
        "[0:v]trim=300:305,setpts=PTS-STARTPTS[v0]; 
     [0:a]atrim=300:305, asetpts=PTS-STARTPTS[a0] 
" -map "[v0]" -map "[a0]" output.mp4

Итак, вот мои вопросы

  1. Почему время процесса увеличивается с увеличением позиции?
  2. Есть ли способ исправить это?

1 Ответ

1 голос
/ 05 марта 2020

Вы обрезаете потоки, используя фильтры, поэтому все кадры от начала файла до точек обрезки все еще должны быть декодированы, чтобы их можно было обрезать.

Для файлов MP4 выполните поиск ввода, который будет тянуть кадры только из ближайшего ключевого кадра. Нет необходимости использовать фильтры, так как все обрезка и сброс метки времени происходят через входные переключатели.

ffmpeg -y -ss 300 -to 305 -i input.mp4 -map 0:v -map 0:a output.mp4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...