Предыдущая тема
::
Следующая тема
|
Автор |
Сообщение |
furyx Гость
|
Добавлено: Чт Ноя 19, 2009 16:50 pm |
|
|
RussianNeuroMancer
git://greg.geekmind.org/libass.git
ну и сами сорцы mplayer с которых он собирает (а так понимаю тут все патчи включены)
http://repo.or.cz/w/mplayer.git
правда win64 пока с места не двинулся...
Цитата: |
FFmpeg:
* Updated ASM code shared with x264 and other NASM code to support Win64. Maybe I should try making a 64bit build again… |
|
|
|
|
К началу |
|
Shitsu Гость
|
Добавлено: Вс Дек 20, 2009 4:35 am |
|
|
а как бы сделать, чтоб субтитры из ./subtitles подгружались, как в вобсабе? |
|
|
|
К началу |
|
furyx Гость
|
Добавлено: Вс Дек 20, 2009 5:03 am |
|
|
Shitsu
насколько я помню, уже никак, в старых билдах было, возможно патчем каким можно. убрали с целью безопастности на сколько я помню. мплеер ведь не только с локального диска читать умеет ;)
ну а если честно, то не совсем понятно зачем...
- размер сабов довольно таки маленький - можно и скорировать если не хочется ссылки делать.
- если уж ложить сабы в отдельный каталог, то я лично как правило у себя еще один уровень вложенности с разными авторами делаю.
- в конце концов сделайте батник (или в ассоциации пропишите)
Код: | "%ProgramFiles%\mplayer\mplayer.exe" "%~f1" -sub "%~d1%~p1subtitles\%~n1.ass" |
ну и т.д, при желании можно много вариантов придумать. |
|
|
|
К началу |
|
Shitsu Гость
|
Добавлено: Вс Дек 20, 2009 6:01 am |
|
|
furyx
Мне нравится, когда субтитры лежат в своей папке. так они не мешаются под мышкой при просмотре, и содержимое папки выглядит красивее.
И с разными авторами удобней - просто переименовываешь нужную папку в subtitles и смотришь. Ничего копировать, выделять не надо.
Цитата: | убрали с целью безопастности |
а как же они убрали? там же надо всего лишь где-нибудь путь подправить вроде %~p1\%~n1.ass на %~p1subtitles\%~n1.ass, только знать бы где |
|
|
|
К началу |
|
Ё
Переводы
Зарегистрирован: 28.04.2004 Сообщения: 84 Откуда: Санкт-Петербург, Россия
|
Добавлено: Вс Дек 20, 2009 11:13 am |
|
|
Shitsu
Представляю папку с тысячами файлов :) Причём все названы как видео, т.е. как получится. Если запастись терпением и удалять все субтитры при удалении видео, ну, может быть это и оправдано, но всё равно, мне кажется хранение их в отдельной папке делом странным. Уж лучше тогда миксить в матроску, времени столько же уйдёт, а порядка больше.
Подправить это можно запросто, наверняка этот код живёт прямо в mplayer.c и найти его не трудно. Потом сделать патч и пользоваться им при каждом обновлении.
По поводу безопасности - представьте себе чайника, который запускается от root. Таких миллионы. И потому и убрали :) |
|
|
|
К началу |
|
Shitsu Гость
|
Добавлено: Вс Дек 20, 2009 15:28 pm |
|
|
Ё
Вы, наверное, не совсем правильно меня поняли. Субтитры лежат во вложенной папке для каждой анимы отдельно:
Код: | +Аниме
|+subtitles
||-эпизод 01.srt
||-эпизод 02.srt
||-эпизод 03.srt
|-эпизод 01.avi
|-эпизод 02.avi
|-эпизод 03.avi
|
никакой разницы в идеологии хранения, кроме того, что выглядит это красивше (на мой взгляд). Если засунуть в матрёшку, то их нельзя будет править на ходу.
и кстати
это матроска
а это матрёшка
это тоже матрёшка |
|
|
|
К началу |
|
Ё
Переводы
Зарегистрирован: 28.04.2004 Сообщения: 84 Откуда: Санкт-Петербург, Россия
|
Добавлено: Вс Дек 20, 2009 15:35 pm |
|
|
Если всегда называется каталог subtitles, можно вообще хардкоднуть это в мплеер. Жёстко, но если все субтитры лежат именно так, то действенно.
Matroska, инглишкопипаста :) |
|
|
|
К началу |
|
Shitsu Гость
|
Добавлено: Вс Дек 20, 2009 17:26 pm |
|
|
процедуру поиска субтитров нашел в subreader.c. вот она:
Код: | char** sub_filenames(const char* path, char *fname)
{
char *f_dir, *f_fname, *f_fname_noext, *f_fname_trim, *tmp, *tmp_sub_id;
char *tmp_fname_noext, *tmp_fname_trim, *tmp_fname_ext, *tmpresult;
int len, pos, found, i, j;
char * sub_exts[] = { "utf", "utf8", "utf-8", "sub", "srt", "smi", "rt", "txt", "ssa", "aqt", "jss", "js", "ass", NULL};
subfn *result;
char **result2;
int subcnt;
FILE *f;
DIR *d;
struct dirent *de;
len = (strlen(fname) > 256 ? strlen(fname) : 256)
+(strlen(path) > 256 ? strlen(path) : 256)+2;
f_dir = malloc(len);
f_fname = malloc(len);
f_fname_noext = malloc(len);
f_fname_trim = malloc(len);
tmp_fname_noext = malloc(len);
tmp_fname_trim = malloc(len);
tmp_fname_ext = malloc(len);
tmpresult = malloc(len);
result = malloc(sizeof(subfn)*MAX_SUBTITLE_FILES);
memset(result, 0, sizeof(subfn)*MAX_SUBTITLE_FILES);
subcnt = 0;
tmp = strrchr(fname,'/');
#if defined(__MINGW32__) || defined(__CYGWIN__) || defined(__OS2__)
if(!tmp)tmp = strrchr(fname,'\\');
if(!tmp)tmp = strrchr(fname,':');
#endif
// extract filename & dirname from fname
if (tmp) {
strcpy(f_fname, tmp+1);
pos = tmp - fname;
strncpy(f_dir, fname, pos+1);
f_dir[pos+1] = 0;
} else {
strcpy(f_fname, fname);
strcpy(f_dir, "./");
}
strcpy_strip_ext(f_fname_noext, f_fname);
strcpy_trim(f_fname_trim, f_fname_noext);
tmp_sub_id = NULL;
if (dvdsub_lang && !whiteonly(dvdsub_lang)) {
tmp_sub_id = malloc(strlen(dvdsub_lang)+1);
strcpy_trim(tmp_sub_id, dvdsub_lang);
}
// 0 = nothing
// 1 = any subtitle file
// 2 = any sub file containing movie name
// 3 = sub file containing movie name and the lang extension
for (j = 0; j <= 1; j++) {
d = opendir(j == 0 ? f_dir : path);
if (d) {
while ((de = readdir(d))) {
// retrieve various parts of the filename
strcpy_strip_ext(tmp_fname_noext, de->d_name);
strcpy_get_ext(tmp_fname_ext, de->d_name);
strcpy_trim(tmp_fname_trim, tmp_fname_noext);
// does it end with a subtitle extension?
found = 0;
#ifdef CONFIG_ICONV
#ifdef CONFIG_ENCA
for (i = ((sub_cp && strncasecmp(sub_cp, "enca", 4) != 0) ? 3 : 0); sub_exts[i]; i++) {
#else
for (i = (sub_cp ? 3 : 0); sub_exts[i]; i++) {
#endif
#else
for (i = 0; sub_exts[i]; i++) {
#endif
if (strcasecmp(sub_exts[i], tmp_fname_ext) == 0) {
found = 1;
break;
}
}
// we have a (likely) subtitle file
if (found) {
int prio = 0;
if (!prio && tmp_sub_id)
{
sprintf(tmpresult, "%s %s", f_fname_trim, tmp_sub_id);
mp_msg(MSGT_SUBREADER,MSGL_INFO,"dvdsublang...%s\n", tmpresult);
if (strcmp(tmp_fname_trim, tmpresult) == 0 && sub_match_fuzziness >= 1) {
// matches the movie name + lang extension
prio = 5;
}
}
if (!prio && strcmp(tmp_fname_trim, f_fname_trim) == 0) {
// matches the movie name
prio = 4;
}
if (!prio && (tmp = strstr(tmp_fname_trim, f_fname_trim)) && (sub_match_fuzziness >= 1)) {
// contains the movie name
tmp += strlen(f_fname_trim);
if (tmp_sub_id && strstr(tmp, tmp_sub_id)) {
// with sub_id specified prefer localized subtitles
prio = 3;
} else if ((tmp_sub_id == NULL) && whiteonly(tmp)) {
// without sub_id prefer "plain" name
prio = 3;
} else {
// with no localized subs found, try any else instead
prio = 2;
}
}
if (!prio) {
// doesn't contain the movie name
// don't try in the mplayer subtitle directory
if ((j == 0) && (sub_match_fuzziness >= 2)) {
prio = 1;
}
}
if (prio) {
prio += prio;
#ifdef CONFIG_ICONV
if (i<3){ // prefer UTF-8 coded
prio++;
}
#endif
sprintf(tmpresult, "%s%s", j == 0 ? f_dir : path, de->d_name);
// fprintf(stderr, "%s priority %d\n", tmpresult, prio);
if ((f = fopen(tmpresult, "rt"))) {
fclose(f);
result[subcnt].priority = prio;
result[subcnt].fname = strdup(tmpresult);
subcnt++;
}
}
}
if (subcnt >= MAX_SUBTITLE_FILES) break;
}
closedir(d);
}
}
if (tmp_sub_id) free(tmp_sub_id);
free(f_dir);
free(f_fname);
free(f_fname_noext);
free(f_fname_trim);
free(tmp_fname_noext);
free(tmp_fname_trim);
free(tmp_fname_ext);
free(tmpresult);
qsort(result, subcnt, sizeof(subfn), compare_sub_priority);
result2 = malloc(sizeof(char*)*(subcnt+1));
memset(result2, 0, sizeof(char*)*(subcnt+1));
for (i = 0; i < subcnt; i++) {
result2[i] = result[i].fname;
}
result2[subcnt] = NULL;
free(result);
return result2;
} |
f_dir -папка с файлом
path - путь к субтитрам мплеера (/home/username/.mplayer/sub/ по умолчанию)
подправить то я подправил, но не работает почемут
правка следующая:
Код: | strcpy(f_subtitles,f_dir);
strcat(f_subtitles,"subtitles/");
// 0 = nothing
// 1 = any subtitle file
// 2 = any sub file containing movie name
// 3 = sub file containing movie name and the lang extension
for (j = 0; j <= 2; j++) {
if (j==0) d = opendir(f_dir);
if (j==1) d = opendir(path);
if (j==2) d = opendir(f_subtitles);
if (d) { |
путь получается правильный
Код: | SUBtiiles: /media/hard/HARD/Видео/Аниме/!RAW/[Zero-Raws] Himawari! - 01-13+clean OP&ED [704x396 DivX6.11 DVD]/subtitles/
Fdir: /media/hard/HARD/Видео/Аниме/!RAW/[Zero-Raws] Himawari! - 01-13+clean OP&ED [704x396 DivX6.11 DVD]/
path: /home/cepera/.mplayer/sub/ |
из первых двух открывает, из моей - нет
возможно где-то как раз есть проверка "с целью безопасности" |
|
|
|
К началу |
|
Ё
Переводы
Зарегистрирован: 28.04.2004 Сообщения: 84 Откуда: Санкт-Петербург, Россия
|
Добавлено: Вс Дек 20, 2009 17:48 pm |
|
|
Не понял, как именно не открывает? Если открывает из ./subtitles/, не этого ли хотелось?
Попробовать можно ещё поотлаживаться printf-ами, я не так хорошо умею пользоваться gdb в консоли, так что другого не посоветую. |
|
|
|
К началу |
|
Shitsu Гость
|
Добавлено: Вс Дек 20, 2009 18:03 pm |
|
|
я неправильно скопипастил
Fdir: /media/hard/HARD/Видео/Аниме/!RAW/[Zero-Raws] Himawari! - 01-13+clean OP&ED [704x396 DivX6.11 DVD]/
path: /home/cepera/.mplayer/sub/
открывает, а
SUBtiiles: /media/hard/HARD/Видео/Аниме/!RAW/[Zero-Raws] Himawari! - 01-13+clean OP&ED [704x396 DivX6.11 DVD]/subtitles/
нет. просто в цикле у меня эта строчка третья
для отладки там есть mp_msg() |
|
|
|
К началу |
|
Ё
Переводы
Зарегистрирован: 28.04.2004 Сообщения: 84 Откуда: Санкт-Петербург, Россия
|
Добавлено: Вс Дек 20, 2009 18:10 pm |
|
|
А если покрутить потоки, понажимать j, там не появляется ничего? |
|
|
|
К началу |
|
furyx Гость
|
Добавлено: Вс Дек 20, 2009 18:39 pm |
|
|
Shitsu
всетаки не понимаю, чем не устраивает вариант прописать в ассоциации команду брать сабы с подкаталога?
ЗЫ приведите исправленную ф-цию полностью. |
|
|
|
К началу |
|
Ё
Переводы
Зарегистрирован: 28.04.2004 Сообщения: 84 Откуда: Санкт-Петербург, Россия
|
Добавлено: Вс Дек 20, 2009 18:45 pm |
|
|
От себя добавлю - функцию через pastebin.com . Смотрится кодом на форуме просто нечитаемо. |
|
|
|
К началу |
|
Shitsu Гость
|
Добавлено: Вс Дек 20, 2009 19:21 pm |
|
|
исправлено http://pastebin.com/m9e36131
вызывается так
http://pastebin.com/m5d7f019d
get_path( "sub/" ); -возвращает путь к /home/cepera/.mplayer/sub/
add_subtitles (tmp{i], fps, 1); -добавляет дорожку субтитров, выдает сообщение вроде SUB: Added subtitle file (1): /home/cepera/.mplayer/sub/[Zero-Raws] Himawari! - 01 [704x396 DivX6.11 DVD].ass
Последний раз редактировалось: Вс Дек 20, 2009 19:38 pm |
|
|
|
К началу |
|
Ё
Переводы
Зарегистрирован: 28.04.2004 Сообщения: 84 Откуда: Санкт-Петербург, Россия
|
Добавлено: Вс Дек 20, 2009 19:25 pm |
|
|
Должно работать, вроде бы. Только я сомневаюсь, что в Си можно так просто прибавить строку, всегда делалось это через strcat. |
|
|
|
К началу |
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы можете скачивать файлы, прикрепленные к сообщениям
|
‹ xЪmђНЉВ0…Чж).YМОF™Б…¦YёqгВБ’66…Ъ†4X*>ќO2ГЂЉ?O ·Љ+»№зтО…{ 8уNњReZВгt2K“<¤‘ОЅvTрТКўL–%ВВЦ.MЊG®0БYcЈ`Rґе[’dVTЪйT
CаЊУ‹ђпнђ±ЄЄk¬RAT,/]ў}H°нг1gRАGCG°ЃнепxГгЅ ?шъј"™O»яїзЛйzЪЎС ›¬S‹ыvИлѓ§t:XJЊъЦSE\7Дшe†аЅTE |