Помогите разобраться с форматом видео
#1
Отправлено 19 Oct 2012 - 18:43
Общее
Полное имя : vera_showreel.mpg
Формат : MPEG-PS
Размер файла : 2,23 Гбайт
Продолжительность : 28 м.
Режим общего битрейта : Переменный
Общий поток : 11,2 Мбит/сек
Видео
Идентификатор : 224 (0xE0)
Формат : MPEG Video
Версия формата : Version 2
Профиль формата : Main@High
Параметр BVOP формата : Да
Параметр матрицы формата : По умолчанию
Параметр GOP формата : M=3, N=12
Продолжительность : 28 м.
Вид битрейта : Переменный
Битрейт : 10,6 Мбит/сек
Максимальный битрейт : 18,5 Мбит/сек
Ширина : 1920 пикселей
Высота : 1080 пикселей
Соотношение сторон : 16:9
Частота кадров : 30,000 кадров/сек
Стандарт вещания : PAL
Цветовое пространство : YUV
Субдискретизация насыщенности : 4:2:0
Битовая глубина : 8 бит
Тип развёртки : Чересстрочная
Порядок развёртки : Верхнее поле первое
Метод сжатия : С потерями
Бит/(Пиксели*Кадры) : 0.170
Размер потока : 2,11 Гбайт (95%)
Основные цвета : BT.709
Характеристики трансфера : BT.709
Коэффициенты матрицы : BT.709
Аудио
Идентификатор : 192 (0xC0)
Формат : MPEG Audio
Версия формата : Version 1
Профиль формата : Layer 2
Продолжительность : 28 м.
Вид битрейта : Постоянный
Битрейт : 384 Кбит/сек
Каналы : 2 канала
Частота : 48,0 КГц
Метод сжатия : С потерями
Задержка видео : -67 мс.
Размер потока : 78,3 Мбайт (3%)
____________________________________________
На этот файл надо наложить субтитры в формате SRT.
При попытке открыть его в Avid Liquid 7,2, Ликвид падает, в Премьере 5.5 не могу подобрать прессет проекта.
И как бы "уйти" от ручного вбивания субтитров, т.к. субы на английском языке под русскую речь.
Спасибо!
#2
Отправлено 19 Oct 2012 - 19:29
ffmpeg -i input.mpeg -vcodec copy -acodec copy -i input.srt output.mkv -newsubtitle
#3
Отправлено 19 Oct 2012 - 19:45
#4
Отправлено 19 Oct 2012 - 20:43
#5
Отправлено 19 Oct 2012 - 21:06
Формат : MPEG Audio
Версия формата : Version 1
Профиль формата : Layer 2
распаковал мпег и звук переконвертировал в вав- все встало на таймлайн.
С субтитрами то же вспомнил как- виртуалдабовский плаг , но не могу открыть ссылку http://forum.videoed...showtopic=37533, свое же описание работы этого плага и настройки.
Нет, переконвертировать в ssa и виртуалдабовским фильтром накинуть на видеоНадо импортировать в файл титры *.str или переконвертировать файл с титрами из *.str?
#6
Отправлено 19 Oct 2012 - 23:15
#7
Отправлено 20 Oct 2012 - 16:54
Спасибо за помощь!
#8
Отправлено 20 Oct 2012 - 18:35
ЗЫ. Сори, выше очепятался, .str - srt.
Сообщение отредактировано YNUS: 20 Oct 2012 - 18:36
#9
Отправлено 21 Oct 2012 - 13:10
поподробнее можно про это?Карбон ,насколько я понял некий XML понимает.Или я недоразобрался.Чем для него конвертить?а можно было титры конвертнуть в формат для для карбона и в нем прожечь их на видео.
#10
Отправлено 21 Oct 2012 - 14:07
Илья предложил и сделал это все через Премьер за один час!(ото со скачиванием файла, просчета титров и обратной пересылкой).
Так что, с него и спрос! И респект и уважуха!
#11
Отправлено 21 Oct 2012 - 14:59
1. загнать видео в премьер, титры конвертнуть в edl + картинки с альфой и вывести в мпег
2. конвертнуть титры в xml для карбона и из него вывести в видео
в первом случае титры конвертятся в в fab subtitle( можно было бы и в aaf, но премьер на него ругается)
во втором случае нужно просто сохранить титры из фаба в stl ebu и подгрузить их в карбон
#12
Отправлено 21 Oct 2012 - 15:14
И как переконвертировать?
Открыл субы srt в FAB Subtitler v.5.19e., ни save a , ни Export не работают, загреены.
Видео файл надо подсовывать?
Сообщение отредактировано Anatoliy A. Vorobey (sparrow): 21 Oct 2012 - 15:27
#13
Отправлено 21 Oct 2012 - 15:42
#14
Отправлено 21 Oct 2012 - 16:50
видео не обязательно подсовывать
#15
Отправлено 22 Oct 2012 - 21:05
В Adobe Premiere CS3 этот метод не работает!
Во- первых: после импорта файла EDL, файлы с расширением BMP появившиеся на таймлайне новой секвенции не возможно залинковать автоматом (т.е. выбрать в бине первый и последний +Shift-> Media Link), приходится в ручную.
Во-вторых: имеется какая то проблема с представлением BMP и альфа-канала именно в версии Adobe Premiere CS3 под WinXP и Adobe Premiere CS5.5.2 под MAC OS Х v.10.6.8
Файл субтитра закрывает видео, назначаешь инверсию альфы- титр пропадает, но видео появляется,это в CS3. В CS5.5- вообще все глухо- вместо титра черное поле, хотя в финдере титр показывает.
В- третьих: В Adobe Premiere CS6 под виндой- все работает прекрасно, проверенно на двух машинах.
По этой причине сохраняем субтитры в формате *.aaf -Adobe Premiere(AAF+32 bit TGA files with alpha)- это для CS3.
Импортируем *.aaf и дважды кликаем на нем. Откроется новая секвенция на тайм-лайне которой будут субтитры в виде графических файлов *.TGA. Копируем их все и вставляем в лейер секвенции содержащей исходное видео. Рендерим, все работает.
Ищется опробованная ссылка (в ПМ) на нормальный CS6 под MAC OS X для установления истины)))
#16
Отправлено 22 Oct 2012 - 22:27
http://ffmpeg.zerano...hilit=ass#p2304 - здесь конфигурация винды и файла fonts.conf
преобразовать титры в ass можно наверное в програмке Aegisub
#17
Отправлено 22 Oct 2012 - 23:40
Не берусь утверждать, что полностью понял, то, что написано, но похоже через ffmpeg видео "склеивается" с субтитрами?ffmpeg -i (исходник) vf ass=title.ass (выходной формат файла) (путь и имя файла)
http://ffmpeg.zerano...hilit=ass#p2304 - здесь конфигурация винды и файла fonts.conf
преобразовать титры в ass можно наверное в програмке Aegisub
#18
Отправлено 22 Oct 2012 - 23:46
и есть пара заморочек мелких , с добавлением в переменные среды винды путей к файлу конфигурации и шрифтам.
Но оно того стоит можно титровать тыщи файлов в атоматическом режиме
#19
Отправлено 22 Oct 2012 - 23:49
Сообщение отредактировано Sergesha: 22 Oct 2012 - 23:53
#20
Отправлено 23 Oct 2012 - 00:01
В примере, который я описал, ВМР или TGA с субтитром стоят на таймлайне в верхнем лейере, его можно подвинуть, сократить или растянуть, в конечном итоге даже в титровалке исправить ошибки ИМХО. Т.е. учитывается "человеческий фактор" титровальщицы. Часто бывает, что титровальщики залезают субами на плашки с представлением "говорящей головы".
Ваши методы, мягко говоря слепые, если только вы сам не делаете субтитры.
#21
Отправлено 23 Oct 2012 - 00:38
Не захочешь никаких тга-шек штамповать и двигать.
#22
Отправлено 23 Oct 2012 - 06:53
Титровалки- вопрос не моей зарплаты ))), прога действительно хорошая, правда ложка дегтя все же присутствует:Толик , поставь Aegisub, посмотри как титровалки нормальные выглядят. Реально сильная прога для потоковых субтитров.
Не захочешь никаких тга-шек штамповать и двигать.
"не умеет делать сдвиг времени с монотонным наращиванием/уменьшением сдвига для правки скриптов к неправильно закодированному видео (или наоборот для подгонки скрипта от 'неправильного видео' к нормальному). Т.е. это когда кто-то умный перегоняет видео формата 25FPS в 23.976FPS кривыми руками увеличивая время фильма на 3% или наоборот. Такое, к сожалению ещё встречается и в этих случах приходится применять DSRT для SRT-субтитров или Subtitle Workshop для SSA (ASS), правда только если они в кодировке CP-1251."
Вопрос то не в том, в какой программе делать субтитры, а как их положить на видео и выгнать на дигибету.
Вариантов получилось пять - два под премьер, один под карбон, один под ликвид, один с ffmpeg, еще бы с FCP разобраться, и будет щастье!
#23
Отправлено 23 Oct 2012 - 08:46
#24
Отправлено 23 Oct 2012 - 10:37
Anatoliy A. Vorobey (sparrow)
а вот еще есть отличная прога lemony subtitle - она экспортирует субтитры в fcp xml - вроде тебе как раз то что надо. Да тот же фаб то же для fcp делает экспорт.
#25
Отправлено 23 Oct 2012 - 16:00
#26
Отправлено 23 Oct 2012 - 16:07
#27
Отправлено 25 Oct 2012 - 00:42
Теперь надо разобраться с FCP.
FAB Subtitler предлагает два варианта:
1) конвертнуть в XML , при этом пишет-
You will be asked to select two files:
The XML file into which subttitles for FCP will be exported
The FCP XML template file which contains the font type that will be used
To create the FCP XML template file in FCP
Create a new sequence with a single text generator
Adjust this text generator's attributes (font,size,position)
Select just the secuence and export it as an XML version 1
2) создать MOV
В общем пока все ОК!
Всем спасибо!
#28
Отправлено 29 Oct 2012 - 23:38
нет ли для премьера чудо утилитки, что форматированный как надо текстовый файл конвертнёт в формат адобовской титровалки?
т.е сделает много-много одиночных титров, которые потом чел-опер расставит на таймлайне куды надо.
Сообщение отредактировано Muhin: 29 Oct 2012 - 23:40
#29
Отправлено 30 Oct 2012 - 14:20
#30
Отправлено 30 Oct 2012 - 14:41
Ответ не соответствует вопросу.конвертнёт в формат адобовской титровалки
#31
Отправлено 31 Oct 2012 - 00:32
да и фабсубтитлер мне гораздо более по душе, чем лемон.
причём и тот и другой стоят весьма прилично.
и ещё..., в том и дело, что иногда приходится править перевод прямо в процессе монтажа.
Malcev, спасибо за напоминание, всё никак не соберусь обратиться, надеялся адобовцы или плугинописатели таки озаботятся, ан нет
#32
Отправлено 31 Oct 2012 - 00:58
Я б тебе сам его написал, но знаний не хватает.
Я могу скинуть свою часть уже готового кода, для вставки в xml премьеровских титров, останется только допилить парсинг вордовского документа.
И по-другому сделать рассчеты если тебе нужны субтитры в 2 строки.
#34
Отправлено 31 Oct 2012 - 01:43
Malcev, зачем парсить вордовский документ, если титры в простом txt, и таки да нужноб чтобы софтина умела и одну строку и две.
#35
Отправлено 31 Oct 2012 - 01:51
Но который зависит от инфы в твоем текстовом файле - то есть меняешь длительность либо текст в самом текстовом файле.EZTitles Plug-in puts all subtitles in just one single clip
А запости пример этого текстового файла.
#36
Отправлено 31 Oct 2012 - 02:12
вот примерно так:
ерунда эта ez..негибкая, да и над проектом
порой работают в разных местах..
иногда титры надо двигать вверх
чтобы подписать персону
или прочие надписи...
-- вопщем нето.
Колличество символов в одной строке
точно не скажу, 37-42.
кадр -- 1920х1080.
Сообщение отредактировано Muhin: 31 Oct 2012 - 02:18
#37
Отправлено 31 Oct 2012 - 02:19
Чтобы понять как там разделения происходят между субтитрами в одну или 2 строки.
Смысл же такой, что скрипт этот документ парсит, разбивает на строки, которые впоследствии вставляет в нужные таги твоего шаблона титров.
Сообщение отредактировано Malcev: 31 Oct 2012 - 02:20
#38
Отправлено 31 Oct 2012 - 02:29
две строки -- ентер один раз(символ перевода строки)
одна строка -- ентер один раз(символ перевода строки)
две строки -- ентер один раз(символ перевода строки)
и т.д.
строки разбиваются тем же ентером
главное чтобы премьер не валился
точнее допустим он импортнет тучу prtl, но будет ли он достаточно стабильно работать после
сохранения такого обилия чужеродно созданных prtl-ов в теле проекта.
и вот тут конечно, одиночный файл или секвенция картинок с альфой
выглядит как-то более надежно, зато теряется гибкость...
блин, натофтопал я в чужой теме.., вынести, чтоли в отдельный топик?
Сообщение отредактировано Muhin: 31 Oct 2012 - 02:42
#39
Отправлено 31 Oct 2012 - 02:37
То есть титры идут так:
Мой дядя самых честных правил,
Когда не в шутку занемог,
Он уважать себя заставил
И лучше выдумать не мог.
Его пример другим наука;
Но, боже мой, какая скука
С больным сидеть и день и ночь,
И может ли быть в этих строчках больше максимально допустимого количества символов?
Или эти строчки тупо копируются без подсчета?
В общем заархивируй и залей
1) текстовый документ с субтитрами
2) премьеровский шаблон титра на 1 строку
3) премьеровский шаблон титра на 2 строки
Сообщение отредактировано Malcev: 31 Oct 2012 - 02:55
#40
Отправлено 31 Oct 2012 - 02:57
хоть и принцип-то простой взять шаблон и впихнуть между тегами текст
проф титровальщик-переводчик автоматом уже разбивает строки на нужное кол-во символов, 37-42 в одной строке
в принципе парсер текстового файла мне совсем несложно подправить(сам када-то писал, страшно вспомнить)
и да, ты правильно воспроизвел структуру
спасибо за поддержку!
завтра выложу все с работы..
Сообщение отредактировано Muhin: 31 Oct 2012 - 03:11
#41
Отправлено 31 Oct 2012 - 03:07
Можешь не волноваться, мне скрипты писал модератор форума по автохотки.xml должен быть очень чистый(правильный)
Один из них похож на то, что тебе надо.
Он в зависимости от количества строк выбирает нужный шаблон.
В пртл меняется только
<TRString TXMarker=""Booyah"">.*?</TRString>
<TRString>.*?</TRString>
и <CharacterAttributes RunCount>
Ну и если нужно чтобы титр выравнивался по горизонтали, то
<Position>
и
<XPos>.*?</XPos>
Премьеру без разницы где эти пртл сделаны.точнее допустим он импортнет тучу prtl, но будет ли он достаточно стабильно работать после
сохранения такого обилия чужеродно созданных prtl-ов в теле проекта.
и вот тут конечно, одиночный файл или секвенция картинок с альфой
выглядит как-то более надежно, зато теряется гибкость...
Год титрую 40-минутную еженедельную передачу, где-то 600-800 титров в проекте.
Глюков не наблюдал ни, что на двойке, ни на пятерке.
Сообщение отредактировано Malcev: 31 Oct 2012 - 03:44
#42
Отправлено 03 Nov 2012 - 14:52
Скрипт парсит текстовый документ, убирает пустые строки вначале и в конце, если несколько подряд идет пустых строк превращает их в одну пустую.
Потом разделяет на субтитры (разделитель - пустая строка)
Text = E:\subtitri.txt ; заменить на файл с субтитрами в кодировке UTF-8 watchfolder = E:\TITRI\ ; заменить на истинный путь к папке с будущими файлами титров (после запуска скрипта эта директория стирается и заново создается) prtlPath = E:\TITRI_DO_NOT_DELETE\ ; заменить на истинный путь к исходным файлам (шаблону), для одной строки должно быть название "1.ptrl" , для двух "2.ptrl" и т.д. SetBatchLines, -1 FileEncoding, UTF-16 FileRemoveDir, %watchfolder%, 1 FileCreateDir, %watchfolder% FileRead, str, %Text% string := RegExReplace(Trim(str,"`r`n"), "\R[\R\s]+", "`n`n") SubStrList := RegExSplit(string, "S)\n\n") for index, substring in SubStrList string%A_Index% := substring, Lines%A_Index% := SymbCount(substring, "`n")+1 n := SubStrList.MaxIndex() Loop % n { String := string%A_Index% k := Lines%A_Index% FileRead, prtl, %prtlPath%\%k%.prtl XPos := 0 Loop, parse, String, `n, `r { if (A_LoopField = "") Continue StrLength := StrLen(A_LoopField ) + 1 XPos := RegExMatch(prtl, "<XPos>", "", XPos + 1) prtl := RegExReplace(prtl, "<CharacterAttributes RunCount="".*?""" , "<CharacterAttributes RunCount=""" StrLength """" , "", 1, XPos - 1) StringReplace, LoopField, A_LoopField, &, &, 1 if (k > 1) { k:=k-1 prtl := RegExReplace(prtl, "<TRString TXMarker=""Booyah"">.*?</TRString>" , "<TRString TXMarker=""Booyah"">" LoopField "</TRString>" , "", 1, XPos - 1) } Else prtl := RegExReplace(prtl, "<TRString>.*?</TRString>" , "<TRString>" LoopField "</TRString>") } FileName := "title" . SubStr("000", 1, -(StrLen(A_Index))) . A_Index . ".prtl" FileAppend, % prtl, %watchfolder%\%FileName% } Msgbox, Done SymbCount(ByRef string, symb) { count := 0 loop, Parse, string (A_LoopField == symb) && ++count return count } RegExSplit(ByRef in, delim = "") { pos := 0, start := 1, Obj := [] while, pos := RegExMatch(in, delim, match, start) Obj.Insert(SubStr(in, start, pos - start)), start := pos + StrLen(match) Obj.Insert(SubStr(in, start)) return Obj }
Сообщение отредактировано Malcev: 03 Nov 2012 - 15:55
#43
Отправлено 05 Nov 2012 - 13:45
По такому шаблону.
При использовании в премьере нужно отключить автосейв.00:00:00:00 - 00:00:02:00
Мой дядя самых честных правил,
Когда не в шутку занемог,
00:00:03:00 - 00:00:04:00
Он уважать себя заставил
00:00:05:00 - 00:00:08:00
И лучше выдумать не мог.
Text = E:\subtitri.txt ; заменить на файл с субтитрами в кодировке UTF-8 watchfolder = E:\TITRI\ ; заменить на истинный путь к папке с будущими файлами титров (после запуска скрипта эта директория стирается и заново создается) prtlPath = E:\TITRI_DO_NOT_DELETE\ ; заменить на истинный путь к исходным файлам (шаблону), для одной строки должно быть название "1.ptrl" , для двух "2.ptrl" и т.д. Msgbox, Не забудьте отключить автосейв в премьере! EVENT_OBJECT_FOCUS := 0x8005 SetWinEventHook(EVENT_OBJECT_FOCUS, EVENT_OBJECT_FOCUS, 0, RegisterCallback("HookProc", "F"), 0, 0, 0) SetBatchLines, -1 FileEncoding, UTF-16 FileRemoveDir, %watchfolder%, 1 FileCreateDir, %watchfolder% FileRead, str, %Text% string := RegExReplace(Trim(str,"`r`n"), "\R[\R\s]+", "`n`n") SubStrList := RegExSplit(string, "S)\n\n") for index, substring in SubStrList string%A_Index% := substring, Lines%A_Index% := SymbCount(substring, "`n")+1 n := SubStrList.MaxIndex() Loop % n { String := string%A_Index% k := Lines%A_Index% - 1 FileRead, prtl, %prtlPath%\%k%.prtl XPos := 0 Loop, parse, String, `n, `r { if (A_Index = 1) { Timecode .= A_LoopField "`n" Continue } if (A_LoopField = "") Continue StrLength := StrLen(A_LoopField ) + 1 XPos := RegExMatch(prtl, "<XPos>", "", XPos + 1) prtl := RegExReplace(prtl, "<CharacterAttributes RunCount="".*?""" , "<CharacterAttributes RunCount=""" StrLength """" , "", 1, XPos - 1) StringReplace, LoopField, A_LoopField, &, &, 1 if (k > 1) { k:=k-1 prtl := RegExReplace(prtl, "<TRString TXMarker=""Booyah"">.*?</TRString>" , "<TRString TXMarker=""Booyah"">" LoopField "</TRString>" , "", 1, XPos - 1) } Else prtl := RegExReplace(prtl, "<TRString>.*?</TRString>" , "<TRString>" LoopField "</TRString>") } FileName := "title" . SubStr("000", 1, -(StrLen(A_Index))) . A_Index . ".prtl" FileAppend, % prtl, %watchfolder%\%FileName% } n:=1 TimecodesList := RegExReplace(Trim(Timecode,"`r`n"), " ", "") Loop, parse, TimecodesList, `n, `r { Timecodes = %A_LoopField% StringSplit, string, Timecodes, - varTimecode1 = % string1 varTimecode2 = % string2 StringSplit, Timecode1Array, varTimecode1, : StringSplit, Timecode2Array, varTimecode2, : Digit4: if (Timecode2Array4 < Timecode1Array4) { Timecode2Array4 += 25 Timecode2Array3 -= 1 DurationArray4 := Timecode2Array4 - Timecode1Array4 gosub, Digit3 } if (Timecode2Array4 >= Timecode1Array4) DurationArray4 := Timecode2Array4 - Timecode1Array4 Digit3: if (Timecode2Array3 < Timecode1Array3) { Timecode2Array3 += 60 Timecode2Array2 -= 1 DurationArray3 := Timecode2Array3 - Timecode1Array3 gosub, Digit2 } if (Timecode2Array3 >= Timecode1Array3) DurationArray3 := Timecode2Array3 - Timecode1Array3 Digit2: if (Timecode2Array2 < Timecode1Array2) { Timecode2Array2 += 24 Timecode2Array1 -= 1 DurationArray2 := Timecode2Array2 - Timecode1Array2 gosub, Digit1 } if (Timecode2Array2 >= Timecode1Array2) DurationArray2 := Timecode2Array2 - Timecode1Array2 Digit1: if (Timecode2Array1 < Timecode1Array1) { msgbox, Timecode2Array1 %Timecode2Array1% < Timecode1Array1 %Timecode1Array1% msgbox, The "Start" timecode cannot be less than the "End" timecode. ExitApp } if (Timecode2Array1 >= Timecode1Array1) { DurationArray1 := Timecode2Array1 - Timecode1Array1 goto, EndProcess } EndProcess: SetFormat, Float, 02.0 Loop, 4 DurationArray%A_Index% += 0.0 TitleDuration%n% = %DurationArray1%:%DurationArray2%:%DurationArray3%:%DurationArray4% StartTimecode%n% = % string1 n++ } WinActivate, Adobe Premiere Pro WinWait, Adobe Premiere Pro Send, +1^{vkBF}Subtitri^{vk49} ; create bin, ^i WinWait, Import ahk_class #32770 Send, c:{enter} Sleep 400 Send, %watchfolder%{enter} Sleep 400 Send, +{TAB 2} Sleep 400 Send, ^{vk41} Sleep 400 Send,{enter} WinWaitClose, Import ahk_class #32770 WinWait, Import Files ahk_class #32770, , 0.6 WinWaitClose, Import Files ahk_class #32770 Sleep, 300 i := n - 1 Send, {up %i%} loop % n - 1 { TitleDuration := TitleDuration%A_Index% StartTimecode := StartTimecode%A_Index% Send, {down}+4{TAB}%StartTimecode%{Enter} Sleep, 200 Send, +1^{vk52} ; Ctrl+R WinWait, Clip Speed / Duration Send, {TAB}%TitleDuration%{Enter} WinWaitClose, Clip Speed / Duration Send, {vkBE} ; . Sleep, 200 } Msgbox, Done exit SymbCount(ByRef string, symb) { count := 0 loop, Parse, string (A_LoopField == symb) && ++count return count } RegExSplit(ByRef in, delim = "") { pos := 0, start := 1, Obj := [] while, pos := RegExMatch(in, delim, match, start) Obj.Insert(SubStr(in, start, pos - start)), start := pos + StrLen(match) Obj.Insert(SubStr(in, start)) return Obj } HookProc(hWinEventHook, event, hwnd, idObject, idChild, dwEventThread, dwmsEventTime) { WinGetActiveTitle, Title if (Title = "Save Project") { MsgBox, ERROR! Turn off Autosave. ExitApp } } SetWinEventHook(eventMin, eventMax, hmodWinEventProc, lpfnWinEventProc, idProcess, idThread, dwFlags) { return DllCall("SetWinEventHook" , UInt, eventMin , UInt, eventMax , Ptr, hmodWinEventProc , Ptr, lpfnWinEventProc , UInt, idProcess , UInt, idThread , UInt, dwFlags) }
Сообщение отредактировано Malcev: 06 Nov 2012 - 22:30
#44
Отправлено 06 Nov 2012 - 02:40
Сообщение отредактировано Muhin: 06 Nov 2012 - 02:47
#45
Отправлено 06 Nov 2012 - 05:17
Ну во-первых я не программист, а так балуюсь.немного не понимаю, почему такая привязка для аутохоткей, а не на маломальски программерском языке,
Там возьму, тут приплюсую, на форумах помогут...
Во-вторых все мои нужды касаются только автоматизации (сгон на фтп, архив, ютуб, имейл) и изменении "под себя" тех вещей, которые в премьере не устраивают.
А вот в этом Автохотки любому серьезному языку программирования фору даст.
Например во втором варианте скрипта расстановка титров по таймкодам происходит именно в премьере - шорткатами+вставкой значений из переменных..
Не так быстро, конечно, 1000 титров - 20 минут. Но быстрее, пожалуй, нельзя.
ЗЫ Код чутка подправил - вставил хук на проверку появления окна автосейва (Thanks teadrinker)
Сообщение отредактировано Malcev: 06 Nov 2012 - 22:34
#46
Отправлено 06 Nov 2012 - 15:17
#47
Отправлено 07 Nov 2012 - 07:57
Вот вариант, который создает edl-ку
Text = E:\subtitri.txt ; заменить на файл с субтитрами в кодировке UTF-8 watchfolder = E:\TITRI\ ; заменить на истинный путь к папке с будущими файлами титров (после запуска скрипта эта директория стирается и заново создается) prtlPath = E:\TITRI_DO_NOT_DELETE\ ; заменить на истинный путь к исходным файлам (шаблону), для одной строки должно быть название "1.ptrl" , для двух "2.ptrl" и т.д. EDL = E:\1.edl ; заменить на путь к будущей edl (после запуска скрипта эта edl стирается и заново создается) SetBatchLines, -1 FileEncoding, UTF-16 FileRemoveDir, %watchfolder%, 1 FileCreateDir, %watchfolder% FileRead, str, %Text% string := RegExReplace(Trim(str,"`r`n"), "\R[\R\s]+", "`n`n") SubStrList := RegExSplit(string, "S)\n\n") for index, substring in SubStrList string%A_Index% := substring, Lines%A_Index% := SymbCount(substring, "`n")+1 n := SubStrList.MaxIndex() Loop % n { String := string%A_Index% k := Lines%A_Index% - 1 FileRead, prtl, %prtlPath%\%k%.prtl XPos := 0 Loop, parse, String, `n, `r { if (A_Index = 1) { Timecode .= A_LoopField "`n" Continue } if (A_LoopField = "") Continue StrLength := StrLen(A_LoopField ) + 1 XPos := RegExMatch(prtl, "<XPos>", "", XPos + 1) prtl := RegExReplace(prtl, "<CharacterAttributes RunCount="".*?""" , "<CharacterAttributes RunCount=""" StrLength """" , "", 1, XPos - 1) StringReplace, LoopField, A_LoopField, &, &, 1 if (k > 1) { k:=k-1 prtl := RegExReplace(prtl, "<TRString TXMarker=""Booyah"">.*?</TRString>" , "<TRString TXMarker=""Booyah"">" LoopField "</TRString>" , "", 1, XPos - 1) } Else prtl := RegExReplace(prtl, "<TRString>.*?</TRString>" , "<TRString>" LoopField "</TRString>") } FileName := "title" . SubStr("000", 1, -(StrLen(A_Index))) . A_Index . ".prtl" FileAppend, % prtl, %watchfolder%\%FileName% } n:=1 TimecodesList := RegExReplace(Trim(Timecode,"`r`n"), " ", "") Loop, parse, TimecodesList, `n, `r { Timecodes = %A_LoopField% StringSplit, string, Timecodes, - varTimecode1 = % string1 varTimecode2 = % string2 StringSplit, Timecode1Array, varTimecode1, : StringSplit, Timecode2Array, varTimecode2, : Digit4: if (Timecode2Array4 < Timecode1Array4) { Timecode2Array4 += 25 Timecode2Array3 -= 1 DurationArray4 := Timecode2Array4 - Timecode1Array4 gosub, Digit3 } if (Timecode2Array4 >= Timecode1Array4) DurationArray4 := Timecode2Array4 - Timecode1Array4 Digit3: if (Timecode2Array3 < Timecode1Array3) { Timecode2Array3 += 60 Timecode2Array2 -= 1 DurationArray3 := Timecode2Array3 - Timecode1Array3 gosub, Digit2 } if (Timecode2Array3 >= Timecode1Array3) DurationArray3 := Timecode2Array3 - Timecode1Array3 Digit2: if (Timecode2Array2 < Timecode1Array2) { Timecode2Array2 += 24 Timecode2Array1 -= 1 DurationArray2 := Timecode2Array2 - Timecode1Array2 gosub, Digit1 } if (Timecode2Array2 >= Timecode1Array2) DurationArray2 := Timecode2Array2 - Timecode1Array2 Digit1: if (Timecode2Array1 < Timecode1Array1) { msgbox, Timecode2Array1 %Timecode2Array1% < Timecode1Array1 %Timecode1Array1% msgbox, The "Start" timecode cannot be less than the "End" timecode. ExitApp } if (Timecode2Array1 >= Timecode1Array1) { DurationArray1 := Timecode2Array1 - Timecode1Array1 + 1 goto, EndProcess } EndProcess: SetFormat, Float, 02.0 Loop, 4 DurationArray%A_Index% += 0.0 TitleDuration%n% = %DurationArray1%:%DurationArray2%:%DurationArray3%:%DurationArray4% StartTimecode%n% = % string1 EndTimecode%n% = % string2 n++ } EDLvar = TITLE: Sequence 01`n`n Var = 000 SetFormat, float, 03.0 loop % n - 1 { StartTimecode := StartTimecode%A_Index% EndTimecode := EndTimecode%A_Index% TitleDuration := TitleDuration%A_Index% TitleName := "title" . SubStr("000", 1, -(StrLen(A_Index))) . A_Index . ".prtl" Var += 1.0 EDLvar .= Var " AX V C 01:00:00:00 " TitleDuration " " StartTimecode " " EndTimecode "`n* FROM CLIP NAME: " TitleName "`n`n" } FileDelete, %EDL% FileAppend, % EDLvar, %EDL%, UTF-8 Msgbox, Done ExitApp SymbCount(ByRef string, symb) { count := 0 loop, Parse, string (A_LoopField == symb) && ++count return count } RegExSplit(ByRef in, delim = "") { pos := 0, start := 1, Obj := [] while, pos := RegExMatch(in, delim, match, start) Obj.Insert(SubStr(in, start, pos - start)), start := pos + StrLen(match) Obj.Insert(SubStr(in, start)) return Obj }
Сообщение отредактировано Malcev: 07 Nov 2012 - 07:59
#48
Отправлено 07 Nov 2012 - 14:07
И там уже обсуждать конкретные приёмы ускорения работы. Да и смежные темы, например автоматизация субтитрования.
#49
Отправлено 08 Nov 2012 - 00:02
Так как на данный момент я считаю, что мой скрипт оптимальный из всех существующих.
А их-то всего 2. Через плагин к афтеру, что в принципе через ж.... Или через eztitles за 240 евро.
Который тоже имхо неудобен, да и через-чур дорог.
А в моем скрипте можно обрабатывать любые варианты субтитров.
Изменяешь знак делиметра и будет делить по-новому.
#50
Отправлено 12 Dec 2012 - 12:40
кстати тут вспомнилось что фаб в кооперации с деклинком умеет выгонять субтитры на бету на лету - только нужно 2 беты
Anatoliy A. Vorobey (sparrow)
а вот еще есть отличная прога lemony subtitle - она экспортирует субтитры в fcp xml - вроде тебе как раз то что надо. Да тот же фаб то же для fcp делает экспорт.
"Продолжаем разговор" (с) Карлсон
Наверное я чего то не понимаю или не знаю...
Решил "добить субтитрование" в FCP 7.03 через импорт XML.
1)FAB Subtitler 7.01d конвертирует субтитры *.srt в *.xml, но ему для "примера" нужен "опорный" *.xml полученный из текстового генератора FCP.
Вот здесь засада- у FCP несколько вариантов текстовых генераторов с расширенными настройками, но FAB Subtitler понимает XMLтолько из генератора ТЕХТ, самого простого, и субы получаются одноцветные, без "оконтовки" и сливаются с изображением.
2)Lemony Pro 4- так же может конвертировать субтитры в XML для FCP в двух вариантах- как текст, либо с графикой, но FCP при импорте выдает ошибку.
3)Subtitle Edit- конвертит в BDN XML\PNG- FCP его XML вообще не понимает и пишет, что данный XML нуждается в переводе.
4)Было опробованно множество вариантов и программ пока не натолкнулся на немецкую Annotation_Edit.1.9.26.1.
Ну, просто сказка и к стати, что надо отметить- она рекомендует установить свой собственный генератор в FCP, на основе его сделать "опорный" XML со всеми красивостями и позиционированием, и прекрасно выполняет экспорт. По скольку это демо версия, получается XML с 15 субтитрами, найденные в инете версии при установке пишут, что срок действия этой версии истек и я не смогу сохранять результат и экспортировать в другие форматы. Таблетка, которая прилагается, и которая утверждает, что будет работать со всеми версиями, у меня не не помогла.
Хотелось бы прояснить ситуацию с так называемыми "штатными" средствами. То, что FAB Subtitler понимает XML только из самого простого текстового генератора- это баг или фича?
Подскажите\научите\ткните, что должно быть в XML что бы он открылся FCP?
0 человек читают эту тему
0 пользователей, 0 гостей, 0 скрытых пользователей