FFMPEG не "режет", как ожидалось


Я использую FFMPEG (из приложения java) через простую систему.процесс и попытка разрезать видео на куски. Я пытаюсь разрезать его на 10 секунд с шагом. Мои команды FFMPEG выглядят следующим образом:

ffmpeg -i SampleVideo.mp4 -ss 00:00:00.00 -t 00:00:10.00 -strict -2 1438458522836/1438458522836_0.mp4
ffmpeg -i SampleVideo.mp4 -ss 00:00:10.01 -t 00:00:20.00 -strict -2 1438458522836/1438458536306_1.mp4
ffmpeg -i SampleVideo.mp4 -ss 00:00:20.01 -t 00:00:30.00 -strict -2 1438458522836/1438458546042_2.mp4
ffmpeg -i SampleVideo.mp4 -ss 00:00:30.01 -t 00:00:40.00 -strict -2 1438458522836/1438458561165_3.mp4
ffmpeg -i SampleVideo.mp4 -ss 00:00:40.01 -t 00:00:50.00 -strict -2 1438458522836/1438458577187_4.mp4
ffmpeg -i SampleVideo.mp4 -ss 00:00:50.01 -t 00:01:00.00 -strict -2 1438458522836/1438458587935_5.mp4

Мне они кажутся правильными, но мои видео не выходят с шагом в 10 секунд. Они, кажется, "раскалываются" в случайных местах. Есть идеи по поводу того, что я делаю неправильно?

Для справки:

video 0 == 10 seconds
video 1 == 20 seconds
Video 2 == 30 seconds
Video 3 == 32 seconds
Video 4 == 22 seconds
Video 5 == 12 seconds

Любая помощь будет признательна.

1 2

1 ответ:

Как указано в документации FFMPEG:

- позиция ss (вход / выход) При использовании в качестве опции ввода (перед -i), ищет в этом файле ввода позицию. обратите внимание, что в большинстве форматов невозможно точно искать, поэтому ffmpeg будет искать ближайшую точку поиска перед позицией. когда транскодирование и-accurate_seek включены (по умолчанию), этот дополнительный сегмент между точкой поиска и позицией будет декодирован и отброшен. При выполнении потоковой копии или если используется параметр-noaccurate_seek, он будет сохранен.

При использовании в качестве опции вывода (перед именем файла вывода) декодирует, но отбрасывает ввод до тех пор, пока метки времени не достигнут позиции.

Положение может быть либо в секундах, либо в форме hh:mm:ss[.xxx].

Таким образом, вы не получите точную начальную точку, но так как -t перестает "слушать", когда указатель попадает в указанное время, вы не получаете однородные времена, но все они заканчиваются, когда вы хотите.