Фильм > Комикс. Свежая идея! Зацените и пособите. (Если вас заинтересовало и вы знаете как сделать.)

Разные проблемы звука, видео, обсуждение разных устройств и т.д.

Модератор: Модераторы разделов

Не-Тыква
Сообщения: 25
ОС: Debian

Фильм > Комикс. Свежая идея! Зацените и пособите.

Сообщение Не-Тыква »

Привет всем!

Я не программер, да и вряд ли им когда-нибудь стану (старый уже, а годы идут :) ), но иногда возжа попадает под хвост и хочется заделать что-то такое, чего ещё не было, но только вот знаний не хватает на воплощение идей :crazy: . Поэтому я снова здесь с вопросом. Не страшно, если даже его не решим (хоть просто пообщаемся по делу, а конструктивное общение всегда полезно). 

Идея такая. Преобразовать фильм (любой) с субтитрами в комикс, т.е. в набор фалов-картинок из этого фильма, в автоматическом режиме. Субтитры должны пропечататься поверх скриншотов из фильма, иначе вся затея теряет смысл. Комикс предназначен для просмотра на карманном плеере (о девайсах с видео знаю, у меня такой есть - речь не о них).

Эти комиксы могут быть чрезвычайно полезны изучающим языки (можно ещё выдрать звук и положить его отдельным файлом), а так же тем, кто любит книжки с картинками...

Пара практических соображений:

  • Надо написать скрипт, который будет читать из текстового файла субтитров (srt)время, к которому относятся соответствующие строки субтиров и делать скриншоты (для меня это звучит совершенно безнадёжно).  Если кто не в курсе,  субтитры имеют такой вид:
77
00:08:30,665 --> 00:08:33,250
It takes a liquid form as running water,
78
00:08:33,416 --> 00:08:37,833
gaseous as vapor, or solid as ice.
79
00:08:40,666 --> 00:08:44,833
In Siberia, the frozen surfaces of the lakes in winter
80
00:08:45,000 --> 00:08:49,250
contain the trace of the forces that water deploys when it freezes.
81
00:08:49,416 --> 00:08:51,791
Lighter than water, the ice floats.
    Субтитры в кадр можно прожечь предварительно с помощью Avidemux'а(вроде там есть такая опция), т.к. vlc при захвате снапшота их не прожигает (но в любом случае это делается не vlc, а ffmpeg или скорее всего mplayer'ом)

В общем, как видите, задача интересная, и что интереснее всего, в инете на эту тему вообще глухо - ничего не нашёл. Вся надежда на вашу помощь!
пишите у кого какие идеи, как это можно реализовать. Таким образом, мы решим задачу, даже при нехватке знаний (тем более, что торопиться вроде некуда). 


PS.
В прицепе картинка-скриншот из фильма Home с субтитрами, сделана вручную в гноме, вырезана вручную гимпом.
Спасибо всем заранее!
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
Аватара пользователя
Rodegast
Сообщения: 337
ОС: Linux

Re: Фильм > Комикс. Свежая идея! Зацените и пособите.

Сообщение Rodegast »

Можно перекодировать видео так чтобы оно смотрелось как чередование отдельных сцен, а потом наложить сабы. Но вы сами понимайте что тут будет всё зависеть от исходных видео файлов.
Спасибо сказали:
Не-Тыква
Сообщения: 25
ОС: Debian

Re: Фильм > Комикс. Свежая идея! Зацените и пособите.

Сообщение Не-Тыква »

Rodegast писал(а):
23.01.2010 11:06
Можно перекодировать видео так чтобы оно смотрелось как чередование отдельных сцен, а потом наложить сабы. Но вы сами понимайте что тут будет всё зависеть от исходных видео файлов.
Не совсем понимаю, что вы имеете в виду... Желательно, чтобы всё происходило автоматически и требовало минимального вмешательства, иначе это можно сделать самому, вручную, как сделана картинка в заглавном посте. 
Спасибо сказали:
Nymin
Сообщения: 1095
Статус: -
ОС: GNU/Linux

