Як витягнути всі ключові кадри з відеокліпу?


8

Я намагаюся витягти ключові кадри з відеокліпу. Я спробував таку команду, але вона витягує всі кадри.

ffmpeg -vf select="eq(pict_type\,PICT_TYPE_I)" -i 2.flv -vsync 2 -s 73x41 -r 30 -f image2 thumbnails-%%02d.jpeg

Відповіді:


16

Ви можете зробити це простіше , використовуючи -skip_frameбез необхідності selectвідеофільтру:

ffmpeg -skip_frame nokey -i 2.flv -vsync 0 -r 30 -f image2 thumbnails-%02d.jpeg

2
Дивовижно, на 20-хвилинному відео потрібно менше 10 секунд порівняно з більш ніж 3 хвилинами із вибраним фільтром!
божевільний

Переконайтесь, що використовувати -threads 1, порівняно з типовим, -threads autoце робить cropdetectграфік фільтру ( ffmpeg -threads 1 -skip_frame nokey -i input.mkv -filter:v select='not(mod(n\,20))',cropdetect -an -f null /dev/null) 2х настільки ж швидким у моїй системі (від 60-х до 30-х)!
genpfault

12

Приклад використання selectта scaleфільтрів:

ffmpeg -i 2.flv -vf "select=eq(pict_type\,I),scale=73x41" \
-vsync vfr -qscale:v 2 thumbnails-%02d.jpeg

Кілька порад:

  • Фільтри не повинні надходити перед -iопцією, оскільки вони є вихідною опцією. Я не знаю, звідки саме ви отримали команду, але PICT_TYPE_Iне існує - так і має бути I.

  • У scaleфільтрі ви можете замінити 73або 41примусити фільтр автоматично обчислити ширину або висоту, щоб зберегти співвідношення сторін: наприклад, scale=73:-1або scale=-1:41. Це запобігає розтягуванню або розсіченню, що може бути результатом "примусового" масштабування.

  • Якість виводу можна контролювати за допомогою -qscale:v(або псевдоніму -q:v). Ефективний діапазон - це лінійна шкала від 2 до 31, а нижче значення - вища якість.

  • Щоб ваш ffmpegдозвіл на фільтр до введення вказував мені, що він може бути застарілим. Завантажте нещодавню статичну збірку для вашої операційної системи або побудуйте її самостійно відповідно до посібників з компіляції, якщо вищезгадане не працює.


1
Якщо ваша мета - витягнути ключові кадри без втрат, ви можете спробувати наступне:ffmpeg -i 2.flv -vf "select=eq(pict_type\,I)" -vsync vfr frame-%02d.png
Пельтьє,

0

якщо це помилки:

Варіант vf (встановити відеофільтри) не можна застосувати до вхідного url 1508.mp4 - ви намагаєтесь застосувати параметр введення до вихідного файлу або навпаки. Перемістіть цю опцію перед тим, до якого файла належить. Помилка аналізу параметрів вхідного файлу 1508.mp4. Помилка відкриття вхідних файлів: недійсний аргумент

ви можете це зробити:

ffmpeg -i 263.mp4 -vf select=eq(pict_type\,PICT_TYPE_I)  -vsync 2 -s 480x320 -r 24 -f image2 thumbnails-%05d.jpeg

== --------------------------------------------

Параметри "-i" заздалегідь

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