30.03.2009 16:18
krig — Создание скринкаста для видео
Для размещения своей раздачи на одном популятном торрент-трекере возникла необходимость создать скринкаст. Немного погуглив так и не нашел решения сей проблемы под линукс. В итоге пришлось устанавливать Media Player Classic на WinXP в VirtualBox (винда в ВБоксе у меня стоит на всякий случай, типа такого). Скринкаст сделал, раздачу создал и вроде бы забыл о проблеме, но осадок остался.Спустя некоторое время появилось свободное время и я решил написать на питоне скрипт для создания скринкастов.
В итоге кое-что получилось.
Пример того что можно получить скриптом, по сравнению с MPC:
MPC:
screencast.py
Для работы скрипта необходимы:
Python 2.5+ (возможно будет работать и с более младшей версией, не пробовал)
ffmpeg (у меня из репозитория Убунты)
mplayer (у меня из репозитория Убунты)
PIL (Python Image Library)
TrueType шрифт (по умолчанию нужен ttf-liberation)
Все параметры выполнения скрипта можно настраивать параметрами командной строки. В будущем планирую написать оконный фронтэнд на PyQt, но когда это будет пока не известно.
Запуск скрипта:
python screencast.py /PATH/TO/VIDEO
либо, если дать скрипту разрешение на запуск (chmod +x screencast.py)
./screencast.py /PATH/TO/VIDEO
Посмотреть все возможные параметры можно выполнив:
python screencast.py --help
Скрины делаются в полную величину видео, поэтому чем большее разрешение у видео, тем большего размера скринкаст вы получите на выходе.
PS: если это очередной велосипед, буду рад услышать об аналогах. Хотя это опять же писалось для себя, чтобы поттренироваться в питоне и посмотреть на некоторые возможности PIL.
UPD:
v0.3
- теперь скрины делаются при помощи mplayer, что позволило ускорить скрипт в несколько раз (большое спасибо пользователю lomereiter за подсказку и код)
- добавил 2 параметра для изменения количества скринов из командной строки
- изменил шрифт по умолчанию на свободный
- обновил статью (ссылка на скрипт, новый скринкаст, описание параметров)
v0.4
- заменил getopt на optparse, что упростило работу с параметрами и добавило автоматическую генерацию параметров
- теперь все параметры работы скрипта можно настраивать параметрами командной строки
- обновил статью
exelens 30.03.2009 16:39 #
+ -2 -
Из топика не понятно, как запускать скрипт, куда он пишет файлы, в каком разрешении. Какие пакеты нужны для его работы?
как запускать скрипт
Если попытать его запустить, он все сам расскажет =)
Сейчас допишу, что смогу.
В Arch Linux пришлось доставлять Pil. Ну и шрифт я поменял на православный. :)
Удобная штука, хотя не очень шустрая и кушает одно ядро. Но всё же быстрее, чем самому лепить в GIMP'е. :)
Не помешала бы возможность передавать в качестве параметров значения Rows и Cols.
Удобная штука, хотя не очень шустрая и кушает одно ядро. Но всё же быстрее, чем самому лепить в GIMP'е. :)
Не помешала бы возможность передавать в качестве параметров значения Rows и Cols.
Медленная из-за ффмпега - чем больше смещение, тем дольше времени вытаскивается скрин. 1 ядро, думается, тоже из-за сборки ффмпега, хотя возможно что и из-за способа его запуска из питона.
Вечером постараюсь добавить параметры и поменяю шрифт по умолчанию на свободный.
Вечером постараюсь добавить параметры и поменяю шрифт по умолчанию на свободный.
Нет. Более того, тут только один процесс, запускающий в синхронном режиме другой, и только 1 трэд, поэтому распаралеливать нечего.
Вот если немного изменить структуру программы и делать несколько скринов паралельно, то можно уже подумать и о распределении трэдов по ядрам, если это вобще возможно (еще не приходилось работать с потоками в питоне).
Вот если немного изменить структуру программы и делать несколько скринов паралельно, то можно уже подумать и о распределении трэдов по ядрам, если это вобще возможно (еще не приходилось работать с потоками в питоне).
Чёрт, хватит сходить с ума! :) Какие, нафиг, потоки?))
У кого есть ffmpeg — и mplayer наверняка завалялся. Не знаю, что за дурь у ffmpeg'а, но mplayer вытягивает jpeg-и в доли секунды. Модифицированный для mplayer скрипт здесь.
У кого есть ffmpeg — и mplayer наверняка завалялся. Не знаю, что за дурь у ffmpeg'а, но mplayer вытягивает jpeg-и в доли секунды. Модифицированный для mplayer скрипт здесь.
В том виде что вы запостили исходник он не будет работать - как минимум вы не указали имя для изображения, поэтому сразу же после создания первого же скрина скрипт вываливается с ошибкой. Но идея хорошая, сейчас доведу до ума и обновлю ссылку на новую версию скрипта.
А можно поподробней? Какая именно ошибка? У меня почему-то всё работает...
Имя для изображения = const, судя по ману mplayer'а (00000001.jpg)
Имя для изображения = const, судя по ману mplayer'а (00000001.jpg)
Именно.
Но в строке 160 вашего скрипта вы используете то имя файла, которое я генерил для скринов.
Но в строке 160 вашего скрипта вы используете то имя файла, которое я генерил для скринов.
Может, таки-лучше diff'ом сравнивать, нежели глазами? %)
104 строка: tmp_image = TMP_PATH + '00000001.jpg'
104 строка: tmp_image = TMP_PATH + '00000001.jpg'
Обновил свой скрипт, добавил пару параметров и обновил статью.
Спасибо за наводку.
Спасибо за наводку.
Я бы на вашем месте для парсинга параметров использовал не getopt, а optpase, тоже стандартная библиотека но более мощная, докуметация тут. Еще впринципе можно пройтись по путям в PATH, в поисках ffmpeg и mplayer, что сделает скрипт более универсальным. Если будет время то обязательно поковыряю ваш скрипт в эту сторону.
А по поводу сабжа -- полезная штука, спасибо.
А по поводу сабжа -- полезная штука, спасибо.
Хождение по путям, выбор шрифта и другие настройки будут в графической оболочке, которая в планах. А за optparse спасибо, обязательно ей воспользуюсь =) Просто getopt был выше в результатах в гугле =)
Лучше шрифты и прочее запихнуть в консольную версию, а GUI как фронтенд сделать. А то не всякому удобнее GUI запускать ради установки пары-тройки параметров.
Заменил getopt на optparse и вынес все параметры в командную строку. Теперь можно прикручивать к скрипту любой фронтэнд =) Спасибо за помощь.
Странно, таких программ встречал штук пять точно. На вскидку XVidCap
Разве он не для захвата видео с рабочего стола, так же как и recordMyDesktop, т.е. для создания видео из действия пользователя?
Этот скрипт делает подборку скринов из видео.
Этот скрипт делает подборку скринов из видео.