LINUX.ORG.RU

Вшить субтитры в видеоряд

 ,


0

1

Всем привет, сделал перевод иноземного учебного пособия, теперь хочу поделиться этим. На ютубе есть возможность добавлять субтитры, но видео забанят за нарушение прав. Во вконтакте всё впорядке, но нет добавления титров. Вначале, хотел просто записать «экранку», запустив видео в плеере с субтитрами и отойдя на часик, но моё железо obs studio не тянет. В любом видеоредакторе есть возможность добавления титров, но впихнуть таким образом весь файл, как при просмотре в плеере, нельзя. Есть ли программы, которые могут вшить готовые субтитры в видеоряд, без высоких требований к железу?



Последнее исправление: veselipjan (всего исправлений: 1)

вшить готовые субтитры в видеоряд, без высоких требований к железу?

Что за ноу-хау? Что ещё за «высокие требования»?

anonymous
()

Handbrake. Но в нем нет настроек шрифта и размера.

Avidemux. Можно задать любой шрифт и размер, но он ест только ASS субтитры (srt легко перегоняется в ass с помощью Aegisub).

anonymous
()
Ответ на: комментарий от anonymous

Можно задать любой шрифт и размер

Причем, даже редактируя ass субтитры в текстовом редакторе. Я бы выставил размер 24 вместо 20. Поэксперементируй на небольшом кусочке.

anonymous
()

Есть ли программы, которые могут вшить готовые субтитры в видеоряд, без высоких требований к железу?

Это невозможно, так как всё равно потребуется полное перекодирование.

RazrFalcon ★★★★★
()
Ответ на: комментарий от RazrFalcon

CC в NTSC (MPEG2) как раз субтитры в видеоряде (элементарном m2v потоке), но не hardsub. Они могут даже пройти эфир и VHS>DVD и сохраниться.

anonymous
()

Всем спасибо за советы, HandBrake отлично справилась с задачей, жаль нельзя цвет выбрать - но это уже мелочь, вопрос решён.

veselipjan
() автор топика
Ответ на: комментарий от anonymous

Closed captioning (CC) это обычная текстовая информация, которая хранится в потоке MPEG2 NTSC. Надо полагать в метаданных или где-то глубоко. Соответственно, ее можно извлекать, редактировать и добавлять без перекодировки видео. Извлекать умеет CCExtractor, Vegas. Добавлять - не знаю, наверное, программы авторинга DVD.

В аналоговом сигнале титры закодированы в строке 21 вертикального интервала гашения - они часть телевизионной картинки, которая находится чуть выше видимой части и обычно невидима. Телевизоры ее декодируют и накладывают на видимую часть.

https://translate.google.fr/translate?sl=en&tl=ru&u=https://en.wikipedia.org/wiki/Closed_captioning

anonymous
()
Ответ на: комментарий от veselipjan

А было время Handbrake этого не умел. Сначала функция появилась в ночных win сборках. Там еще был баг, о котором я рапортовал, что конец строки отображался видимым символом. Я тогда для телика конвертировал с хардсабом Intel Quick Sync кодером (аппаратный H.264). Потому что железные плееры заразы не умеют нормально рендерить субтитры.

anonymous
()

нет добавления титров

https://vk.com/faq13981

Как добавить субтитры? Вы можете добавить к своему видео до пяти дорожек субтитров на разных языках (в полной версии сайта).

Сам проверить не могу.

boowai ★★★★
()
Ответ на: комментарий от boowai

boowai, ты прав - действительно туда можно добавлять субтитры, вот так поворот! Спасибо.

P.S.: кидаю ссылку на яндекс.диск, может кого заинтересует эта тема. https://yadi.sk/d/bGNwKdsOMos3ow

veselipjan
() автор топика
Последнее исправление: veselipjan (всего исправлений: 1)
Ответ на: комментарий от RazrFalcon

всё равно потребуется полное перекодирование

Да, но не реалтаймовое. У автора возникла проблема, как я понял, что с экрана в реалтайме не успевает кодировать.

no-such-file ★★★★★
()
Ответ на: комментарий от Harald

Для VapourSynth:

import vapoursynth as vs
core = vs.get_core()
core.max_cache_size = 300
video = core.ffms2.Source(source='input.mkv')
hardsub = core.sub.TextFile(clip=video, file='sub.srt')
hardsub.set_output()
vspipe --y4m script.vpy - | ffmpeg -i pipe: -c:v libx264 -preset slow -crf 18 output.mkv
Намучался же я с ним. А все из-за того, что отсебятину городить пытаюсь.

anonymous
()
Ответ на: комментарий от veselipjan

кидаю ссылку на яндекс.диск, может кого заинтересует эта тема

Был бы mp4 с moov атомом в начале, я бы посмотрел немного. А так файл будет читабелен только после полной загрузки всех 500 мб. Потому mp4 - зло.

