SWFTools пакет для работы с Flash

25 Янв
2008

Технологии интерактивной веб-анимации, основанные на Flash появившись, быстро завоевали популярность у дизайнеров. Первоначально разработанные компанией Macromedia новые технологии объединили в себе большое количество различных технологических решений в области мультимедийного представления информации. При сравнительно небольшом размере Flash позволяет использовать звуковые и графические эффекты, и придать сайтам динамичность. Наиболее популярным инструментом разработки является Macromedia Flash, при всех его достоинствах у него есть один существенный недостаток — цена. Сегодня в операционной системе Linux доступно большое количество свободных инструментов позволяющих создавать и работать с Flash, познакомимся с самым популярным из них.

Пакет SWFTools

В пакет SWFTools (http://www.swftools.org/) входит несколько утилит с помощью которых можно создавать и изменять готовые Flash файлы. Доступны версии для нескольких операционных систем Solaris, Linux, FreeBSD, OpenBSD, HP-UX, MacOS X и Windows 98/ME/2000/XP. Распространяется под лицензией GNU GPL.

Установка обычно никаких проблем не вызывает. Например, пользователи дистрибутива ALTLinux могут установить swftools из Сизифа используя apt-get.

#apt-get install swftools

К сожалению, в репозитарии Ubuntu этого пакета нет. Поэтому здесь возможны два варианта:

- взять пакеты с родственного Debian — http://www.mediasitomo.com/swft-dev/

- установить программу самому, используя исходные тексты.

Мы пойдем вторым наиболее общим путем. Первоначально для получения всех возможностей желательно первоначально установить следующие библиотеки:

- freetype - http://www.freetype.org

- t1lib - ftp://sunsite.unc.edu/pub/linux/libs/graphics/

- jpeglib - http://www.ijg.org/files/jpegsrc.v6b.tar.gz

- и библиотеки avifile — http://avifile.sourceforge.net

В дистрибутиве Kubuntu, которым я пользуюсь эти библиотеки по умолчанию не устанавливаются. Самым простым способом узнать, что у вас есть это, распаковать архив с swftools, зайдите внутрь каталога и дать команду на конфигурирование. В конце скрипт выдаст информацию об недостающих библиотеках.

$ ./configure

checking whether we can compile the python test program… yes

checking for missing libraries… jpeglib t1lib ungif jpeglib.h freetype t1lib.h gif_lib.h avifile

***************************************************

* The following headers/libraries are missing: jpeglib t1lib ungif jpeglib.h freetype t1lib.h gif_lib.h avifile

* Disabling avi2swf tool…

* Disabling pdf2swf tool…

* Disabling jpeg2swf tool…

* Disabling gif2swf tool…

***************************************************

Этот вывод показывает, что будут скомпилированы не все утилиты. Но это легко исправить. Так как в репозитарии Kubuntu все эти библиотеки есть. Для их установки даем следующую команду.

$ sudo apt-get install libfreetype6 libfreetype6-dev libjpeg62 libjpeg62-dev libt1-dev libungif4-dev libavifile-0.7-dev libavifile-0.7c2

И снова повторите конфигурацию swftools. После установки в системе появится 13 новых утилит. Познакомимся с ними.

Конвертеры форматов

Это наиболее многочисленная категория утилит входящая в комплект swftools. При помощи любой из этих 7 утилит можно преобразовать файлы в определенных форматах в swf (small web format). Рассмотрим их по порядку. Начнем, пожалуй с преобразования графических файлов.

Например, получим swf из png файлов находящихся в текущем каталоге, в результирующем файле каждый фрейм будет соответствовать одному исходному файлу.

$ png2swf *.png -o file.swf

В качестве дополнительных параметров, можно использовать сжатие (—zlib), которое уменьшит размер результирующего файла до 10%, размеры окна (-X и -Y), и при помощи —rate количество кадров в секунду (цифра в диапазоне от 1 до 256). При этом цифры должны подбираться с учетом формулы 1/значение, т.е. чем меньше указанное число, тем больше будет выставлен интервал времени, либо размер кадра.

$ png2swf -r 1 -X 50 -Y 50 —zlib *.png -o file.swf

Аналогичные опции имеет утилита gif2swf, позволяющая проделать то же и с gif файлами.

$ gif2swf -X 100 -Y 100 *.gif -o file.swf

Утилита для работы с jpeg файлами jpeg2swf имеет еще две дополнительные опции —mx – для использования Flash MX H.263 компресию, и —quality устанавливающая качество в диапазоне от 1 (хуже) до 100 (лучше). В остальном все так же.

$ jpeg2swf —quality 60 -X 200 -Y 100 *.jpg -o file.swf

Идем далее, например, у нас есть PDF документ, необходимо получить Flash файл для представления в Интернет. Без проблем.

$ pdf2swf manual.pdf manual.swf

processing PDF page 4 (612×792:0:0) (move:0:0)

В итоге будет получен swf файл при просмотре которого в веб-браузере будут показаны периодически сменяющие друг друга страницы документа. Если не указать имя выходного файла результат будет выведен в stdout, в случае использования swftools для генерирования графики на веб-сервере может быть полезной опция -C или –cgi, генерирующая дополнительный http заголовок.

В большинстве случаев весь документ не нужен, использовав опцию —pages, можно указать необходимые страницы документа. Например, конвертируем только 1,2 и страницы с 5 по 10.

$ pdf2swf —pages 1,2,5-10 manual.pdf manual.swf

А вот так можно получить swf файл из файла шрифтов.

$ font2swf arial.ttf -o font.swf

Поддерживаются все распространенные форматы шрифтов .ttf, .afm, .pfa, .pfb и другие. К сожалению, не возможно указать кодировку, поэтому в результирующем файле локализованные шрифты выводятся не правильно.

 шрифты

Переходим к следующей утилите wav2swf, как понятно из названия ее назначение получение swf из звукового файла в формате wav. Для кодирования используется кодек LAME. В общем случае вызов утилиты прост.

$ wav2swf -v voice.wav

В результате в текущем каталоге появится файл output.swf, при запуске которого будет произведен звук. При помощи дополнительных опций можно изменить битрейт (—bitrate), который по умолчанию составляет 32, частоту дискретизации (—samplerate), время повторения фрагмента (—loop) и другие параметры.

$ wav2swf -v -loop 5 –definesound voice2.wav -voice.swf

И наконец последний конвертер avi2swf, используя который можно преобразовать avi файл в swf, для кодирования будет использован кодек h.263.

Вызов утилиты аналогичен предыдущим.

$ avi2swf file.avi -o output.swf

Теперь для уменьшения размера конечного файла изменим, качество с 80, это значение используется по умолчанию, до 40, а также размер на 40% от оригинального, и кодируем только первые 50 фреймов, вместо всего файла.

$ avi2swf —num=50 —scale=40 –quality=40 file.avi -o output.swf

Все просто. Но мы идем дальше.

Извлекаем информацию из Flash файла.

Самой простой из утилит является swfstrings, назначение которой извлечение текста из swf файла. Это, наверное, самая простая в использовании утилита.

$ swfstrings filename.swf

В результате на экран будет выведен текст содержащийся в файле, вероятно вывод лучше всего перенаправить в другой файл.

$ swfstrings filename.swf > text.txt

Другая утилита swfexstract уже умеет большее, извлекать все объкты содержащиеся в swf файле, клипы, отдельные фреймы, шрифты и звук. Если вызвать ее без параметров можно получить список объектов, которые содержит файл.

$ swfextract file.swf

Objects in file file:

[-i] 190 Shapes: ID(s) 1, 3, 5, 18, 20, 24, 27, 31, 35, 37, 39, 41, 43, 45-47, 51, 52, 54, 56, 58, …

[-i] 46 MovieClips: ID(s) 2, 4, 21, 57, 61, 72, 81, 89, 102, 107, 110, 114, 117, 119, 133, 136, …

[-j] 74 JPEGs: ID(s) 55, 59, 69, 74, 82, 91, 99, 105, 112, 120, 122, 124, 126, 128, 134, 141, …

[-p] 14 PNGs: ID(s) 17, 23, 34, 36, 38, 40, 42, 96, 243, 437, 451, 455, 457, 463

[-F] 10 Fonts: ID(s) 6, 12, 15, 25, 28, 32, 94, 183, 312, 380

[-f] 1 Frame: ID(s) 0

[-m] 1 MP3 Soundstream

Обратите внимание на буквы в квадратных скобках, которые идут в начале каждой строки. Это опции с помощью которых можно извлечь указанный объект. Например, нам нужен звук.

$ swfextract -m file.swf

NOTICE Writing mp3 data to output.mp3

Как видите все просто. Хотя возможен вывод и в wav файл, но его необходимо обязательно указывать вместе с опцией -о. Теперь изображения, исключая пустые фреймы.

$ swfextract —pngs 17,23,34,36,38,40 file.swf —hollow

В результате в текущем каталоге появятся файлы вида pic17.png, pic23.png и т.д. А вот так можно извлечь отдельный видеофрейм.

$ swfextract -P -i 2 file.swf -o frame2.swf

Либо так.

$ swfextract —frame 2 file.swf -o frame2.swf

Теперь следующая утилита swfdump, назначение которой вывод информации о swf файле. Для вывода всей служебной информации воспользуемся следующей командой.

$ swfdump —full file.swf

[HEADER] File version: 6

[HEADER] File size: 3091206

[HEADER] Frame rate: 18.000000

[HEADER] Frame count: 7165

[HEADER] Movie width: 550.00

[HEADER] Movie height: 400.00

[009] 3 SETBACKGROUNDCOLOR (00/00/00)

[002] 32 DEFINESHAPE defines id 0001

| fillstyles(01) linestyles(00)

| 1 ) SOLID 000000ff