Re: Фильм > Комикс. Свежая идея! Зацените и пособите.

Сообщение Nymin »

такой "комикс" (я то думал основной смысл в наложении фильтров типа popart :) без ручной обработки будет таким черти чем,
Спасибо сказали:
Аватара пользователя
Mifodix
Сообщения: 373
ОС: Fedora 17 x86_64

Re: Фильм > Комикс. Свежая идея! Зацените и пособите.

Сообщение Mifodix »

1. "прожечь" субтитры в видео:

Код: Выделить всё

mencoder -oac mp3lame -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2000 myvideo.avi -subwidth 75 -subcp utf8 -subfont-text-scale 3 -sub mysubs.srt -o myvideo-with-hardsubs.avi

тут нужно поиграться с параметрами для отображения субтитров. как с ffmpeg сделать не знаю.
2. парсить файл субтитров и выделить только первый отрезок времени, т.е. из 00:08:33,416 --> 00:08:37,833 выделить 00:08:33,416 (вот это не знаю как сделать)
3. сделать скриншоты из видео с прожжёнными субтитрами по времени из пункта 2, например командой

Код: Выделить всё

ffmpeg -i video.avi -an -ss время -r 1 -vframes 1 -y -f mjpeg screenshot.jpg
Спасибо сказали:
Аватара пользователя
uptime
Сообщения: 1661
Статус: Drinker with computing problems
ОС: kubuntu 8.04

Re: Фильм > Комикс. Свежая идея! Зацените и пособите.

Сообщение uptime »

Не-Тыква писал(а):
21.01.2010 18:42
...
(можно ещё выдрать звук и положить его отдельным файлом)
...

звук тоже придётся резать. Вырезать длинные куски без разговоров. Видимо, придётся ориентироваться на ту же таблицу из сабов.
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
Спасибо сказали:
Аватара пользователя
Rodegast
Сообщения: 337
ОС: Linux

Re: Фильм > Комикс. Свежая идея! Зацените и пособите.

Сообщение Rodegast »

>Не совсем понимаю, что вы имеете в виду...

Я просто действовал бы в обратном направлении. Т.е. сначала разбил бы фильм на кадры копируя их через некоторое время, а уже потом прикручивал бы к этому сабы.
Спасибо сказали:
Не-Тыква
Сообщения: 25
ОС: Debian

Re: Фильм > Комикс. Свежая идея! Зацените и пособите.

Сообщение Не-Тыква »

Nymin писал(а):
23.01.2010 14:46
без ручной обработки будет таким черти чем
Он будет картинками из фильма с поясняющими надписями, со словами героев и возможно некоторыми комментами. В чём проблема? Некоторые важные события фильма могут происходить без слов, и поэтому не попадут в "комикс" - это единственный недостаток, но он преодолим так или иначе :tongue:  

Mifodix, спасибо за скрипты! Буду пробовать.
Mifodix писал(а):
23.01.2010 15:17
парсить файл субтитров и выделить только первый отрезок времени, т.е. из 00:08:33,416 --> 00:08:37,833 выделить 00:08:33,416 (вот это не знаю как сделать)
Сабы можно отредактировать(jedit), оставив в них только первые цифры (тысячные можно тоже убрать, они не нужны), весь текст тоже удалить. И файл примет такой вид:
00:08:30
00:08:33
00:08:40
00:08:45
00:08:49
Останется подставить эти значения в скрипты.
Спасибо сказали:
Аватара пользователя
Mifodix
Сообщения: 373
ОС: Fedora 17 x86_64

Re: Фильм > Комикс. Свежая идея! Зацените и пособите.

Сообщение Mifodix »

Не-Тыква писал(а):
23.01.2010 21:08
Nymin писал(а):
23.01.2010 14:46
без ручной обработки будет таким черти чем
Он будет картинками из фильма с поясняющими надписями, со словами героев и возможно некоторыми комментами. В чём проблема? Некоторые важные события фильма могут происходить без слов, и поэтому не попадут в "комикс" - это единственный недостаток, но он преодолим так или иначе :tongue:  

