 |
|
Текущее время: 23 июл 2025, 11:08
|
Сообщения без ответов | Активные темы
|
Страница 1 из 1
|
[ Сообщений: 12 ] |
|
Cowon d2+/d2 +linux ubuntu
Cowon d2+/d2 +linux ubuntu
Автор |
Сообщение |
Sergey+я
Зарегистрирован: 28 ноя 2009, 12:01 Сообщения: 21 Благодарил(а): раз. Поблагодарили: раз. Плеер: D2+2.11 Наушники: iaudio
|
 Cowon d2+/d2 +linux ubuntu
Кто чем конвертирует и в какой формат.Подскажите.
Кто чем конвертирует и в какой формат.Подскажите.
_________________ Интернет - это инструмент для мозга. Вроде молотка. Одни люди, если дать им молоток, могут с помощью него сделать что-нибудь позитивное, а другие начинают бегать по улицам и бить по головам мирных граждан.[size=50][size=200]
|
08 май 2010, 11:33 |
|
 |
bdwind
Модератор
Зарегистрирован: 01 фев 2009, 11:43 Сообщения: 4508 Откуда: fairyland Благодарил(а): раз. Поблагодарили: раз. Плеер: FiiO X5 Наушники: UM Merlin
|
 Re: Cowon d2+/d2 +linux ubuntu
Ну если wine то вообще вариантов масса... xDDD
Ну если wine то вообще вариантов масса... xDDD
_________________ Лучше иметь храброе сердце и страдать от зла других, чем бояться того, что может случиться... Хорошие художники копируют - великие художники воруют...
|
08 май 2010, 12:14 |
|
 |
Sergey+я
Зарегистрирован: 28 ноя 2009, 12:01 Сообщения: 21 Благодарил(а): раз. Поблагодарили: раз. Плеер: D2+2.11 Наушники: iaudio
|
 Re: Cowon d2+/d2 +linux ubuntu
