Як захопити перші X кадрів кожні X секунд у PNG за допомогою FFmpeg?


0

Я новачок у використанні командного рядка. Це досить прохолодно і цікаво, але я застряг.

У мене є відео, де, наприклад, я хочу захопити перші 8 кадрів кожні 5 секунд у зображення.

Я написав цю команду:

ffmpeg -i video.mp4 -vf fps=8/20 out%04d.png

Я бачу, що він фіксує 8 кадрів кожні 20 секунд, а не перші 8 кадрів. Чи можу я вказати це в команді?


Я намагався отримати пряме відео посилання з папки Dropbox замість завантаження. Я використовував неправильне посилання, але я зрозумів це!
AFG

Відповіді:


1

Ви можете використовувати select фільтр для вибору кадрів, які відповідають виразу. Якщо вираз обчислюється як ненульове число або true, він буде вибирати ці кадри. Наприклад, якщо ваш фільтр -vf select="between(n\, 0\, 7)", буде вибрано перші вісім кадрів. Номер кадру є nі починається з нуля.

Об'єднуючи це з mod (modulo) оператор, можна вибрати перші вісім кадрів кожної групи, скажімо, 24 кадри, так що кожну секунду для відео 24 кадрів в секунду:

ffmpeg -i input.mp4 -vf "select=between(mod(n\, 24)\, 0\, 7), setpts=N/24/TB" output.mp4

The setpts фільтр необхідний для налаштування тимчасових міток кадрів, щоб у вашому відео не було пропусків.

Щоб отримати перші вісім кадрів кожні п'ять секунд, помножте 24 на 5:

ffmpeg -i input.mp4 -vf "select=between(mod(n\, 120)\, 0\, 7), setpts=N/24/TB" output.mp4

Щоб вивести все в PNG, змініть вихідний сигнал з output.mp4 до output-%04d.png - ви отримаєте послідовно пронумеровані PNG-файли.


1

Це узагальнена версія вибраного фільтра для вибору 8 кадрів кожні 5 секунд.

ffmpeg -i in.mp4 -vf "select='if(not(floor(mod(t,5)))*lt(ld(1),1),st(1,1)+st(2,n)+st(3,t));if(eq(ld(1),1)*lt(n,ld(2)+8),1,if(trunc(t-ld(3)),st(1,0)))'" -vsync 0 out%d.png 

Це буде працювати для відео з будь-якою частотою кадрів, постійною або змінною.

Змінити 5 в mod(t,5) для інтервалу, в секундах. І то 8 в ld(2)+8 для кількості кадрів для вибору.


Досить складний вираз. Довелося перевести це на псевдокод, щоб з'ясувати, що відбувається.
slhck
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.