Mifodix, спасибо за скрипты! Буду пробовать.
Mifodix писал(а):
23.01.2010 15:17
парсить файл субтитров и выделить только первый отрезок времени, т.е. из 00:08:33,416 --> 00:08:37,833 выделить 00:08:33,416 (вот это не знаю как сделать)
Сабы можно отредактировать(jedit), оставив в них только первые цифры (тысячные можно тоже убрать, они не нужны), весь текст тоже удалить. И файл примет такой вид:
00:08:30
00:08:33
00:08:40
00:08:45
00:08:49
Останется подставить эти значения в скрипты.

ручное редактирование файла - это не тру:) нужно сделать скриптик на баше, которому передаются два параметра: путь к файлу видео и путь к субтитрам.
Спасибо сказали:
Аватара пользователя
Makinos
Сообщения: 369
ОС: OpenSuse 11.2

Re: Фильм > Комикс. Свежая идея! Зацените и пособите.

Сообщение Makinos »

Mifodix писал(а):
23.01.2010 21:35
ручное редактирование файла - это не тру:) нужно сделать скриптик на баше, которому передаются два параметра: путь к файлу видео и путь к субтитрам.


Скриптик? че??? :wacko:
echo '00:08:33,416 --> 00:08:37,833' | awk -F '[,>]' '{print $1}'
Спасибо сказали:
Не-Тыква
Сообщения: 25
ОС: Debian

Re: Фильм > Комикс. Свежая идея! Зацените и пособите.

Сообщение Не-Тыква »

 
Mifodix писал(а):
23.01.2010 21:35
ручное редактирование файла - это не тру
... чем богаты... тем более редактирование займёт всего с минуту времени.
Порылся на досуге в инете и нашёл кое-что полезное.
На сегодняшний день весь процесс мне представляется следующим образом:
1 Прожигаем сабы в кадр, как посоветовал Mifodix:
mencoder -oac mp3lame -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2000 myvideo.avi -subwidth 75 -subcp utf8 -subfont-text-scale 3 -sub mysubs.srt -o myvideo-with-hardsubs.avi

2 Редактируем файл сабов, как показано выше (оставляем исключительно время в формате чч:мм:сс,д, а можно и без десятых, или десятые заменить на 9 - так возможно будет лучше)
3 Делаем скрины фильма:
mplayer input.avi -frames 1 -vo jpeg -ss чч:мм:сс,д
а вот как подставить сюда значения из отредактированного файла сабов понятия не имею. В среднем, каждый фильм содержит около 1000 строк субтитров или чуть меньше, поэтому можно за пару минут сваять такой скрипт:
mplayer input.avi -frames 1 -vo jpeg -ss 00:08:30
mplayer input.avi -frames 1 -vo jpeg -ss 00:08:33
mplayer input.avi -frames 1 -vo jpeg -ss 00:08:40
mplayer input.avi -frames 1 -vo jpeg -ss 00:08:45


и т.д. и т.д.
и запустить его в баше. Проблема в том, что мне пока не известно как это делается :) и так же есть подозрение, что файлы не будут складываться в директорию один за другим, а вместо этого будет перезаписываться один и тот же файл.
Спасибо сказали:
Аватара пользователя
broom
Бывший модератор
Сообщения: 1629
Статус: мизантроп.ка
ОС: Gentoo

Re: Фильм > Комикс. Свежая идея! Зацените и пособите.

Сообщение broom »

Из man mplayer:
jpeg
Выводит каждый кадр в JPEG файл в текущем каталоге. В качестве имени файла выступает номер кадра с лидирующими нулями.


По поводу кучи картинок:
если у вас есть файл вида

Код: Выделить всё

00:08:30
00:08:33
00:08:40
,
можете написать как-нибудь так:

Код: Выделить всё

cat <имя_файла> | while read line; do mplayer input.avi -frames 1 -vo jpeg -ss $line; done

(не проверялось, могут быть ошибки)
but in the darkness, behind your smile, you scream... © Dio
Спасибо сказали:
Не-Тыква
Сообщения: 25
ОС: Debian