директ икс не пашет(((
директ икс не пашет(((
_________________ Интернет - это инструмент для мозга. Вроде молотка. Одни люди, если дать им молоток, могут с помощью него сделать что-нибудь позитивное, а другие начинают бегать по улицам и бить по головам мирных граждан.[size=50][size=200]
|
08 май 2010, 12:15 |
|
 |
Дмитрий
Зарегистрирован: 03 фев 2009, 18:12 Сообщения: 227 Откуда: Минск Благодарил(а): раз. Поблагодарили: раз. Плеер: Cowon D2 | FW: 2.59 Наушники: Sennheiser CX300 II
|
 Re: Cowon d2+/d2 +linux ubuntu
А скинуть его либы из винды в вайн не пробовали?
А скинуть его либы из винды в вайн не пробовали?
_________________ COWON D2 8Gb black | FW:D2 2.59 Sennheiser CX300 II, Sennheiser eH250
|
08 май 2010, 12:35 |
|
 |
bdwind
Модератор
Зарегистрирован: 01 фев 2009, 11:43 Сообщения: 4508 Откуда: fairyland Благодарил(а): раз. Поблагодарили: раз. Плеер: FiiO X5 Наушники: UM Merlin
|
 Re: Cowon d2+/d2 +linux ubuntu
А поставить директ для линукса не пробывали?
А поставить директ для линукса не пробывали?
_________________ Лучше иметь храброе сердце и страдать от зла других, чем бояться того, что может случиться... Хорошие художники копируют - великие художники воруют...
|
08 май 2010, 12:52 |
|
 |
Sergey+я
Зарегистрирован: 28 ноя 2009, 12:01 Сообщения: 21 Благодарил(а): раз. Поблагодарили: раз. Плеер: D2+2.11 Наушники: iaudio
|
 Re: Cowon d2+/d2 +linux ubuntu
пробывали игры пашут а транскодеры не пашут
пробывали игры пашут а транскодеры не пашут
_________________ Интернет - это инструмент для мозга. Вроде молотка. Одни люди, если дать им молоток, могут с помощью него сделать что-нибудь позитивное, а другие начинают бегать по улицам и бить по головам мирных граждан.[size=50][size=200]
|
10 май 2010, 12:29 |
|
 |
burton-fzz
Зарегистрирован: 02 фев 2009, 01:29 Сообщения: 1116 Откуда: Moscow 17 Благодарил(а): раз. Поблагодарили: раз. Плеер: cowon X7, FIIO X3 Наушники: PSB Speakers M4U2
|
 Re: Cowon d2+/d2 +linux ubuntu
а зачем вам джетаудио? там же можно поставить какой нить кодер и просто скодировать в 320х240 без b-frame и по идее должно читаться, зачем извращаться с wine?
а зачем вам джетаудио? там же можно поставить какой нить кодер и просто скодировать в 320х240 без b-frame и по идее должно читаться, зачем извращаться с wine?
_________________ Eat paint! PSB Speakers M4U2 cowon x7 - чтоб его...
|
10 май 2010, 12:37 |
|
 |
bdwind
Модератор
Зарегистрирован: 01 фев 2009, 11:43 Сообщения: 4508 Откуда: fairyland Благодарил(а): раз. Поблагодарили: раз. Плеер: FiiO X5 Наушники: UM Merlin
|
 Re: Cowon d2+/d2 +linux ubuntu
Вообще не понимаю... Читайте маны по менкодеру... + тут даже кто-то скрипты выкладывал, если поискать...
Вообще не понимаю... Читайте маны по менкодеру... + тут даже кто-то скрипты выкладывал, если поискать...
_________________ Лучше иметь храброе сердце и страдать от зла других, чем бояться того, что может случиться... Хорошие художники копируют - великие художники воруют...
|
10 май 2010, 12:50 |
|
 |
ASLok
Зарегистрирован: 27 май 2010, 11:58 Сообщения: 1 Благодарил(а): раз. Поблагодарили: раз. Плеер: Cowon D2+ Наушники: PX 100
|
 Re: Cowon d2+/d2 +linux ubuntu
Я кодирую с AVIDemux но можно и для ffmpeg написать команду, там не сложно.
Я кодирую с AVIDemux но можно и для ffmpeg написать команду, там не сложно.
|
27 май 2010, 13:58 |
|
 |
butsan
Зарегистрирован: 11 мар 2010, 07:40 Сообщения: 58 Откуда: Spb Благодарил(а): раз. Поблагодарили: раз. Плеер: Cowon d2+ 8gb Наушники: SHP
|
 Re: Cowon d2+/d2 +linux ubuntu
vlc, mencoder, audacity Добавлено спустя 1 минуту 3 секунды:а для плеера я не конвертирую  рокбокс все и так играет вроде Добавлено спустя 1 минуту 20 секунд:хм, я не понял, тут что, про видео? Тогда видео я вообще на нем не смотрю =) Если надо, могу скрипты для mencoder написать
vlc, mencoder, audacity
[color=green][size=80]Добавлено спустя 1 минуту 3 секунды:[/size][/color]
а для плеера я не конвертирую :%) рокбокс все и так играет вроде
[color=green][size=80]Добавлено спустя 1 минуту 20 секунд:[/size][/color]
хм, я не понял, тут что, про видео? Тогда видео я вообще на нем не смотрю =)
Если надо, могу скрипты для mencoder написать
|
27 май 2010, 17:17 |
|
 |
Den90
Супермодератор
Зарегистрирован: 03 фев 2009, 19:45 Сообщения: 4032 Откуда: Харьков Благодарил(а): раз. Поблагодарили: раз. Плеер: i9295 Наушники: Sony XBA-C10
|
 Re: Cowon d2+/d2 +linux ubuntu
Будто бы D2 не определяется без JetAudio.. И как уже сказали, берете тот же mencoder и вперёд.
Будто бы D2 не определяется без JetAudio.. И как уже сказали, берете тот же mencoder и вперёд.
|
28 май 2010, 14:40 |
|
 |
Arago
Зарегистрирован: 05 фев 2009, 19:59 Сообщения: 69 Благодарил(а): раз. Поблагодарили: раз. Плеер: D2, FW 3.59+Rockbox
|
 Re: Cowon d2+/d2 +linux ubuntu
wine - зло. Оно тебе надо, из своей системы полигон для вирусов делать? Держи, пользуйся! ^_^ Сорри, форум не даёт выложить. Короче НЯ! Код: #! /bin/bash # set -v ################################## # D2 video encoder for Linux # # mencoder, mplayer, awk, XviD # # lavcodec and bash are requied! # # Version 0.06 from 28 may 2010 # # By Arago (Arago@inbox.ru) # ##################################
# TODO: пофиксить баг с возможной пропажей саба и 5 секунд видео в середине файла при двухпоточном кодировании в мультисегментном режиме. Как - хз(( # TODO: пофиксить баг с раскраской в мультифайловом многопоточном режиме
# Инициализация { # Задание параметров кодирования, изменить при необходимости. outputwidth=320 outputheight=240 videobitrate=400 audioobitrate=128
# Задание параметров тестового кусочка по умолчанию, изменить при необходимости. ss=300 endpos=10
# Задание разричных внутренних параметров aid=1 all=* mode="XviD" # Кодировка сабов по умолчанию (если -subcp enca не сможет определить кодировку автоматически) subcp=cp1251 # Язык сабов для -subcp enca enca_sublang="ru" # Язык сабов для -slang slang="ru,rus" # Язык звука alang="jpn,ja" # Сдвиг сабов по умолчанию - не двигаем subdelay=0 # -noautoexpand - для отключения автоматического рендеринга сабов # -mc 0 - для обхода бага с Too many audio packets in the buffer params="-alang $alang -noautoexpand -mc 0 -really-quiet " # Путь для копирования готовых файлов по умолчанию default_copy_path="/media/D2/VIDEO" # Параметры скалирования изображения (по горизонтали - $outputwidth, по вертикали - согласно аспекту, округляя до +-16 пикселов) vf="-vf scale=$outputwidth:-10,harddup"
# Раскраска скрипта (код не мой!) black='\E[30m' red='\E[31m' green='\E[32m' yellow='\E[33m' blue='\E[34m' magenta='\E[35m' cyan='\E[36m' white='\E[37m' function cecho { echo -ne "$2" echo "$1" tput sgr0 } }
# Парсер командной строки { # Деинициализируем (на всякий случай) перепенную command_line - в неё будем складывать опции передаваемые рабочим процессам в пакетном режиме unset command_line # Разбор командной строки until [[ "$1" == "" ]] ; do case $1 in
-t ) if [[ "$2" == "-ss" ]]; then if [[ "$3" -gt "0" ]]; then ss=$3 cecho "" $yellow shift shift else cecho "После $2 необходимо указать целое положительное число!" $red fi fi
if [[ "$2" == "-endpos" ]]; then if [[ "$3" -gt "0" ]]; then endpos=$3 cecho "" $yellow shift shift else cecho "После $2 необходимо указать целое положительное число!" $red fi fi
cecho "Тестовый режим, кодируем кусочек в $endpos секунд начиная с $ss секунды" $yellow chunk1="-ss $ss -endpos $endpos " test="true" # Суффикс имени тестового файла testsuffix="[TEST ($chunk1) -aid $aid]" # Тест кодируем в однопоточном режиме (на всякий случай) unithread=":" command_line="$command_line -t" ;;
-aid ) if [[ "${2:0:1}" != "-" ]]; then cecho "Указана звуковая дорожка $2" $yellow aid=$2 command_line="$command_line -aid $2" fi ;;
-r ) cecho "Используется кодек mpeg2 (RockBox)!" $yellow mode="mpeg2" # Похоже что многосегментная многопоточность не работает в этом режиме, нет звука и индекса в готовом файле. Форсируем unithread mode. cecho "Задан режим Rockbox, форсированно использую однопоточный режим!" $yellow unithread=":" command_line="$command_line -r" ;;
-s ) cecho "Используется кодек XviD, оптимизация под смарты Nokia с экраном qvga (CorePlayer)!" $yellow mode="6120" command_line="$command_line -s" ;;
-p ) cecho "Задан просмотр после обработки!" $yellow play="true" command_line="$command_line -p" ;;
-c ) # Проверка, не является ли следущий параметр ключом, если нет - считать его путём для копирования выходных файлов if [[ "${2:0:1}" != "-" ]]; then if [[ -d "$2" && "-w $2" ]]; then cecho "Копирую перекодированные файлы в каталог $2!" $green copy_path="$2" copy_flag="true" elif [[ -d "$2" ]]; then cecho "Задан параметр копирования перекодированных файлов в каталог $2, но $2 недоступен для записи!" $red elif [[ -f "$2" ]]; then cecho "Задан параметр копирования перекодированных файлов в каталог $2, но $2 является файлом!" $red elif [[ ! -e "$2" ]]; then cecho "Задан параметр копирования перекодированных файлов в каталог $2, но $2 не существует!" $red fi elif [[ -d "$default_copy_path" && -w "$default_copy_path" ]]; then cecho "Копирую перекодированные файлы в каталог по умолчанию $default_copy_path!" $green copy_path="$default_copy_path" copy_flag="true" elif [[ -d "$default_copy_path" ]]; then cecho "Задан параметр копирования перекодированных файлов в каталог по умолчанию $default_copy_path, но $default_copy_path недоступен для записи!" $red elif [[ -f "$default_copy_path" ]]; then cecho "Задан параметр копирования перекодированных файлов в каталог по умолчанию $default_copy_path, но $default_copy_path является файлом!" $red elif [[ ! -e "$default_copy_path" ]]; then cecho "Задан параметр копирования перекодированных файлов в каталог по умолчанию $default_copy_path, но $default_copy_path не существует!" $red else cecho "SHIT HAPPENED!" $blue exit 1 fi ;;
-d ) cecho "Задан режим отладки!" $red debug=":" command_line="$command_line -d" ;;
-mv ) cecho "Задан параметр перещения перекодированных файлов!" $yellow move_flag="true" command_line="$command_line -mv" ;;
-u ) cecho "Использую однопоточный режим!" $yellow unithread=":" command_line="$command_line -u" ;;
-s ) cecho "Форсирую обработку субтитров!" $yellow force_subs="true" command_line="$command_line -s" ;;
-m ) cecho "Форсирую многосегментную многопоточность!" $yellow segmented_multithread="true" command_line="$command_line -m" ;;
-v ) cecho "Задан детальный режим!" $yellow verbose="true" command_lne="$command_line -v" # Убираем -really-quiet из параметров mencoder params=${params//-really-quiet /} ;;
-a ) batch="true" # Проверка, не является ли следущий параметр ключом, если нет - считать его расширением файлов для пакетной обработки if [[ "${2:0:1}" != "-" && "$2" != "1" && "$2" != "2" && ! -f "$2" && "$2" != "" ]]; then all="*.$2" cecho "Задан пакетный режим. обрабатываю файлы с расширением $2!" $red else cecho "Задан пакетный режим. обрабатываю всё подряд!" $red fi ;;
-subcp ) # Проверка, не является ли следущий параметр ключом, если нет - считать его кодировкой сабов при сбое enca if [[ "${2:0:1}" != "-" && "$2" != "1" && "$2" != "2" && ! -f "$2" && "$2" != "" ]]; then cecho "Задана кодировка субтитров $2!" $yellow subcp=$2 command_line="$command_line -subcp $2" else cecho "Ошибка в параметре -subcp - не указана кодировка, использую cp1251!" $red fi ;;
-subdelay ) # Проверка, не является ли следущий параметр ключом, если нет - считать его сдвигом сабов относительно видео (если сабы отстают от видео - положительное значение, если опережают - отрицательное). if [[ ! -f "$2" && "$2" != "" ]]; then cecho "Задана задержка субтитров в $2 секунд(ы)!" $yellow subdelay=$2 command_line="$command_line -subdelay $2" subdelay_forced=true else cecho "Ошибка в параметре -subdelay - не указана задержка!" $red fi ;;
-savesubdelay ) # Проверка сохранения задержки в файл cecho "Заданно сохранение задержки сабов!" $yellow command_line="$command_line -s" save_subdelay=true ;;
-ddfc ) # Проверка отключения коррекции грязных FPS cecho "Коррекция грязных FPS отключена!" $yellow ddfc_disable=true command_line="$command_line -ddfc" ;;
-daid ) # Проверка отключения использования -aid cecho "Использование -aid отключено!" $yellow aid_disable=true command_line="$command_line -daid" ;;
-o ) if [[ "${2:0:1}" != "-" ]]; then if [[ -d "$2" && "-w $2" ]]; then cecho "Задан выходной каталог $2/" $green outdir=$2/ export outdir elif [[ -d "$2" ]]; then cecho "Задан выходной каталогг $2, но $2 недоступен для записи!" $red elif [[ -f "$2" ]]; then cecho "Задан выходной каталог $2, но $2 является файлом!" $red elif [[ ! -e "$2" ]]; then cecho "Задан выходной каталог $2, но $2 не существует!" $red fi; shift else cecho "Не задан выходной каталог, использую значение по умолчанию!" $red fi ;;
-h ) echo 'Использование: '`basename "$0"`' [-t [-ss startseconds] [-endpos lenght]] [1|2] [-r] [-p] [-d] [-u] [-m] [-h] [-v] [-s] [-subcp codepage] [-c [/path/] [-mv]] [-o /path/] (-a [ext])|input-video где: -t - тестовый режим (кодировать кусочек в '$endpos' секунд начиная с '$ss' секунды) (test) -ss - начать тестовый кусочек с позиции startseconds от начала файла (в секундах) -endpos - длина тестового кусочка (в секундах) 1|2 - номер звуковой дорожкм (по умолчанию 1) -r - режим Rockbox (формат mpeg2) (rockbox) -p - воспроизвести после кодирования (удобно совместно с -t, но не используйте в пакетном режиме!) (play) -d - режим отладки (не запускать кодирование) (debug) -u - запретить второй поток кодирования для мультисегментного режима (unithread) (безопасно!) -v - детальный режим (не подавлять вывод mencoder, немного замедляет процесс!) (verbose) -s - форсировать обработку с субтитрами, даже если файл сабов не найден (применительно для встроенных сабов mkv или если нужна картинка 320x240) (subtitles) -a - пакетный режим (обрабатывать все файлы в текущем каталоге) (all) ext - расширение для пакетной обработки, например -a avi (по умолчанию - *) (только последний параметр -a [ext] будет обработан!) (крайне рекомендуется установить если кодируем сериал с одинаковыми по длине сериями) -m - форсировать многосегментную многопоточность для -a ext (включать желательно если кодируемые файлы сильно отличаются по длине) (multithread) (опасно!) -subcp codepage - кодировка субтитров если автоопределение не срабатывает, например -subcp UTF8 (по умолчанию - cp1251) (как для mencoder) -subdelay - установить сдвиг сабов относительно видео (если сабы отстают от видео - положительное значение, если опережают - отрицательное), например -subdelay 1.5 -savesubdelay - сохранить значение сдвига сабов в файл (после этого можно кодировать в автоматическом режиме, значение будет прочитано из файла) -ddfc - Отключить коррекцию грязных FPS (если входное видео с FPS=119.880 и неправильно кодируется) -daid - Отключить использования -aid (если нет звука при кодировании vob файлов) -o /path/ - путь для сохранения выходных файлов и логов кодировщика input-video - входной видео файл (полный путь, относительый путь или имя файла в текущем каталоге) (только последний указанный файл будет обработан!) -c [/path/] - автоматическое копирование перекодированного файла в каталог /path/ (copy) (по умолчанию - '$default_copy_path', если невозможно копировать в указанный каталог - параметр игнорируется, если каталог копирования не указан и невозможно копировать в каталог по умолчанию - параметр игнорируется) -mv - перемещать перекодированные файлы вместо копирования. Использовать имеет смысл только вместе с параметром -c. Если путь для копирования не определён - не делать ничего. -h - справка (этот текст) (help)' exit 0 ;;
* ) if [[ -f "$1" ]]; then cecho "Работаем с файлом $1" $green file=$1 fi ;; esac shift done
if [[ "$copy_flag" == "true" && "$move_flag" == "true" ]]; then cecho "Перемещаю перекодированные файлы в каталог $copy_path!" $yellow move_files="true" elif [[ "$copy_flag" != "true" && "$move_flag" == "true" ]]; then cecho "Игнорирую параметр перещения перекодированных файлов, путь для перемещения не определён!" $red # На всякий случай unset move_files fi }
# Пакетный режим { # Проверка на форсированную мультисегментность и пакетный режим с указанием расширения (иначе под раздачу в один поток может попасть саб и видяшка, что приведёт фактически к однопоточному кодированию) if [[ "$batch" == "true" && "$all" != "*" && "$segmented_multithread" == "" ]]; then cecho "Использую мультифайловую многопоточность!" $green for i in $all; do if [[ "$first" == "" ]]; then # Если переменная $first не задана - запоминаем в неё имя первого потока и продолжаем обход first="$i" continue else # А иначе - инициируем запуск двух потоков одновременно в режиме unithread second="$i" if [[ "$copy_flag" == "true" ]] ; then # sleep 5; надо чтобы обойти проблему состояния гонки при многопоточности (создание каталога Recoded например, когда при проверке его ещё не было, а в момент создания он уже есть, что приводит к ошибке создания и сбою, в результате чего второй поток при первом заходе гадит в ~) и при выводе сообщений на экран ($0 "$first" $command_line -u -c "$copy_path") & (sleep 5; $0 "$second" $command_line -u -c "$copy_path") else ($0 "$first" $command_line -u) & (sleep 5; $0 "$second" $command_line -u) fi # И дожидаемся их завершения (если длинна паралельно обрабатываемых кусков разная будет ожидание более длинного перед продолжением). # А затем чистим внутренние переменные unset first unset second # И уходим на следущий заход fi done # Если переменная $first не пуста - значит файлов было нечётное количество, обрабатываем последний файл (можно и без -u - будет быстрее но посередине может вывалиться кусок) if [[ "$first" != "" ]]; then if [[ "$copy_flag" == "true" ]] ; then $0 "$first" $command_line -u -c "$copy_path" else $0 "$first" $command_line -u fi fi exit 0 # Проверка на пакетный режим elif [[ "$batch" == "true" ]]; then if [[ "$unithread" == ":" ]]; then cecho "Многопоточность не используется!" $red else cecho "Использую многосегментную многопоточность!" $yellow fi for i in $all do if [[ "$copy_flag" == "true" ]] ; then $0 "$first" $command_line -c "$copy_path" else $0 "$first" $command_line fi done exit 0 fi }
# Всякие проверки { # Проверка, задан ли файл для обработки if [[ "$file" == "" ]]; then cecho "Не задан файл для работы!" $red exit 1 fi
# Получение пути к файлу, имени файла и его расширения temp=${file/*\//} sourcedir=${file::$((${#file}-${#temp}))} ext=${temp/*./.} sourcefilename=${temp::$((${#temp}-${#ext}))} # Если скрипт вызван без пути к файлу - считать что файл находится в текущем каталоге if [[ "$sourcedir" == "" ]] then sourcedir="`pwd`/" fi
# Определяем, куда складывать выходные файлы if [[ -d "$outdir" && -w "$outdir" ]] then cecho "Будем складывать выходные файлы в каталог $outdir" $green elif [[ -d "$sourcedir"Recoded && -w "$sourcedir"Recoded ]] then cecho "Каталог ${sourcedir}Recoded найден - будем складывать выходные файлы в него" $green outdir="$sourcedir"Recoded/ elif [[ -d "$sourcedir"Recoded && -d ~ && -w ~ ]] then cecho "Каталог ${sourcedir}Recoded найден, но недоступен для записи - будем складывать выходные файлы в ~/" $yellow outdir=~/ elif mkdir ${sourcedir}Recoded&>/dev/null then cecho "Создан каталог ${sourcedir}Recoded" $green outdir="$sourcedir"Recoded/ elif [[ -d ~ && -w ~ ]] then cecho "Создание ${sourcedir}Recoded провалено, будем складывать выходные файлы в ~/" $yellow outdir=~/ else cecho "Не знаю куда складывать выходные файлы, аварийное завершение" $red exit 1 fi
# Сокращения для имён файлов source=$sourcedir$sourcefilename$ext out=$outdir$sourcefilename$ext$testsuffix }
# Получение информации об исходном файле { # Идентификация файла IDENTIFY=`mplayer -frames 0 -ao null -vo null -identify "$source" 2>/dev/null` # Получение длительности входного файла (для двухпоточного режима) ID_LENGTH=`echo "$IDENTIFY"|awk -F '=' '/ID_LENGTH/ {print $2}'` # Получение имён внешних файлов субтитров (по одному на строку) ID_FILE_SUB_FILENAME=`echo "$IDENTIFY"|awk -F '=' '/ID_FILE_SUB_FILENAME/ {print $2}'` # Получение номеров внутренних дорожек субтитров (по одному на строку) ID_SUBTITLE_ID=`echo "$IDENTIFY"|awk -F '=' '/ID_SUBTITLE_ID/ {print $2}'` # Получение языков внутренних дорожек субтитров (по одному на строку) ID_SID_=`echo "$IDENTIFY"|awk -F '=' '/ID_SID_/ {print $2}'` # Получение частоты кадров (во избежание грязных хаков типа varable fps с fps=119.880 и всех радостей связанных с этим тиапа ускорения видео и недокодированных файлов) ID_VIDEO_FPS=`echo "$IDENTIFY"|awk -F '=' '/ID_VIDEO_FPS/ {print $2}'` }
# Работа с сабами { # Проверка на наличие файла для задержки сабов if [[ -f "$source.subdelay" && ! "$subdelay_forced" == "true" ]] then subdelay=`cat "$source.subdelay"` cecho "Найден файл задержки сабов $source.subdelay - используем задержку сабов в $subdelay секунд(ы)!" $yellow fi # Сохранение задержки при необходимости if [[ "$save_subdelay" == "true" ]] ; then rm "$source.subdelay" echo $subdelay|tee "$source.subdelay" >/dev/null fi # Параметры сабов, при необходимости/желании - настроить subset="-subfont-text-scale 3 -subfont-blur 8 -subfont-outline 8 -subcp enca:$enca_sublang:$subcp -slang $slang -subdelay $subdelay" # subset="-subcp enca:$enca_sublang:$subcp -slang $slang -ass -ass-force-style Fontsize=25,PrimaryColour=&H00ffffff,BackColour=&H00000000,OutlineColour=&H00000000,Bold=0,Italic=0,BorderStyle=1,Outline=5" # PlayResX=512,PlayResY=320,Name=Default,Alignment=2,Shadow=0,MarginL=20,MarginR=20,MarginV=15 # По умолчанию - /dev/null, чтоб менкодер не ругался на тему option 'sub' must have a parameter. subfile="/dev/null" # Функиция инициализации субтитров (вызов: initsubs) function initsubs { subsetup=$subset # Задаём фильтр expand для добавления чёрной полосы внизу изображения под сабы # Увеличиваем высоту картинки после expand на 10 лишних пикселов let expand=$outputheight+10 # Рендерим сабы и обрезаем нижние лишние 10 пикселов (сдвигаем сабы на 10 пикселов вниз) # vf=$vf,expand=$outputwidth:$outputheight:0:0,crop=320:240:0:0 vf=$vf,expand=$outputwidth:$expand:0:0:1,crop=0:$outputheight:0:0 }
# Сохраняем перменную IFS - щна нам ещё пригодится ifs=$IFS # И назначаем разделителем \n IFS=' ' # Перебираем файлы внешних сабов, последний из них будет использоваться for subfile in `echo "$ID_FILE_SUB_FILENAME"`; do cecho "Нашёл файл субтитров $subfile" $green done # Вот и пригодилась... IFS=$ifs
if [[ "$subfile" != "/dev/null" || "$1" == "force" ]]; then initsubs; fi
# Если не нашли сабы - проверяем отказываемся от них, иначе - сообщаем, какой файл сабов будет использоваться if [[ "$subfile" == "/dev/null" ]]; then if [[ "$ID_SUBTITLE_ID" != "" ]]; then cecho "Найдена внутренняя дорожка субтитров, использую её!" $green initsubs elif [[ "$force_subs" == "true" ]]; then cecho "Не нашёл субтитры, форсированно обрабатываю их!" $yellow initsubs else cecho "Не нашёл субтитры, продолжаю без них!" $yellow fi else cecho "Использую файл субтитров $subfile" $yellow # Задаём sid=10 чтобы форсировать использование внешнего файла сабов при их наличии subsetup="$subsetup -sid 10" fi # С сабами разобрались. }
# Режимы кодирования { # Функция проверки входного fps на валидность, если не валидный (24/30) - принять равным 24 (?). Вызов - check_dirty_fps function check_dirty_fps { if [[ "$ID_VIDEO_FPS" == "119.880" ]]; then fps=24 if [[ "$ddfc_disable" != "true" ]]; then params="$params -fps $fps" fi # А вот тут A/V синхронизация как раз и потребуется, без неё падает params=${params//-mc 0/} fi } # Функция проверки необходимости использования -aid. Вызов - check_aid function check_aid { if [[ "$aid_disable" == "true" ]]; then oac=${oac//-aid $aid /} fi }
case $mode in mpeg2 ) # Режим mpeg2 # Настройки кодека видео. Изменить при необходимости ovc="-of mpeg -ovc lavc -lavcopts vcodec=mpeg2video:vbitrate=$videobitrate:vmax_b_frames=4:vb_strategy=0:brd_scale=3:turbo:trell:qns=3:vpass=" # Настройки фильтров аудио. Изменить при необходимости af="-af volnorm,resample=44100:0:0" # Настройки кодека аудио. Изменить при необходимости oac="-aid $aid -oac lavc -lavcopts acodec=libmp3lame:abitrate=$audioobitrate" outext="mpg" params="$params -ofps 25" check_dirty_fps check_aid ;;
XviD ) # Режим XviD # Настройки кодека видео. Изменить при необходимости ovc="-ffourcc XVID -ovc xvid -xvidencopts trellis:vhq=4:hq_ac:max_bframes=0:bitrate=$videobitrate:turbo:pass=" # Настройки фильтров аудио. Изменить при необходимости af="-af volnorm,resample=44100:0:0" # Настройки кодека аудио. Изменить при необходимости oac="-aid $aid -oac mp3lame -lameopts mode=0:cbr:br=$audioobitrate" outext="avi" check_dirty_fps check_aid ;;
6120 ) # Режим 6120 # Настройки кодека видео. Изменить при необходимости ovc="-ffourcc XVID -ovc xvid -xvidencopts trellis:vhq=4:hq_ac:bitrate=$videobitrate:turbo:pass=" # Настройки фильтров аудио. Изменить при необходимости af="-af volnorm,resample=44100:0:0" # Настройки кодека аудио. Изменить при необходимости oac="-aid $aid -oac mp3lame -lameopts mode=0:cbr:br=$audioobitrate" outext="avi" check_dirty_fps check_aid ;;
* ) cecho "SHIT HAPPENED!" $blue esac }
# Мультисегментная многопоточность { if [[ "$unithread" == ":" ]]; then # Если задан однопоточный режим - считать серединой конец файла middlepos=$ID_LENGTH else # А иначе - середину middlepos=`echo $ID_LENGTH| awk '{ print $1 / 2 }'` fi
# Если тестовый режим не задан - определяем границы участков для потоков: if [[ "$test" != "true" ]]; then # Для первого - от начала и до середины. chunk1="-endpos $middlepos " # Для второго - от середины и до конца. chunk2="-ss $middlepos " fi }
# Свистелки { # Функция для показа клмандной строки кодирования (вызов: show firstpass|secondpass) function show { # Устанавливаем флаг проверки show=":" # Сохраняем флаг debug olddebug=$debug echo -ne "$yellow" # И включаем флаг debug в положение echo debug="echo" # Вызываем функции кодирования с флагом debug echo ----------------------------------------- $1 1 "$chunk1" echo ----------------------------------------- if [[ "$unithread" != ":" ]]; then $1 2 "$chunk2" echo ----------------------------------------- fi # И восстанавливаем флаг debug обратно debug=$olddebug unset olddebug # А также убираем флаг проверки unset show tput sgr0 }
# Функция вывода таймстампа (вызов; timestamp) function timestamp { echo echo -ne "$yellow" date tput sgr0 echo } }
# Собственно кодирование { # Функция первого прохода (вызов: firstpass номер_части "границы части" [unithread_flag]) function firstpass { $show $3 cecho "Processing pass 1 of part $1!" $green $debug $3 mencoder -nosound "$source" $params $subsetup -sub "$subfile" $vf $ovc\1 -passlogfile "$out part$1.log" -o /dev/null $2 $show $3 cecho "Pass 1 of part $1 done!" $green $show $3 timestamp }
# Функция второго прохода (вызов: secondpass номер_части "границы части" [unithread_flag]) function secondpass { $show $3 cecho "Processing pass 2 of part $1!" $green $debug $3 mencoder "$source" $params $subsetup -sub "$subfile" $af $oac $vf $ovc\2 -passlogfile "$out part$1.log" -o "$out part$1.$outext" $2 $show $3 cecho "Pass 2 of part $1 done!" $green $show $3 timestamp }
# Показываем команды кодирования частей cecho "First pass:" $green show firstpass cecho "Second pass:" $green show secondpass
# И начинаем процесс timestamp # sleep 2 - во избежание состояния гонки при выводе сообщений (firstpass 1 "$chunk1"; secondpass 1 "$chunk1") & (sleep 2; firstpass 2 "$chunk2" $unithread; secondpass 2 "$chunk2" $unithread) # Хорошо бы дождаться завершения обоих частей прежде чем склеивать их... wait }
# Постобработка { # Если задан флаг debug - дальше нам делать нечего... if [[ "$debug" == ":" ]]; then exit 1 fi
# Если не задан однопоточный режим - надо бы по быстрому слепить оба куска и прибраться за собой пока никто не видит... if [[ "$unithread" != ":" ]]; then cecho "$file Joining" $green time mencoder "$out part1.$outext" "$out part2.$outext" -oac copy -ovc copy -o "$out.$outext" $quiet rm "$out part1.$outext" "$out part2.$outext" "$out part1.log" "$out part2.log" else # А иначе - просто переименовать первый кусок в выходной файл и прибраться. mv "$out part1.$outext" "$out.$outext" rm "$out part1.log" fi
# Просмотр после кодирования if [[ "$play" == "true" ]]; then mplayer "$out.$outext" fi
# Проверка на необходимость копирования готовых файлов и отсутствие необходимости перемещения if [[ "$copy_flag" == "true" && "$move_files" != "true" ]]; then cecho "Копирую $out.$outext в $copy_path" $green # И если надо - запускаем копирование в фоновом режиме cp "$out.$outext" "$copy_path" & # Проверка на необходимость перемещения готовых файлов elif [[ "$copy_flag" == "true" && "$move_files" == "true" ]]; then cecho "Перемещаю $out.$outext в $copy_path" $green # И если надо - запускаем пермещение в фоновом режиме mv "$out.$outext" "$copy_path"& fi }
wine - зло. Оно тебе надо, из своей системы полигон для вирусов делать? Держи, пользуйся! ^_^ Сорри, форум не даёт выложить. Короче НЯ! [spoiler=bash script][code]#! /bin/bash # set -v ################################## # D2 video encoder for Linux # # mencoder, mplayer, awk, XviD # # lavcodec and bash are requied! # # Version 0.06 from 28 may 2010 # # By Arago (Arago@inbox.ru) # ##################################
# TODO: пофиксить баг с возможной пропажей саба и 5 секунд видео в середине файла при двухпоточном кодировании в мультисегментном режиме. Как - хз(( # TODO: пофиксить баг с раскраской в мультифайловом многопоточном режиме
# Инициализация { # Задание параметров кодирования, изменить при необходимости. outputwidth=320 outputheight=240 videobitrate=400 audioobitrate=128
# Задание параметров тестового кусочка по умолчанию, изменить при необходимости. ss=300 endpos=10
# Задание разричных внутренних параметров aid=1 all=* mode="XviD" # Кодировка сабов по умолчанию (если -subcp enca не сможет определить кодировку автоматически) subcp=cp1251 # Язык сабов для -subcp enca enca_sublang="ru" # Язык сабов для -slang slang="ru,rus" # Язык звука alang="jpn,ja" # Сдвиг сабов по умолчанию - не двигаем subdelay=0 # -noautoexpand - для отключения автоматического рендеринга сабов # -mc 0 - для обхода бага с Too many audio packets in the buffer params="-alang $alang -noautoexpand -mc 0 -really-quiet " # Путь для копирования готовых файлов по умолчанию default_copy_path="/media/D2/VIDEO" # Параметры скалирования изображения (по горизонтали - $outputwidth, по вертикали - согласно аспекту, округляя до +-16 пикселов) vf="-vf scale=$outputwidth:-10,harddup"
# Раскраска скрипта (код не мой!) black='\E[30m' red='\E[31m' green='\E[32m' yellow='\E[33m' blue='\E[34m' magenta='\E[35m' cyan='\E[36m' white='\E[37m' function cecho { echo -ne "$2" echo "$1" tput sgr0 } }
# Парсер командной строки { # Деинициализируем (на всякий случай) перепенную command_line - в неё будем складывать опции передаваемые рабочим процессам в пакетном режиме unset command_line # Разбор командной строки until [[ "$1" == "" ]] ; do case $1 in
-t ) if [[ "$2" == "-ss" ]]; then if [[ "$3" -gt "0" ]]; then ss=$3 cecho "" $yellow shift shift else cecho "После $2 необходимо указать целое положительное число!" $red fi fi
if [[ "$2" == "-endpos" ]]; then if [[ "$3" -gt "0" ]]; then endpos=$3 cecho "" $yellow shift shift else cecho "После $2 необходимо указать целое положительное число!" $red fi fi
cecho "Тестовый режим, кодируем кусочек в $endpos секунд начиная с $ss секунды" $yellow chunk1="-ss $ss -endpos $endpos " test="true" # Суффикс имени тестового файла testsuffix="[TEST ($chunk1) -aid $aid]" # Тест кодируем в однопоточном режиме (на всякий случай) unithread=":" command_line="$command_line -t" ;;
-aid ) if [[ "${2:0:1}" != "-" ]]; then cecho "Указана звуковая дорожка $2" $yellow aid=$2 command_line="$command_line -aid $2" fi ;;
-r ) cecho "Используется кодек mpeg2 (RockBox)!" $yellow mode="mpeg2" # Похоже что многосегментная многопоточность не работает в этом режиме, нет звука и индекса в готовом файле. Форсируем unithread mode. cecho "Задан режим Rockbox, форсированно использую однопоточный режим!" $yellow unithread=":" command_line="$command_line -r" ;;
-s ) cecho "Используется кодек XviD, оптимизация под смарты Nokia с экраном qvga (CorePlayer)!" $yellow mode="6120" command_line="$command_line -s" ;;
-p ) cecho "Задан просмотр после обработки!" $yellow play="true" command_line="$command_line -p" ;;
-c ) # Проверка, не является ли следущий параметр ключом, если нет - считать его путём для копирования выходных файлов if [[ "${2:0:1}" != "-" ]]; then if [[ -d "$2" && "-w $2" ]]; then cecho "Копирую перекодированные файлы в каталог $2!" $green copy_path="$2" copy_flag="true" elif [[ -d "$2" ]]; then cecho "Задан параметр копирования перекодированных файлов в каталог $2, но $2 недоступен для записи!" $red elif [[ -f "$2" ]]; then cecho "Задан параметр копирования перекодированных файлов в каталог $2, но $2 является файлом!" $red elif [[ ! -e "$2" ]]; then cecho "Задан параметр копирования перекодированных файлов в каталог $2, но $2 не существует!" $red fi elif [[ -d "$default_copy_path" && -w "$default_copy_path" ]]; then cecho "Копирую перекодированные файлы в каталог по умолчанию $default_copy_path!" $green copy_path="$default_copy_path" copy_flag="true" elif [[ -d "$default_copy_path" ]]; then cecho "Задан параметр копирования перекодированных файлов в каталог по умолчанию $default_copy_path, но $default_copy_path недоступен для записи!" $red elif [[ -f "$default_copy_path" ]]; then cecho "Задан параметр копирования перекодированных файлов в каталог по умолчанию $default_copy_path, но $default_copy_path является файлом!" $red elif [[ ! -e "$default_copy_path" ]]; then cecho "Задан параметр копирования перекодированных файлов в каталог по умолчанию $default_copy_path, но $default_copy_path не существует!" $red else cecho "SHIT HAPPENED!" $blue exit 1 fi ;;
-d ) cecho "Задан режим отладки!" $red debug=":" command_line="$command_line -d" ;;
-mv ) cecho "Задан параметр перещения перекодированных файлов!" $yellow move_flag="true" command_line="$command_line -mv" ;;
-u ) cecho "Использую однопоточный режим!" $yellow unithread=":" command_line="$command_line -u" ;;
-s ) cecho "Форсирую обработку субтитров!" $yellow force_subs="true" command_line="$command_line -s" ;;
-m ) cecho "Форсирую многосегментную многопоточность!" $yellow segmented_multithread="true" command_line="$command_line -m" ;;
-v ) cecho "Задан детальный режим!" $yellow verbose="true" command_lne="$command_line -v" # Убираем -really-quiet из параметров mencoder params=${params//-really-quiet /} ;;
-a ) batch="true" # Проверка, не является ли следущий параметр ключом, если нет - считать его расширением файлов для пакетной обработки if [[ "${2:0:1}" != "-" && "$2" != "1" && "$2" != "2" && ! -f "$2" && "$2" != "" ]]; then all="*.$2" cecho "Задан пакетный режим. обрабатываю файлы с расширением $2!" $red else cecho "Задан пакетный режим. обрабатываю всё подряд!" $red fi ;;
-subcp ) # Проверка, не является ли следущий параметр ключом, если нет - считать его кодировкой сабов при сбое enca if [[ "${2:0:1}" != "-" && "$2" != "1" && "$2" != "2" && ! -f "$2" && "$2" != "" ]]; then cecho "Задана кодировка субтитров $2!" $yellow subcp=$2 command_line="$command_line -subcp $2" else cecho "Ошибка в параметре -subcp - не указана кодировка, использую cp1251!" $red fi ;;
-subdelay ) # Проверка, не является ли следущий параметр ключом, если нет - считать его сдвигом сабов относительно видео (если сабы отстают от видео - положительное значение, если опережают - отрицательное). if [[ ! -f "$2" && "$2" != "" ]]; then cecho "Задана задержка субтитров в $2 секунд(ы)!" $yellow subdelay=$2 command_line="$command_line -subdelay $2" subdelay_forced=true else cecho "Ошибка в параметре -subdelay - не указана задержка!" $red fi ;;
-savesubdelay ) # Проверка сохранения задержки в файл cecho "Заданно сохранение задержки сабов!" $yellow command_line="$command_line -s" save_subdelay=true ;;
-ddfc ) # Проверка отключения коррекции грязных FPS cecho "Коррекция грязных FPS отключена!" $yellow ddfc_disable=true command_line="$command_line -ddfc" ;;
-daid ) # Проверка отключения использования -aid cecho "Использование -aid отключено!" $yellow aid_disable=true command_line="$command_line -daid" ;;
-o ) if [[ "${2:0:1}" != "-" ]]; then if [[ -d "$2" && "-w $2" ]]; then cecho "Задан выходной каталог $2/" $green outdir=$2/ export outdir elif [[ -d "$2" ]]; then cecho "Задан выходной каталогг $2, но $2 недоступен для записи!" $red elif [[ -f "$2" ]]; then cecho "Задан выходной каталог $2, но $2 является файлом!" $red elif [[ ! -e "$2" ]]; then cecho "Задан выходной каталог $2, но $2 не существует!" $red fi; shift else cecho "Не задан выходной каталог, использую значение по умолчанию!" $red fi ;;
-h ) echo 'Использование: '`basename "$0"`' [-t [-ss startseconds] [-endpos lenght]] [1|2] [-r] [-p] [-d] [-u] [-m] [-h] [-v] [-s] [-subcp codepage] [-c [/path/] [-mv]] [-o /path/] (-a [ext])|input-video где: -t - тестовый режим (кодировать кусочек в '$endpos' секунд начиная с '$ss' секунды) (test) -ss - начать тестовый кусочек с позиции startseconds от начала файла (в секундах) -endpos - длина тестового кусочка (в секундах) 1|2 - номер звуковой дорожкм (по умолчанию 1) -r - режим Rockbox (формат mpeg2) (rockbox) -p - воспроизвести после кодирования (удобно совместно с -t, но не используйте в пакетном режиме!) (play) -d - режим отладки (не запускать кодирование) (debug) -u - запретить второй поток кодирования для мультисегментного режима (unithread) (безопасно!) -v - детальный режим (не подавлять вывод mencoder, немного замедляет процесс!) (verbose) -s - форсировать обработку с субтитрами, даже если файл сабов не найден (применительно для встроенных сабов mkv или если нужна картинка 320x240) (subtitles) -a - пакетный режим (обрабатывать все файлы в текущем каталоге) (all) ext - расширение для пакетной обработки, например -a avi (по умолчанию - *) (только последний параметр -a [ext] будет обработан!) (крайне рекомендуется установить если кодируем сериал с одинаковыми по длине сериями) -m - форсировать многосегментную многопоточность для -a ext (включать желательно если кодируемые файлы сильно отличаются по длине) (multithread) (опасно!) -subcp codepage - кодировка субтитров если автоопределение не срабатывает, например -subcp UTF8 (по умолчанию - cp1251) (как для mencoder) -subdelay - установить сдвиг сабов относительно видео (если сабы отстают от видео - положительное значение, если опережают - отрицательное), например -subdelay 1.5 -savesubdelay - сохранить значение сдвига сабов в файл (после этого можно кодировать в автоматическом режиме, значение будет прочитано из файла) -ddfc - Отключить коррекцию грязных FPS (если входное видео с FPS=119.880 и неправильно кодируется) -daid - Отключить использования -aid (если нет звука при кодировании vob файлов) -o /path/ - путь для сохранения выходных файлов и логов кодировщика input-video - входной видео файл (полный путь, относительый путь или имя файла в текущем каталоге) (только последний указанный файл будет обработан!) -c [/path/] - автоматическое копирование перекодированного файла в каталог /path/ (copy) (по умолчанию - '$default_copy_path', если невозможно копировать в указанный каталог - параметр игнорируется, если каталог копирования не указан и невозможно копировать в каталог по умолчанию - параметр игнорируется) -mv - перемещать перекодированные файлы вместо копирования. Использовать имеет смысл только вместе с параметром -c. Если путь для копирования не определён - не делать ничего. -h - справка (этот текст) (help)' exit 0 ;;
* ) if [[ -f "$1" ]]; then cecho "Работаем с файлом $1" $green file=$1 fi ;; esac shift done
if [[ "$copy_flag" == "true" && "$move_flag" == "true" ]]; then cecho "Перемещаю перекодированные файлы в каталог $copy_path!" $yellow move_files="true" elif [[ "$copy_flag" != "true" && "$move_flag" == "true" ]]; then cecho "Игнорирую параметр перещения перекодированных файлов, путь для перемещения не определён!" $red # На всякий случай unset move_files fi }
# Пакетный режим { # Проверка на форсированную мультисегментность и пакетный режим с указанием расширения (иначе под раздачу в один поток может попасть саб и видяшка, что приведёт фактически к однопоточному кодированию) if [[ "$batch" == "true" && "$all" != "*" && "$segmented_multithread" == "" ]]; then cecho "Использую мультифайловую многопоточность!" $green for i in $all; do if [[ "$first" == "" ]]; then # Если переменная $first не задана - запоминаем в неё имя первого потока и продолжаем обход first="$i" continue else # А иначе - инициируем запуск двух потоков одновременно в режиме unithread second="$i" if [[ "$copy_flag" == "true" ]] ; then # sleep 5; надо чтобы обойти проблему состояния гонки при многопоточности (создание каталога Recoded например, когда при проверке его ещё не было, а в момент создания он уже есть, что приводит к ошибке создания и сбою, в результате чего второй поток при первом заходе гадит в ~) и при выводе сообщений на экран ($0 "$first" $command_line -u -c "$copy_path") & (sleep 5; $0 "$second" $command_line -u -c "$copy_path") else ($0 "$first" $command_line -u) & (sleep 5; $0 "$second" $command_line -u) fi # И дожидаемся их завершения (если длинна паралельно обрабатываемых кусков разная будет ожидание более длинного перед продолжением). # А затем чистим внутренние переменные unset first unset second # И уходим на следущий заход fi done # Если переменная $first не пуста - значит файлов было нечётное количество, обрабатываем последний файл (можно и без -u - будет быстрее но посередине может вывалиться кусок) if [[ "$first" != "" ]]; then if [[ "$copy_flag" == "true" ]] ; then $0 "$first" $command_line -u -c "$copy_path" else $0 "$first" $command_line -u fi fi exit 0 # Проверка на пакетный режим elif [[ "$batch" == "true" ]]; then if [[ "$unithread" == ":" ]]; then cecho "Многопоточность не используется!" $red else cecho "Использую многосегментную многопоточность!" $yellow fi for i in $all do if [[ "$copy_flag" == "true" ]] ; then $0 "$first" $command_line -c "$copy_path" else $0 "$first" $command_line fi done exit 0 fi }
# Всякие проверки { # Проверка, задан ли файл для обработки if [[ "$file" == "" ]]; then cecho "Не задан файл для работы!" $red exit 1 fi
# Получение пути к файлу, имени файла и его расширения temp=${file/*\//} sourcedir=${file::$((${#file}-${#temp}))} ext=${temp/*./.} sourcefilename=${temp::$((${#temp}-${#ext}))} # Если скрипт вызван без пути к файлу - считать что файл находится в текущем каталоге if [[ "$sourcedir" == "" ]] then sourcedir="`pwd`/" fi
# Определяем, куда складывать выходные файлы if [[ -d "$outdir" && -w "$outdir" ]] then cecho "Будем складывать выходные файлы в каталог $outdir" $green elif [[ -d "$sourcedir"Recoded && -w "$sourcedir"Recoded ]] then cecho "Каталог ${sourcedir}Recoded найден - будем складывать выходные файлы в него" $green outdir="$sourcedir"Recoded/ elif [[ -d "$sourcedir"Recoded && -d ~ && -w ~ ]] then cecho "Каталог ${sourcedir}Recoded найден, но недоступен для записи - будем складывать выходные файлы в ~/" $yellow outdir=~/ elif mkdir ${sourcedir}Recoded&>/dev/null then cecho "Создан каталог ${sourcedir}Recoded" $green outdir="$sourcedir"Recoded/ elif [[ -d ~ && -w ~ ]] then cecho "Создание ${sourcedir}Recoded провалено, будем складывать выходные файлы в ~/" $yellow outdir=~/ else cecho "Не знаю куда складывать выходные файлы, аварийное завершение" $red exit 1 fi
# Сокращения для имён файлов source=$sourcedir$sourcefilename$ext out=$outdir$sourcefilename$ext$testsuffix }
# Получение информации об исходном файле { # Идентификация файла IDENTIFY=`mplayer -frames 0 -ao null -vo null -identify "$source" 2>/dev/null` # Получение длительности входного файла (для двухпоточного режима) ID_LENGTH=`echo "$IDENTIFY"|awk -F '=' '/ID_LENGTH/ {print $2}'` # Получение имён внешних файлов субтитров (по одному на строку) ID_FILE_SUB_FILENAME=`echo "$IDENTIFY"|awk -F '=' '/ID_FILE_SUB_FILENAME/ {print $2}'` # Получение номеров внутренних дорожек субтитров (по одному на строку) ID_SUBTITLE_ID=`echo "$IDENTIFY"|awk -F '=' '/ID_SUBTITLE_ID/ {print $2}'` # Получение языков внутренних дорожек субтитров (по одному на строку) ID_SID_=`echo "$IDENTIFY"|awk -F '=' '/ID_SID_/ {print $2}'` # Получение частоты кадров (во избежание грязных хаков типа varable fps с fps=119.880 и всех радостей связанных с этим тиапа ускорения видео и недокодированных файлов) ID_VIDEO_FPS=`echo "$IDENTIFY"|awk -F '=' '/ID_VIDEO_FPS/ {print $2}'` }
# Работа с сабами { # Проверка на наличие файла для задержки сабов if [[ -f "$source.subdelay" && ! "$subdelay_forced" == "true" ]] then subdelay=`cat "$source.subdelay"` cecho "Найден файл задержки сабов $source.subdelay - используем задержку сабов в $subdelay секунд(ы)!" $yellow fi # Сохранение задержки при необходимости if [[ "$save_subdelay" == "true" ]] ; then rm "$source.subdelay" echo $subdelay|tee "$source.subdelay" >/dev/null fi # Параметры сабов, при необходимости/желании - настроить subset="-subfont-text-scale 3 -subfont-blur 8 -subfont-outline 8 -subcp enca:$enca_sublang:$subcp -slang $slang -subdelay $subdelay" # subset="-subcp enca:$enca_sublang:$subcp -slang $slang -ass -ass-force-style Fontsize=25,PrimaryColour=&H00ffffff,BackColour=&H00000000,OutlineColour=&H00000000,Bold=0,Italic=0,BorderStyle=1,Outline=5" # PlayResX=512,PlayResY=320,Name=Default,Alignment=2,Shadow=0,MarginL=20,MarginR=20,MarginV=15 # По умолчанию - /dev/null, чтоб менкодер не ругался на тему option 'sub' must have a parameter. subfile="/dev/null" # Функиция инициализации субтитров (вызов: initsubs) function initsubs { subsetup=$subset # Задаём фильтр expand для добавления чёрной полосы внизу изображения под сабы # Увеличиваем высоту картинки после expand на 10 лишних пикселов let expand=$outputheight+10 # Рендерим сабы и обрезаем нижние лишние 10 пикселов (сдвигаем сабы на 10 пикселов вниз) # vf=$vf,expand=$outputwidth:$outputheight:0:0,crop=320:240:0:0 vf=$vf,expand=$outputwidth:$expand:0:0:1,crop=0:$outputheight:0:0 }
# Сохраняем перменную IFS - щна нам ещё пригодится ifs=$IFS # И назначаем разделителем \n IFS=' ' # Перебираем файлы внешних сабов, последний из них будет использоваться for subfile in `echo "$ID_FILE_SUB_FILENAME"`; do cecho "Нашёл файл субтитров $subfile" $green done # Вот и пригодилась... IFS=$ifs
if [[ "$subfile" != "/dev/null" || "$1" == "force" ]]; then initsubs; fi
# Если не нашли сабы - проверяем отказываемся от них, иначе - сообщаем, какой файл сабов будет использоваться if [[ "$subfile" == "/dev/null" ]]; then if [[ "$ID_SUBTITLE_ID" != "" ]]; then cecho "Найдена внутренняя дорожка субтитров, использую её!" $green initsubs elif [[ "$force_subs" == "true" ]]; then cecho "Не нашёл субтитры, форсированно обрабатываю их!" $yellow initsubs else cecho "Не нашёл субтитры, продолжаю без них!" $yellow fi else cecho "Использую файл субтитров $subfile" $yellow # Задаём sid=10 чтобы форсировать использование внешнего файла сабов при их наличии subsetup="$subsetup -sid 10" fi # С сабами разобрались. }
# Режимы кодирования { # Функция проверки входного fps на валидность, если не валидный (24/30) - принять равным 24 (?). Вызов - check_dirty_fps function check_dirty_fps { if [[ "$ID_VIDEO_FPS" == "119.880" ]]; then fps=24 if [[ "$ddfc_disable" != "true" ]]; then params="$params -fps $fps" fi # А вот тут A/V синхронизация как раз и потребуется, без неё падает params=${params//-mc 0/} fi } # Функция проверки необходимости использования -aid. Вызов - check_aid function check_aid { if [[ "$aid_disable" == "true" ]]; then oac=${oac//-aid $aid /} fi }
case $mode in mpeg2 ) # Режим mpeg2 # Настройки кодека видео. Изменить при необходимости ovc="-of mpeg -ovc lavc -lavcopts vcodec=mpeg2video:vbitrate=$videobitrate:vmax_b_frames=4:vb_strategy=0:brd_scale=3:turbo:trell:qns=3:vpass=" # Настройки фильтров аудио. Изменить при необходимости af="-af volnorm,resample=44100:0:0" # Настройки кодека аудио. Изменить при необходимости oac="-aid $aid -oac lavc -lavcopts acodec=libmp3lame:abitrate=$audioobitrate" outext="mpg" params="$params -ofps 25" check_dirty_fps check_aid ;;
XviD ) # Режим XviD # Настройки кодека видео. Изменить при необходимости ovc="-ffourcc XVID -ovc xvid -xvidencopts trellis:vhq=4:hq_ac:max_bframes=0:bitrate=$videobitrate:turbo:pass=" # Настройки фильтров аудио. Изменить при необходимости af="-af volnorm,resample=44100:0:0" # Настройки кодека аудио. Изменить при необходимости oac="-aid $aid -oac mp3lame -lameopts mode=0:cbr:br=$audioobitrate" outext="avi" check_dirty_fps check_aid ;;
6120 ) # Режим 6120 # Настройки кодека видео. Изменить при необходимости ovc="-ffourcc XVID -ovc xvid -xvidencopts trellis:vhq=4:hq_ac:bitrate=$videobitrate:turbo:pass=" # Настройки фильтров аудио. Изменить при необходимости af="-af volnorm,resample=44100:0:0" # Настройки кодека аудио. Изменить при необходимости oac="-aid $aid -oac mp3lame -lameopts mode=0:cbr:br=$audioobitrate" outext="avi" check_dirty_fps check_aid ;;
* ) cecho "SHIT HAPPENED!" $blue esac }
# Мультисегментная многопоточность { if [[ "$unithread" == ":" ]]; then # Если задан однопоточный режим - считать серединой конец файла middlepos=$ID_LENGTH else # А иначе - середину middlepos=`echo $ID_LENGTH| awk '{ print $1 / 2 }'` fi
# Если тестовый режим не задан - определяем границы участков для потоков: if [[ "$test" != "true" ]]; then # Для первого - от начала и до середины. chunk1="-endpos $middlepos " # Для второго - от середины и до конца. chunk2="-ss $middlepos " fi }
# Свистелки { # Функция для показа клмандной строки кодирования (вызов: show firstpass|secondpass) function show { # Устанавливаем флаг проверки show=":" # Сохраняем флаг debug olddebug=$debug echo -ne "$yellow" # И включаем флаг debug в положение echo debug="echo" # Вызываем функции кодирования с флагом debug echo ----------------------------------------- $1 1 "$chunk1" echo ----------------------------------------- if [[ "$unithread" != ":" ]]; then $1 2 "$chunk2" echo ----------------------------------------- fi # И восстанавливаем флаг debug обратно debug=$olddebug unset olddebug # А также убираем флаг проверки unset show tput sgr0 }
# Функция вывода таймстампа (вызов; timestamp) function timestamp { echo echo -ne "$yellow" date tput sgr0 echo } }
# Собственно кодирование { # Функция первого прохода (вызов: firstpass номер_части "границы части" [unithread_flag]) function firstpass { $show $3 cecho "Processing pass 1 of part $1!" $green $debug $3 mencoder -nosound "$source" $params $subsetup -sub "$subfile" $vf $ovc\1 -passlogfile "$out part$1.log" -o /dev/null $2 $show $3 cecho "Pass 1 of part $1 done!" $green $show $3 timestamp }
# Функция второго прохода (вызов: secondpass номер_части "границы части" [unithread_flag]) function secondpass { $show $3 cecho "Processing pass 2 of part $1!" $green $debug $3 mencoder "$source" $params $subsetup -sub "$subfile" $af $oac $vf $ovc\2 -passlogfile "$out part$1.log" -o "$out part$1.$outext" $2 $show $3 cecho "Pass 2 of part $1 done!" $green $show $3 timestamp }
# Показываем команды кодирования частей cecho "First pass:" $green show firstpass cecho "Second pass:" $green show secondpass
# И начинаем процесс timestamp # sleep 2 - во избежание состояния гонки при выводе сообщений (firstpass 1 "$chunk1"; secondpass 1 "$chunk1") & (sleep 2; firstpass 2 "$chunk2" $unithread; secondpass 2 "$chunk2" $unithread) # Хорошо бы дождаться завершения обоих частей прежде чем склеивать их... wait }
# Постобработка { # Если задан флаг debug - дальше нам делать нечего... if [[ "$debug" == ":" ]]; then exit 1 fi
# Если не задан однопоточный режим - надо бы по быстрому слепить оба куска и прибраться за собой пока никто не видит... if [[ "$unithread" != ":" ]]; then cecho "$file Joining" $green time mencoder "$out part1.$outext" "$out part2.$outext" -oac copy -ovc copy -o "$out.$outext" $quiet rm "$out part1.$outext" "$out part2.$outext" "$out part1.log" "$out part2.log" else # А иначе - просто переименовать первый кусок в выходной файл и прибраться. mv "$out part1.$outext" "$out.$outext" rm "$out part1.log" fi
# Просмотр после кодирования if [[ "$play" == "true" ]]; then mplayer "$out.$outext" fi
# Проверка на необходимость копирования готовых файлов и отсутствие необходимости перемещения if [[ "$copy_flag" == "true" && "$move_files" != "true" ]]; then cecho "Копирую $out.$outext в $copy_path" $green # И если надо - запускаем копирование в фоновом режиме cp "$out.$outext" "$copy_path" & # Проверка на необходимость перемещения готовых файлов elif [[ "$copy_flag" == "true" && "$move_files" == "true" ]]; then cecho "Перемещаю $out.$outext в $copy_path" $green # И если надо - запускаем пермещение в фоновом режиме mv "$out.$outext" "$copy_path"& fi }[/code][/spoiler]
_________________ Сеть не должна пересекаться с настоящим миром... Эксперименты Лэйн, уровень 02, 20.10
|
04 июн 2010, 22:41 |
|
|
|
Страница 1 из 1
|
[ Сообщений: 12 ] |
|
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0 |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения
|
|
 |