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

xatchikzzz

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

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

vivexce

Новичок
Регистрация
21.04.2023
Сообщения
7
Благодарностей
0
Баллы
1
Народ может кто сталкивался как сделать так .. что есть видео к примеру 40 минут ... надо каждую 5 секунду удалить

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

budora

Client
Регистрация
13.08.2012
Сообщения
831
Благодарностей
554
Баллы
93
Народ может кто сталкивался как сделать так .. что есть видео к примеру 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

vivexce

Новичок
Регистрация
21.04.2023
Сообщения
7
Благодарностей
0
Баллы
1
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 секунд. Реальнои?
 

budora

Client
Регистрация
13.08.2012
Сообщения
831
Благодарностей
554
Баллы
93
А почему он ускоряет видео после скрипта вашего?) Хочется чтобы для начала каждые допусти 5 секунд вырезало 1-2 секунды типа.

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

vivexce

Новичок
Регистрация
21.04.2023
Сообщения
7
Благодарностей
0
Баллы
1
Для того чтобы сохранить скорость проигрывания, необходимо корректно настроить количества кадров в секунду в setpts
Т.е мне надо как-то узнать сколько кадров в секунду в видео и в параметр "setpts=N/FRAME_RATE/TB" каким то образом дописать это число?)
 

budora

Client
Регистрация
13.08.2012
Сообщения
831
Благодарностей
554
Баллы
93
Т.е мне надо как-то узнать сколько кадров в секунду в видео и в параметр "setpts=N/FRAME_RATE/TB" каким то образом дописать это число?)
Нужно установит правильный временной штамп для каждого кадра. Да
 

vivexce

Новичок
Регистрация
21.04.2023
Сообщения
7
Благодарностей
0
Баллы
1

budora

Client
Регистрация
13.08.2012
Сообщения
831
Благодарностей
554
Баллы
93
Вам нужно учитывать измененное количество кадров в секунду в результирующем видео. Если вы удалили каждый пятый кадр, то количество кадров в секунду должно быть установлено в 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

budora

Client
Регистрация
13.08.2012
Сообщения
831
Благодарностей
554
Баллы
93
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 выполняют аналогичную операцию для аудиофреймов
 

vivexce

Новичок
Регистрация
21.04.2023
Сообщения
7
Благодарностей
0
Баллы
1
Вам нужно учитывать измененное количество кадров в секунду в результирующем видео. Если вы удалили каждый пятый кадр, то количество кадров в секунду должно быть установлено в 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
 

Вложения

budora

Client
Регистрация
13.08.2012
Сообщения
831
Благодарностей
554
Баллы
93
Вы выкинули каждый 5 кадр. Видео стало короче, вы его уменьшили. При установке setpts в окне cmd ffmpeg speed скотость обратите внимание.
 
  • Спасибо
Реакции: vivexce

vivexce

Новичок
Регистрация
21.04.2023
Сообщения
7
Благодарностей
0
Баллы
1
Вы выкинули каждый 5 кадр. Видео стало короче, вы его уменьшили. При установке setpts в окне cmd ffmpeg speed скотость обратите внимание.
Прошу прощения за глупые вопросы, я новичек и не пойму что надо сделать чтобы работала команда))))) cmd ffmpeg speed мне нужно ввести и указать путь к ролику чтобы это узнать?
 

budora

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

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