Re: Фильм > Комикс. Свежая идея! Зацените и пособите.

Сообщение Не-Тыква »

 
broom писал(а):
25.01.2010 12:21
можете написать как-нибудь так...
Спасибо за подсказку. Выводит только один скрин, после этого пишет:
jpeg: . - Output directory already exists and is writable.
No bind found for key ':'. ??% ??% ??,?% 0 0
No bind found for key ':'.
Как видно, файл дальше не "парсит"
Спасибо сказали:
Аватара пользователя
Mifodix
Сообщения: 373
ОС: Fedora 17 x86_64

Re: Фильм > Комикс. Свежая идея! Зацените и пособите.

Сообщение Mifodix »

Makinos писал(а):
23.01.2010 21:55
Mifodix писал(а):
23.01.2010 21:35
ручное редактирование файла - это не тру:) нужно сделать скриптик на баше, которому передаются два параметра: путь к файлу видео и путь к субтитрам.


Скриптик? че??? :wacko:
echo '00:08:33,416 --> 00:08:37,833' | awk -F '[,>]' '{print $1}'

я в баше совсем мало рублю пока что. напиши плиз как из файла субтитров выбрать только 1-ый промежуток времени. (пример содержимого в 1-ом посте).

Хм, действительно mplayer намного быстрее делает скриншот, чем ffmpeg.

Вот такой набросок получился. В комментариях проблемные места:

Код: Выделить всё

#!/bin/bash
#первый параметр скрипта - имя файла видео, второй - имя файла субтитров
echo "Writing subtitres to video..."
mencoder -ovc lavc -nosound "$1" -subwidth 75 -subcp utf8 -subfont-text-scale 3 -sub "$2" -o ./temp/hardsub
echo "Writing is complete!"
echo "Making times fo screenshots"
#вот тут нужно забубенить генерацию файла ./temp/times с временами для скриншотов
echo "Making comics!:)"
while read time;
do mplayer ./temp/hardsub -ss $time -frames 1 -vo jpeg:outdir=./comics;#как переименовать файл скриншота? а то один поверх другого записывается
done < ./temp/times
echo "Making comics is done!"
echo "Deleting temporary files"
rm -r ./temp
echo "Work is done!"
exit 0
Спасибо сказали:
Не-Тыква
Сообщения: 25
ОС: Debian

Re: Фильм > Комикс. Свежая идея! Зацените и пособите.

Сообщение Не-Тыква »

 
Mifodix писал(а):
25.01.2010 17:23
как переименовать файл скриншота? а то один поверх другого записывается
как-то надо сюда прикрутить mv, если не ошибаюсь
Спасибо сказали:
Аватара пользователя
Mifodix
Сообщения: 373
ОС: Fedora 17 x86_64

Re: Фильм > Комикс. Свежая идея! Зацените и пособите.

Сообщение Mifodix »

Итак, сегодня наконец-то разобрался с awk (крутая штука, оказывается:) ) и доделал скрипт. Всё бы хорошо, но вот почему-то среди скриншотов оказывается куча "пустых" (в смысле без субтитров) и повторных скриншотов. Не понимаю в чём проблема.

Код: Выделить всё

#!/bin/bash
#первый параметр скрипта - имя файла видео, второй - имя файла субтитров
echo "Writing subtitres to video..."
mkdir temp
mencoder -ovc lavc -nosound "$1" -subwidth 75 -subcp utf8 -subfont-text-scale 3 -sub "$2" -o ./temp/hardsub
echo "Writing is complete!"
echo "Making times for screenshots"
cat "$2" | awk '/-->/ {print $1}'>>./temp/times
exec 3<./temp/times
echo "Making comics!:)"
mkdir ./comics
number=0
while read -u 3 time;
do mplayer ./temp/hardsub -ss $time -frames 1 -vo jpeg;
mv ./00000001.jpg "./comics/$number.jpg";
let number++;
done < ./temp/times
echo "Making comics is done!"
echo "Deleting temporary files"
rm -r ./temp
echo "Work is done!"
exit 0
Спасибо сказали:
Не-Тыква
Сообщения: 25
ОС: Debian

