
Я хочу сделать клип из видео с помощью FFmpeg с 2-секундным видео каждые m
минуты, где
m = video_length / 5
Например, у меня есть видео длительностью 10 минут. Видеоклип будет иметь общую длину 10 секунд (5 сегментов по 2 секунды) и будет состоять из следующих диапазонов временных меток видео:
00:00 - 00:02
02:00 - 02:02
04:00 - 04:02
06:00 - 06:02
08:00 - 08:02
Это создаст своего рода трейлер из видео.
Я знаю, что могу добиться этого с помощью сегментации, но не могу понять весь процесс.
решение1
Вы можете сделать это, используя фильтр выбора, за один раз.
ffmpeg -i in.mp4
-vf select='lt(mod(t,120),2)',setpts=N/FRAME_RATE/TB
-af aselect='lt(mod(t,120),2)',asetpts=N/SR/TB
out.mp4
решение2
Я знаю метод, который вымощьиспользование. Хотя это немного грязно.
Извлеките клипы с помощью следующей команды:
ffmpeg -i -ss <time to start> -t <duration> <output clip filename>
Что вы делаете, так это извлекаете клипы с помощью этого формата, где -ss
начало клипа, а -t
— длительность клипа. После того, как вы их извлекли, вы можете объединить их вместе с помощью:
ffmpeg -i concat:"clip_file1|clip_file2|clip_file3" -c copy <your output file>
Обратите внимание, что эта форма конкатенации не работает со всеми видеоформатами, и вам, возможно, придется добавить некоторые другие аргументы, например, -bsf:a aac_adtstoasc
для файлов MP4. Но это должно дать вам желаемое видео.