-c copy -movflags faststart
А еще ffmpeg (и его обертки) при сохранении в mp4 использует свой некачественный aac кодер, особенно в режиме cbr, а он по умолчанию.

anonymous
()
Ответ на: комментарий от anonymous

Лишь бы не поотстойнее. Но таки жать в x265 и vp9, особенно HD, придется до скончания времен.

anonymous
()
Ответ на: комментарий от anonymous

Это пример, как вшивать субтитры. Про параметры кодирования можно почитать по другой ссылке на том же ресурсе

Harald ★★★★★
()

теперь хочу поделиться этим

Рутрекер.

Во вконтакте всё впорядке, но нет добавления титров

Нет или ты не понял как? Я конечно знаю что вк отстой, но неужели настолько?

KillTheCat ★★★★★
()
Ответ на: комментарий от Deleted

Буду знать что советовать посмотреть каликаирам

Ничего. Вот женятся, теща им устроит тренировки на даче. Бабы же хотят только цветочки поливать, а мужики чтоб вкалывали.
Если, конечно, не повезет оказаться другой ориентации.

anonymous
()
Ответ на: комментарий от anonymous

К счастью, это можно обойти и не скачивать весь файл. Надо просто скачать начало и хвост. curl умеет качать произвольный диапазон. А потом склеить начало и хвост. Но этого недостаточно - файл будет нечитаемым все равно. Между началом и хвостом надо создать нули, равные размер файла-(начало+хвост). Получается как бы недокачанный файл как в торрент клиенте, с опциями качать последовательно и конец.

Сначала нужно узнать размер файла. URL взять из браузера: начать закачку mp4, скопировать адрес, остановить и удалить закачку.
curl -I 'URL'
Content-Length: 526605179 значит столько байт. Теперь качаем первые 20 мб.
20 мб*1024=20480 кб*1024=20971520+1 байт (+1, так как нумерация начинается с нуля)
curl -r 0-20971520 'URL' > 1
Теперь качаем хвост длиной 5 мб.
5 мб*1024=5120 кб *1024=5242880 байт
526605179-5242880=521362299
curl -r 521362299-526605179 'URL' > 3
часть 1 имеет размер 20971521 байт
часть 3 имеет размер 5242880 байт
общий размер 526605179 байт
находим размер части 2
20971521+5242880=26214401
526605179-26214401=500390778
часть 2 должна иметь 500390778 байт нулей
их можно создать так
dd if=/dev/zero of=2 bs=1 count=500390778 status=progress
но из-за маленького bs (размера сектора) это будет очень медленно (со скоростью 100 кбайт/с, займет 1,5 часа)
хорошо, если можно сократить. пропорционально увеличить bs (это увеличит скорость) и уменьшить count. к сожалению это число почти не сокращается. максимум в два раза. ждать 45 минут тоже не хочется. Поэтому я создал разряженный файл
dd if=/dev/zero of=2 bs=1 count=0 seek=500390778
заархивировал его rar архиватором (который не поддерживает разряженные файлы) и разархивировал, чтобы нули стали настоящие. Теперь склеиваем
cat 1 2 3 > 4.mp4
теперь файл 4.mp4 в середине содержит нули и читается софтом. однако он остается некорректным (недокачанным). можно прогнать его через mkvtoolnix, например. это уменьшит размер до реального (в отличии от прогона через ffmpeg -c copy, mkvtoolnix убирает пустые значения). длительность останется прежней. если переместить ползунок плеера на недокачанный фрагмент, плеер остановится.
к сожалению 20 мб начала это слишком мало. всего 1,5 минуты. недостаточно, чтобы составить впечатление о материале. придется увеличить размер и повторять расчеты заново.

Конечно, проще скачать 500мб, чем мучиться с расчетами. Но это методика может помочь в других более актуальных случаях. Когда размер mp4 видео очень большой, а скорость низкая. Разумеется всегда сначала надо попробовать скачать начало браузером и посмотреть файл в mediainfo. Потому что иногда бывает, что moov атом располагается в начале и все вышеперечисленные манипуляции будут не нужны. В этом случае файл называется оптимизированным для стриминга. Да, без корректного хвоста mp4 файл может быть нечитаем. Вот почему нельзя захватывать в этом формате. К сожалению, некоторые видеокамеры и смартфоны пишут в этом формате. При несштатном завершении (разряде батареи, я сам с таким сталкивался) аналог хвоста приходится искать среди доноров (аналогичных файлов), для этого есть спец софт или возня в hex редакторе.

anonymous
()
Ответ на: комментарий от veselipjan

Оригинальная частота видео 23.976, а не 29.97 (каждый 5-ый кадр дубль). Судя по логотипу DivX video, кто-то постарался до тебя. Обычное явление. Надо бы фильтр применить:

-vf decimate
Хотя, ависинтовский TDecimate(mode=2, rate=23.976), конечно, лучше.

может кого заинтересует

Американское давно уже не перевариваю.

Денис.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.