|

| fill: 00/01 line:00 — moveTo 88.50 15.50

| fill: 00/01 line:00 — lineTo -88.50 15.50

| fill: 00/01 line:00 — lineTo -88.50 -15.50

| fill: 00/01 line:00 — lineTo 88.50 -15.50

| fill: 00/01 line:00 — lineTo 88.50 15.50

Кроме извлечения информации о файле, утилита swfdump имеет еще одну ценную опцию позволяющую генерировать готовый html код.

$ swfdump —html file.swf

<OBJECT CLASSID=»clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″

WIDTH=»550″

HEIGHT=»400″

CODEBASE=»http://active.macromedia.com/flash5/cabs/swflash.cab#version=6,0,23,0″>

<PARAM NAME=»MOVIE» VALUE=»file.swf»>

<PARAM NAME=»PLAY» VALUE=»true»>

<PARAM NAME=»LOOP» VALUE=»true»>

<PARAM NAME=»QUALITY» VALUE=»high»>

<EMBED src=» file.swf» WIDTH=»550″ HEIGHT=»400″

PLAY=»true» ALIGN=»" LOOP=»true» QUALITY=»high»

TYPE=»application/x-shockwave-flash»

PLUGINSPAGE=»http://www.macromedia.com/go/getflashplayer»>

