Что нового

Библиотека AVIWriter - Запись видео

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
AutoIt: 3.2.10.0+
Версия: 1.0

Категория: Графика, Разное

Описание: Библиотека для записи видео с вашего монитора в файл формата AVI.

Код/Пример:
Код:
; Example by ProgAndy
#include <ScreenCapture.au3>
#include "AVIWriter.au3"

Hotkeyset("{ESC}","close")

Break(0)


FileDelete(@DesktopDir & "\test.avi")

_StartAviLibrary()

$avi = _CreateAvi(@DesktopDir & "\test.avi", 5,200,200)

Do
    $m = MouseGetPos()
    $hBmp = _ScreenCapture_Capture("", $m[0] - 100, $m[1] - 100, $m[0] + 100, $m[1] + 100, True)
    _AddHBitmapToAvi($avi, $hBmp)
    _WinAPI_DeleteObject($hBmp)
    Sleep(200)
Until False



Func close()
    _CloseAvi($avi)
    _StopAviLibrary()
    exit
EndFunc;==>close

Файл: Библиотека AVIWriter

Источник: http://www.autoitscript.com/forum/index.php?showtopic=86748
Автор(ы): monoceres
 

araneon

Новичок
Сообщения
59
Репутация
0
Чёт непойму, скрипт должен писать видео со всего монитора или только какуюто область, просто у меня пишет небольшую область вокруг курсора, то есть передвигаешь курсор и запись идет только курсора с небольшой областью (windows7 x32) скрипт не менял, копи-паст и запуск!!! И размер БОЛЬШООООЙ получается, что тоже неудобно
 

asa12

Новичок
Сообщения
66
Репутация
3
С размером то всё понятно. 1,5 гига на 10 мин. записи при 1024*
Это размер несжатого avi. Нужно прикрутить модуль компрессии (или не нужно) - минус комп нужен не одноядерный и относительно современный. Там заморочек прилично и проблемы не с кодом.
 

araneon

Новичок
Сообщения
59
Репутация
0
Так как на счёт размера записываемого изображения, у меня почему то только кусочек пишет а не весь экран :( :( :(

вот такое в место такова
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
araneon [?]
Так как на счёт размера записываемого изображения, у меня почему то только кусочек пишет а не весь экра
В примере кода же написано какой участок пишется:
Код:
$hBmp = _ScreenCapture_Capture("", $m[0] - 100, $m[1] - 100, $m[0] + 100, $m[1] + 100, True)

То есть берется квадрат вокруг курсора со стороной 200 пикселей.
Весь экран:
Код:
_ScreenCapture_Capture("", 0, 0, -1, -1, True)
 

araneon

Новичок
Сообщения
59
Репутация
0
Redline сказал(а):
araneon [?]
Так как на счёт размера записываемого изображения, у меня почему то только кусочек пишет а не весь экра
В примере кода же написано какой участок пишется:
Код:
$hBmp = _ScreenCapture_Capture("", $m[0] - 100, $m[1] - 100, $m[0] + 100, $m[1] + 100, True)

То есть берется квадрат вокруг курсора со стороной 200 пикселей.
Весь экран:
Код:
_ScreenCapture_Capture("", 0, 0, -1, -1, True)


спасибо за советик, но чёт не получается (((
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
araneon [?]
спасибо за советик, но чёт не получается (((
Код лень рассмотреть?
Код:
$avi = _CreateAvi(@DesktopDir & "\test.avi", 5,200,200)

Здесь тоже нужно указать размер, если весь экран, то пиши так:
Код:
$avi = _CreateAvi(@DesktopDir & "\test.avi", 5,@DesktopWidth, @DesktopHeight)
 

araneon

Новичок
Сообщения
59
Репутация
0
Redline сказал(а):
araneon [?]
спасибо за советик, но чёт не получается (((
Код лень рассмотреть?
Код:
$avi = _CreateAvi(@DesktopDir & "\test.avi", 5,200,200)

Здесь тоже нужно указать размер, если весь экран, то пиши так:
Код:
$avi = _CreateAvi(@DesktopDir & "\test.avi", 5,@DesktopWidth, @DesktopHeight)

ООО СПАСИБО !!!
 

X3.42rus

Новичок
Сообщения
8
Репутация
0
Вот немного порылся на источнике и пришил в пример компрессию:

Код:
#include <ScreenCapture.au3>
#include "AVIWriter.au3"
#include <Process.au3>

Hotkeyset("{ESC}","close")

Break(0)


FileDelete(@DesktopDir & "\capture.avi")
FileDelete(@DesktopDir & "\Compressed_AVI.avi")
_StartAviLibrary()

$avi = _CreateAvi(@DesktopDir & "\capture.avi", 5,@DesktopWidth, @DesktopHeight)


Do
    	$hBmp = _ScreenCapture_Capture("", 0, 0, -1, -1, True)
    _AddHBitmapToAvi($avi, $hBmp)
    _WinAPI_DeleteObject($hBmp)
    Sleep(200)
Until False



Func close()
    _CloseAvi($avi)
    _StopAviLibrary()
	 CompressAVI("capture.avi")
	 FileDelete(@DesktopDir & "\capture.avi")
    exit
EndFunc;==>close

Func CompressAVI($PATH)
    TrayTip("AVIWritter", "Compressing avi...", 3, 4)
    _RunDOS('ffmpeg -i capture.avi -b 512k -vcodec msmpeg4v2 Compressed_AVI.avi')
    TrayTip("AVIWritter", "Finished !", 3, 4)
	EndFunc


Получилось что-то типоа фрапса.
т.е. захватывает весь экран, после остановки (Esc) конвертит при помощи FFMpeg (придется качать) и удаляет несжатый оригинал.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
X3.42rus
используй тэги [autoit][/autoit] для AutoIt кодов
 
Верх