Як можна конвертувати відеофайл у послідовність зображень, наприклад, один кадр кожні N секунд. Чи може це зробити mplayer або ffmpeg? Я використовував MPlayer, щоб збирати скріншоти вручну, але я хотів би автоматизувати це для тривалого відео.
Як можна конвертувати відеофайл у послідовність зображень, наприклад, один кадр кожні N секунд. Чи може це зробити mplayer або ffmpeg? Я використовував MPlayer, щоб збирати скріншоти вручну, але я хотів би автоматизувати це для тривалого відео.
Відповіді:
З ffmpeg це дуже просто, і він може виводити один кадр кожні N секунд без зайвих сценаріїв. Щоб експортувати як послідовність зображень, просто використовуйте myimage_%04d.png
або подібну як вихідну. %0xd
Біт перетворюється в нулях цілих x
чисел довгого - приклад я дав отримує вихідний сигнал , як
myimage_0000.png
, myimage_0001.png
,myimage_0002.png
тощо.
Ви можете використовувати безліч форматів нерухомих зображень, png, jpeg, tga і будь-що (див. ffmpeg -formats
Повний список).
Ок, тепер ми знаємо, як експортувати фільм як послідовність зображень, але скажемо, що ми не хочемо експортувати кожен кадр?
Трюк полягає в тому, щоб просто змінити частоту кадрів виводу на те, що ми хочемо, використовуючи -r n
параметр, де n
кількість кадрів в секунду. 1 кадр в секунду був би -r 1
, один кадр кожні чотири секунди -r 0.25
, один кадр кожні десять секунд був би -r 0.1
і так далі.
Таким чином , щоб поставити все це разом, це те , як це буде виглядати , щоб зберегти один кадр input.mov
кожні чотири секунди output_0000.png
, і output_0001.png
т.д.:
ffmpeg -i input.mov -r 0.25 output_%04d.png
Зверніть увагу , що -r 0.25
опція йде після на -i input.mov
частини, тому що це контролювати частоту кадрів виведення . Якщо ви поставите його перед введенням, він би ставився до вхідного файлу так, як ніби він має вказану частоту кадрів.
Змініть% xd на скільки потрібних вам цифр, наприклад, якщо команда створить більше 10 000 кадрів, змінити %04d
на %05d
. Це також працює для вхідних файлів, що є послідовністю зображень. Детальніше читайте тут .
Користувачі Windows : у використанні командного рядка%
приклад: ffmpeg -i inputFile.mp4 -r 1 outputFile_%02d.png
У сценаріях CMD та BAT використовується %%
приклад: ffmpeg -i inputFile.mp4 -r 1 outputFile %%02d.png
Отже, подвійні %%
в сценаріях, і одиничні %
в інтерактивному командному рядку. Помилка в будь-якій ситуації призведе до помилки.
-r
якщо хочу експортувати кожен кадр? Якщо я знаю FPS відео, я вважаю, що я ввожу це, але що робити, якщо я цього не роблю?
jpegs
для цього, якщо ви не впевнені png
, що ви хочете. У моєму випадку jpeg
s було приблизно 50 кбіт, а png
s - приблизно 2 Мб.
-q:v 1
тут дуже корисний варіант, як у superuser.com/questions/318845/…
mplayer -vo jpeg -sstep 5 file.avi
збереже кадр у вигляді файлу jpeg кожні 5 секунд.
Однак він не зупиниться в кінці файлу, він продовжить виробляти копії останнього кадру. Щоб уникнути цього, знайдіть тривалість відео в секундах, використовуючи інший програвач або за допомогою mplayer:
mplayer -vo null -ao null -frames 0 -identify file.avi
і шукайте такий рядок, як "ID_LENGTH = 147,00".
Віднімаємо 2 від довжини і використовуємо це значення для -endpos
параметра. Наприклад, для відеозапису 147 секунд:
mplayer -vo jpeg -sstep 5 -endpos 145 file.avi
З ffmpeg
, ви можете зробити наступне:
ffmpeg -ss 4 -i input.avi -s 320x240 -frames:v 1 output.jpg
Ця команда створює мініатюру формату JPG розміром 320 × 240 на 4-й секунді у відео. Помістіть це в сценарій, який змінює час і ім’я файлу, і ви закінчите.
Додаткова інформація: Створюйте мініатюрне зображення кожні X секунд відео
-ss position
прапор для пошуку далі у файл? -ss Seek to given time position in seconds. hh:mm:ss[.xxx] syntax is also supported
-ss
перед -i
тим, щоб пошук стався до того , як вхідне відео стане декодованим. це має прискорити його. source
Якщо ви після свого роду контактного аркуша , і якщо ви працюєте з Unix-подібної операційної системою, ви можете використовувати цей складний сценарій, названий на точці відео Контакту Лист * NIX , короткі VCS .
У фоновому режимі він також використовує ffmpeg
(за замовчуванням) або mplayer
, отже, може обробляти безліч відеоформатів. Він автоматизує процес зйомки нерухомих зображень із фільму та складання їх до зображення із деяким заголовком та колонтитулом. Ви можете вибрати, наприклад, скільки захоплень ви хочете, або альтернативно між ними часові різниці.
З інтервалом у 10 хвилин виклик виглядає так:
vcs -i 10m input.avi
Перевірте повний список параметрів командного рядка для деяких інших налаштувань.
Ось приклад контактного листа, взятого з домашньої сторінки :
З VLC 1.1.0 і вище ви можете використовувати фільтр сцени відео:
vlc C:\video\to\process.mp4 --rate=1 --video-filter=scene --vout=dummy --start-time=10 --stop-time=11 --scene-format=png --scene-ratio=24 --scene-prefix=snap --scene-path=C:\path\for\snapshots\ vlc://quit
Вищезазначене зберігає 1 з кожні 24 кадри (- співвідношення сцен = 24), починаючи з 00:00:10 і закінчуючи о 00:00:11.
Щойно перевірена та підтверджена робота з VLC 2.0.3 на свіжій установці Windows 8 (у мене немає додаткових відеоплагінів чи програмного забезпечення).
Повна документація: http://wiki.videolan.org/How_to_create_thumbnails
VirtualDub може зробити це за вас
File
-> Export
->Image sequence
Ви також можете спробувати це
з командного рядка VLC ...
vlc "C: \ YOUR \ file \ path \ file.avi" -V зображення --image-out-prefix = capname --image-out-ratio = 60
file.avi - це відео, з якого ви хочете зробити знімок, capname - це префікс збережених зображень, ви можете пограти зі співвідношенням (60 означає, що 1 з 60 зображень зроблено) Ви можете додати більше команд, наприклад --image-out-формат jpeg збереже ваші шапки як jpegs замість png, --snapshot-path дозволяє вам вибрати, де зберегти шапки.