</EMBED>

</OBJECT>

Кроме используя параметр —text утилиты swfdump, можно извлечь текстовые поля Flash файла (подобно swfstrings).

$ swfdump —text file.swf

Манипулирование данными.

Здесь одна утилита swfbbox, при помощи которой можно пересчитать параметры swf файла и как результат сделать его меньшим по размеру. Параметры файла можно получить, запустив утилиту без параметра.

$ swfbbox file.swf

Original Movie Size: 550.00 x 400.00 :0.00 :0.00

Теперь попробуем оптимизировать его при помощи опции –О.

$ swfbbox -O file.swf -o optimiz.swf

Хотя признаться мне редко когда удавалось оптимизировать файл больше чем на 1 %.

Результат оптимизации можно получить, использовав параметр –S.

$ swfbbox -S file.swf

{

{frame 0}

}

{

{frame 1}

{ID5 {0.00 50.00 550.00 50.00 0.00 348.40 550.00 348.40}}

{ID7 {76.50 121.60 115.60 121.60 76.50 132.65 115.60 132.65}}

и т.д.

Объединение Flash файлов.

Все утилиты, о которых было рассказано выше, перекодировали файлы в SFW из разных форматов, оптимизировали, извлекали служебную информацию. Теперь осталось только объединить результат. А вот как раз для этих целей и предназначена утилита swfcombine, которая позволяет соединить два или более swf файла в один. Один из файлов обязательно должен быть определен как master, остальные подключаются по мере необходимости, как «slaves». Кроме того с помощью swfcombine можно сжимать либо разжимать SWF файлы, при использовании одного файла необходима опция –d (—dummy) не требующая slave файла. Сжимаем.$ swfcombine -dz file.swf -o file_new.swf
Разжимаем.

$ swfcombine -d file.swf -o file_new.swf

И теперь соединяем два файла вместе. Например, у нас есть файл с изображениями, теперь наложим еще звук и файл готов.

$ swfcombine -o combined.swf picture.swf slave=sound.swf

Если количество slave файлов велико, то их можно первоаначально объединить.

$ swfcombine —cat name1=slavefile1.swf name2=slavefile2.swf -o slave_res.swf

Из дополнительных опций можно добавить масштабирование (—scale) результирующего файла, количество кадров в секунду (—rate).

И наконец последняя утилита swfc, при помощи которой можно скомпилировать sc скрипт в готовый Flash файл. Здесь все просто, берем подготовленный файл и вводим следующую команду (в подкаталоге doc лежит готовый пример скрипта).

$ swfc fileformat.sc -o file.swf

Итак, инструменты, входящие в состав пакета SWFTools позволяют выполнить большую часть операций по работе с файлами формата Flash. Большая часть опций унифицирована, а значит пара-тройка экспериментов и вы уже полностью освоите работу с любой из этих утилит. Viva OpenSource!

2 Комментариев к SWFTools пакет для работы с Flash

Аватар

dsniff

Март 18th, 2011 | 23:15

Да,так пойдёт.Отличный faq,самое главное всё разложенно по полочкам.
Спасибо и ещё разок спасибо.

Аватар

sashki

Март 25th, 2011 | 12:02

Действительно хороший текст. Все ясно и понятно и работает.
Спасибо автору.

Комментировать

Наверх