Re: Фильм > Комикс. Свежая идея! Зацените и пособите.

Сообщение Не-Тыква »

 
Mifodix писал(а):
29.01.2010 23:44
доделал скрипт
:clap3:  
Mifodix писал(а):
29.01.2010 23:44
Всё бы хорошо, но вот почему-то среди скриншотов оказывается куча "пустых" (в смысле без субтитров) и повторных скриншотов. Не понимаю в чём проблема
mplayer может делать скрины только с ключевых фреймов(вроде бы). Отсюда и масса повторных, не соответствие времени и пропуски указанных кадров. Надо использовать что-то другое, не mplayer. А так вообще, получается довольно интересно, правда файлов много, но это поправимо, если если их раскидать в несколько папок.  
Спасибо сказали:
Аватара пользователя
Mifodix
Сообщения: 373
ОС: Fedora 17 x86_64

Re: Фильм > Комикс. Свежая идея! Зацените и пособите.

Сообщение Mifodix »

Не-Тыква писал(а):
08.02.2010 18:28
 
Mifodix писал(а):
29.01.2010 23:44
доделал скрипт
:clap3:  
Mifodix писал(а):
29.01.2010 23:44
Всё бы хорошо, но вот почему-то среди скриншотов оказывается куча "пустых" (в смысле без субтитров) и повторных скриншотов. Не понимаю в чём проблема
mplayer может делать скрины только с ключевых фреймов(вроде бы). Отсюда и масса повторных, не соответствие времени и пропуски указанных кадров. Надо использовать что-то другое, не mplayer. А так вообще, получается довольно интересно, правда файлов много, но это поправимо, если если их раскидать в несколько папок.  

а ffmpeg? надо заменить

Код: Выделить всё

mplayer ./temp/hardsub -ss $time -frames 1 -vo jpeg;
mv ./00000001.jpg "./comics/$number.jpg";

на

Код: Выделить всё

ffmpeg -i ./temp/hardsub -an -ss $time -r 1 -vframes 1 -y -f mjpeg ./comics/"$number".jpg;

сейчас некогда проверять, попробуйте.

Ах чёрт, вот почему повторяющиеся: удалите

Код: Выделить всё

< ./temp/times
Спасибо сказали:
Не-Тыква
Сообщения: 25
ОС: Debian

Re: Фильм > Комикс. Свежая идея! Зацените и пособите.

Сообщение Не-Тыква »

 
Mifodix писал(а):
08.02.2010 21:38
...
Этот скрипт работает лучше. Спасибо. Только и здесь есть загвоздка - довольно много кадров без сабов. Как я и подозревал, причина в том, что время - понятие растяжимое ;) . Тот же самый mencoder, которым мы прожигаем субтитры в кадр, понимает его по-разному, чтобы в этом убедиться, можно пожечь сабы на одно  видео дважды, и мы увидим, что сабы прожённые в первый раз появляются на экране не синхронно с прожёнными во второй раз. Рассинхронизация составляет где-то треть секунды, что конечно много. Поэтому я вновь сошёл с "тру"-тропы :laugh: открыл сабы текстовым редактором и в каждой строке прибавил по секунде, а все десятые (после запятой) заменил на "3" - теперь попадание, как и предполагалось, составило 100%(вроде).

По идее, не плохо было бы считать среднее арифметическое. 00:00:34,752 --> 00:00:36,377, например, здесь скрин делать с 00:00:35,3 - попадёт точно. 
Спасибо сказали:
Аватара пользователя
Mifodix
Сообщения: 373
ОС: Fedora 17 x86_64

Re: Фильм > Комикс. Свежая идея! Зацените и пособите.

Сообщение Mifodix »

Не-Тыква писал(а):
14.02.2010 05:05
По идее, не плохо было бы считать среднее арифметическое. 00:00:34,752 --> 00:00:36,377, например, здесь скрин делать с 00:00:35,3 - попадёт точно. 


Вот как посчитать среднее арифметическое для времени на bash - это уже задача так задача.
Спасибо сказали: