Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Видео и аудио: обработка и кодирование (http://forum.oszone.net/forumdisplay.php?f=45)
-   -   Разыскивается простая, но качественная программа для вшивания субтитров (http://forum.oszone.net/showthread.php?t=280128)

deniskx 01-04-2014 01:41 2331272

Разыскивается простая, но качественная программа для вшивания субтитров
 
Дело в том, что у меня железный плеер сам SRT субтитры плохо отображает (светлый и плохочитаемый шрифт), поэтому решил для него делать хардсаб. Я смотрю обычно AVI+SRT или MKV(H264,звук,SRT внутри). Требуется результат пересохранять в MP4 или MKV с кодеком H264 для минимизации потерь сжатия. Соответственно VirtualDub тут не поможет.
В общем-то процесс мне понятен. Я знаю как вшивать субтитры в MeGUI с помощью avisynth (TextSub). Проблема в том, что это довольно хлопотное дело. Создать индекс MKV, распаковать субтитры из MKV, вручную их вписать в скрипт для TextSub, пережать видео, потом заново запаковать в MKV с новым видео. Ведь это не разовая операция, каждый раз замучаешься. Ищу простую программу, чтобы можно было указать файл входной MKV или AVI, выбрать аудио и сабы (ведь их может быть несколько) и нажать "конвертировать" (профили и выходную папку заранее можно настроить). Без всяких извлечений сабов и прочих шаманств. Но при этом программа должна быть качественной, сохранять в MKV или MP4, x264 пресет medium, кодирование не только в режиме bitrate, но и crf. Желательно чтобы разрешение видео не указывать (использовать оригинальное, с поддержкой анаморфности). В идеале звук чтобы не перекодировался.
Я испробовал:

- Any Video Converter - сохраняет без CABAC и только baseline профиль. Сабы вшивает только при сохранении в MP4, в этом режиме звук всегда перекодируется. Не умеет crf кодирование
- ImTOO Video Converter - сохраняет без CABAC. Сабы вшивает только при сохранении в MP4, в этом режиме звук всегда перекодируется
- Hanbrake - не умеет вшивать SRT (только VobSub)
- MeGUI - устраивает, но слишком хлопотно. Нужно делать resize для анаморфного разрешения
- XviD4PSP 5 - ей надо предварительно извлечь сабы и вписать разрешение

В общем жду еще предложений.

deniskx 01-04-2014 14:20 2331482

Пока что написал батник для упрощения, по принципу как в MeGUI реализовано
sub.bat
Код:

"C:\Program Files (x86)\Sub\tools\mkvtoolnix\mkvextract.exe" --ui-language en tracks "C:\Users\Denis\Desktop\1.mkv" 2:"C:\Users\Denis\Desktop\1.srt"
"C:\Program Files (x86)\Sub\tools\ffms\ffmsindex.exe" -f "C:\Users\Denis\Desktop\1.mkv" "C:\Users\Denis\Desktop\1.mkv.ffindex"
"C:\Windows\notepad.exe" "C:\Program Files (x86)\Sub\tools\script.avs"
"C:\Program Files (x86)\Sub\tools\x264\x264.exe" --crf 16 --keyint 240 --sar 1:1 --output "C:\Users\Denis\Desktop\2.mkv" "C:\Program Files (x86)\Sub\tools\script.avs"
"C:\Program Files (x86)\Sub\tools\mkvtoolnix\mkvmerge.exe" -o "C:\\Users\\Denis\\Desktop\\1-converted.mkv"  "--language" "0:und" "--default-track" "0:yes" "--forced-track" "0:no" "--compression" "0:none" "-d" "0" "-A" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "C:\\Users\\Denis\\Desktop\\2.mkv" ")" "--language" "1:und" "--default-track" "1:yes" "--forced-track" "1:no" "--compression" "1:none" "-a" "1" "-D" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "C:\\Users\\Denis\\Desktop\\1.mkv" ")" "--track-order" "0:0,1:1"
del "C:\Users\Denis\Desktop\1.mkv.ffindex"
del "C:\Users\Denis\Desktop\1.srt"
del "C:\Users\Denis\Desktop\2.mkv"
pause

script.avs
Код:

LoadPlugin("C:\Program Files (x86)\Sub\tools\ffms\ffms2.dll")
LoadPlugin("C:\Program Files (x86)\Sub\tools\vsfilter\VSFilter.dll")
FFVideoSource("C:\Users\Denis\Desktop\1.mkv", threads=1)
#LanczosResize(852,480)
TextSub("C:\Users\Denis\Desktop\1.srt")

Главное условие, конвертируемый файл нужно перепаковать в MKV, чтобы в нем были только видео+1звук+1сабы в таком порядке и никаких лишних дорожек (это можно сделать в mkvtoolnix) и положить на рабочий стол с именем 1.mkv
Остальное будет сделано автоматически. Во время работы будет также открыт на редактирование скрипт. В случае анаморфного разрешения (например MKV H264 720x480 16:9) надо избавиться от анаморфности путем ресайза. Для предотвращения потерь лучше сделать апскейл, то есть нужно расскомментировать и вписать в данном случае LanczosResize(852,480)

Этот способ тоже не самый простой, но значительно проще, чем делать самому в MeGUI.
Достоинства: Используется качественный кодировщик x264 с нормальными параметрами, кодирование crf, сохранение в MKV, звук не перекодируется, для звуковой дорожки не нужно корректировать delay и gaps (они перенесутся в контейнер)
Недостатки: Нужно избавляться от анаморфа подсчитав правильное разрешение, предварительная перепаковка, потеряется исходное имя файла

Кстати, если подсовывать файл 1.srt.style рядом с субтитрами, то можно задавать параметры отображения
Код:

ScriptType: v4.00

[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,20,&Hffffff,&Hffffff,&H000000,&H000000,0,0,1,2,0,2,10,10,10,0,1

Например вот такой стиль сделает субтитры менее жирными. Fontsize зависит только от аспекта. Например значение 20 комфортно для аспектов 1,66:1 - 1,85:1. На 2,35:1 размер становится маленьким и Fontsize нужно увеличивать. К сожалению совсем от него избавиться нельзя, тогда TextSub будет просто игнорить файл стиля.

И еще надо иметь в виду, в видео с небольшим разрешением (576x248 например) субтитры добавляются некачественно, сказывается маленькое разрешение. Такое видео желательно апскейлить до приемлемых значений (400 по высоте хотя бы).

deniskx 16-09-2014 13:00 2403460

Хорошая новость. Ночные сборки Handbrake научились вшивать SRT субтитры в видео. Исправлен баг с неправильным отображением конца строки.

Ночные сборки Handbrake также поддерживают технологию аппаратного ускорения кодирования и декодирования видео Intel Quick Sync Video, что существенно повышает скорость кодирования (200-300 fps и выше в зависимости от разрешения).
Но им требуется Windows 7 x64. Под Linux поддержки Intel Quick Sync Video нет.

Wusa 17-09-2014 21:10 2404127

Цитата:

Цитата deniskx
Под Linux поддержки Intel Quick Sync Video нет. »

Зато под Linux есть Вайн.

deniskx 19-09-2014 12:03 2404773

Цитата:

Цитата Wusa
Зато под Linux есть Вайн. »

Не думаю, что Intel Quick Sync Video заведется под Wine. Зато под Linux вроде есть патченный gstreamer с поддержкой QSV. Наверное из командной строки конвертировать можно.

Для Windows тоже есть программа для командной строки, использующая QSV. Это q264.
Примечательно, что она поддерживает avisynth скрипты и может принимать данные из ffmpeg. Что дает просто безграничные возможности. На вход ест все форматы, поддерживаемые встроенным ffmpeg, но сохраняет только в сырой h264. Для несжатых входных данных нужно вручную указать разрешение и частоту.

Простое конвертирование:
Цитата:

q264.exe -u 1 -cqp 16 -numRefFrames 4 -i "input.mkv" -o "output.h264"
Импорт из внешнего ffmpeg:
Цитата:

ffmpeg.exe -i "input.mkv" -map 0:0 -vcodec rawvideo -f rawvideo -pix_fmt yuv420p - | "q264.exe" -u 1 -cqp 16 -numRefFrames 4 -c yuv420p -fps 23.976 -srcw 1280 -srch 720 -i - -o "output.h264"


Время: 01:31.

Время: 01:31.
© OSzone.net 2001-