Я пытаюсь разделить более крупное видео в соответствии с набором диапазонов кадров, которые я передаю в ffmpeg. Несколько вопросов относительно опции -f segment -segment_frames и того, что ожидает/производит. Вот что я запускаю:
ffmpeg -i full_movie.mov -f segment -segment_frames 123 -reset_timestamps 1 -c:a copy -map 0 "/Users/sjan/Desktop/%03d_test.mov"
ffmpeg -i full_movie.mov -f segment -segment_frames 124, 163 -reset_timestamps 1 -c:a copy -map 0 "/Users/sjan/Desktop/%03d_test.mov"
Будет ли первая команда ffmpeg изменяться от 0 до 123 или от 1 до 123?
Начинается ли ffmpeg с опцией -segment_frames с 0 при чтении фильма QT, учитывая, что этот фильм при открытии в QT начинается с 0? Стоит ли мне ожидать, что я передам ему свои диапазоны кадров, чтобы учесть это, вычитая 1, если он начинается с 0? Я вижу непоследовательные результаты в правильных диапазонах, и это, вероятно, из-за этого.
решение1
Да, segment_frames начинается с 0. Как правило, почти все счетчики индексов в ffmpeg начинаются с 0.
Итак, -segment_times 124,163
говорит ffmpeg создать сегмент для каждого кадра 0-123, 124-162 и 163-END. Однако, если эти начальные кадры не являются ключевыми, ffmpeg начнет сегмент с первого ключевого кадра, найденного после этих кадров.
Добавьте -break_non_keyframes 1
для принудительной сегментации на указанных кадрах. Однако начальные кадры могут не декодироваться правильно, пока не будет найден ключевой кадр, если сегмент воспроизводится автономно. Поскольку вы кодируете видео, вы можете принудительно применить ключевые кадры в точках сегмента, добавив-force_key_frames expr:eq(n\,124)+eq(n\,163)