Удалить каждую 5 секунду в видео через ffmpeg

  • Автор темы Автор темы xatchikzzz
  • Дата начала Дата начала

xatchikzzz

Client
Регистрация
08.09.2010
Сообщения
588
Реакции
41
Баллы
28
Народ может кто сталкивался как сделать так .. что есть видео к примеру 40 минут ... надо каждую 5 секунду удалить

тоесть 00:05 00:10 00:15 00:20 и так до конца видео .. .может кто то знает как это реализовать можно?
 
  • Спасибо
Реакции: vivexce
Народ может кто сталкивался как сделать так .. что есть видео к примеру 40 минут ... надо каждую 5 секунду удалить

тоесть 00:05 00:10 00:15 00:20 и так до конца видео .. .может кто то знает как это реализовать можно?

Напиши лс или тг)
 
Народ может кто сталкивался как сделать так .. что есть видео к примеру 40 минут ... надо каждую 5 секунду удалить

тоесть 00:05 00:10 00:15 00:20 и так до конца видео .. .может кто то знает как это реализовать можно?
C#:
Развернуть Свернуть Копировать
ffmpeg -i input.mp4 -vf "select='not(mod(n,5))',setpts=N/FRAME_RATE/TB" -af "aselect='not(mod(n,5))',asetpts=N/SR/TB" output.mp4
  • select='not(mod(n,5))' - фильтр для выбора каждого пятого кадра
  • setpts=N/FRAME_RATE/TB - фильтр для установки правильного временного штампа для каждого оставленного кадра
  • aselect='not(mod(n,5))' - фильтр для выбора каждого пятого аудиофрейма
  • asetpts=N/SR/TB - фильтр для установки правильного временного штампа для каждого оставленного аудиофрейма
 
  • Спасибо
Реакции: vivexce
C#:
Развернуть Свернуть Копировать
ffmpeg -i input.mp4 -vf "select='not(mod(n,5))',setpts=N/FRAME_RATE/TB" -af "aselect='not(mod(n,5))',asetpts=N/SR/TB" output.mp4
  • select='not(mod(n,5))' - фильтр для выбора каждого пятого кадра
  • setpts=N/FRAME_RATE/TB - фильтр для установки правильного временного штампа для каждого оставленного кадра
  • aselect='not(mod(n,5))' - фильтр для выбора каждого пятого аудиофрейма
  • asetpts=N/SR/TB - фильтр для установки правильного временного штампа для каждого оставленного аудиофрейма

А почему он ускоряет видео после скрипта вашего?) Хочется чтобы для начала каждые допусти 5 секунд вырезало 1-2 секунды типа.

Если возможно чтобы рандом можно было поставить типа каждые 10-20 секунд вырезает 1-5 секунд. Реальнои?
 
А почему он ускоряет видео после скрипта вашего?) Хочется чтобы для начала каждые допусти 5 секунд вырезало 1-2 секунды типа.

Если возможно чтобы рандом можно было поставить типа каждые 10-20 секунд вырезает 1-5 секунд. Реальнои?
Для того чтобы сохранить скорость проигрывания, необходимо корректно настроить количества кадров в секунду в setpts
Ставьте значение рандом тогда.
 
  • Спасибо
Реакции: vivexce
Для того чтобы сохранить скорость проигрывания, необходимо корректно настроить количества кадров в секунду в setpts

Т.е мне надо как-то узнать сколько кадров в секунду в видео и в параметр "setpts=N/FRAME_RATE/TB" каким то образом дописать это число?)
 
Т.е мне надо как-то узнать сколько кадров в секунду в видео и в параметр "setpts=N/FRAME_RATE/TB" каким то образом дописать это число?)
Нужно установит правильный временной штамп для каждого кадра. Да
 
Вам нужно учитывать измененное количество кадров в секунду в результирующем видео. Если вы удалили каждый пятый кадр, то количество кадров в секунду должно быть установлено в 1/5 от исходного значения.
Установить правильный временной штамп для каждого кадра в соответствии с измененной скоростью проигрывания по формуле.
setpts=PTS*(OLD_FPS/NEW_FPS)
ffmpeg -i input.mp4 -vf "select='not(mod(n,5))',setpts=PTS*(30/24)" -af "aselect='not(mod(n,5))',asetpts=N/SR/TB" output.mp4
setpts=N/24/TB означает, что каждый кадр будет иметь временной штамп, вычисленный на основе количества кадров в секунду 24
Всё есть в документации.
 
  • Спасибо
Реакции: vivexce
ffmpeg -i input.mp4 -vf "select='not(mod(n,5))',setpts=N/24/TB" -af "aselect='not(mod(n,5))',asetpts=N/SR/TB" output.mp4
setpts устанавливает правильный временной штамп для каждого кадра, а aselect и asetpts выполняют аналогичную операцию для аудиофреймов
 
Вам нужно учитывать измененное количество кадров в секунду в результирующем видео. Если вы удалили каждый пятый кадр, то количество кадров в секунду должно быть установлено в 1/5 от исходного значения.
Установить правильный временной штамп для каждого кадра в соответствии с измененной скоростью проигрывания по формуле.
setpts=PTS*(OLD_FPS/NEW_FPS)
ffmpeg -i input.mp4 -vf "select='not(mod(n,5))',setpts=PTS*(30/24)" -af "aselect='not(mod(n,5))',asetpts=N/SR/TB" output.mp4
setpts=N/24/TB означает, что каждый кадр будет иметь временной штамп, вычисленный на основе количества кадров в секунду 24
Всё есть в документации.

Ну вот я увидел что видео 24 кадра в секунду у меня, через GSpot. Т.е вышло 1/5 от исходного значения. 4,8 ! Вышла фигня какая-то)) что не так?(

ffmpeg -i input.mp4 -vf "select='not(mod(n,5))',setpts=PTS*(24/4,8 )" -af "aselect='not(mod(n,5))',asetpts=N/SR/TB" output.mp4
 

Вложения

  • 2023-4-21 23-33-38.png
    2023-4-21 23-33-38.png
    114,3 KB · Просмотры: 143
Вы выкинули каждый 5 кадр. Видео стало короче, вы его уменьшили. При установке setpts в окне cmd ffmpeg speed скотость обратите внимание.
 
  • Спасибо
Реакции: vivexce
Вы выкинули каждый 5 кадр. Видео стало короче, вы его уменьшили. При установке setpts в окне cmd ffmpeg speed скотость обратите внимание.

Прошу прощения за глупые вопросы, я новичек и не пойму что надо сделать чтобы работала команда))))) cmd ffmpeg speed мне нужно ввести и указать путь к ролику чтобы это узнать?
 
Прошу прощения за глупые вопросы, я новичек и не пойму что надо сделать чтобы работала команда))))) cmd ffmpeg speed мне нужно ввести и указать путь к ролику чтобы это узнать?
У вас всё работает как надо. Удалили кадры и видео стало короче и быстрее.
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)