Запись субтитров с помощью ffmpeg в поток rtmp с использованием mkv со встроенными субтитрами .ass

894
KittiMeer

Я дергал себя за волосы, пытаясь понять, как именно это сделать. У меня есть видеофайлы, которые я передаю через rtmp с помощью ffmpeg, в который я пытаюсь записать встроенные (?) .Ass субтитры. У меня это отлично работает с субтитрами на основе картинок, но .ass был проклятием моего существования в последние несколько месяцев, и я почти сдался. Я очень плохо знаком с потоковым вещанием и все еще учусь, и, несмотря на все руководства и все, что я читал в Интернете, я просто не могу это сделать ..

Вот часть файла примера:

Duration: 00:24:37.51, start: 0.000000, bitrate: 1674 kb/s Chapter #0:0: start 0.000000, end 1354.895000 Metadata: title : Main Chapter #0:1: start 0.000000, end 90.000000 Metadata: title : ED Chapter #0:2: start 1354.979000, end 1386.969000 Metadata: title : Preview Stream #0:0(eng): Video: h264 (High), yuv420p, 704x480 [SAR 1:1 DAR 22:15], SAR 10:11 DAR 4:3, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (defaul Stream #0:1(eng): Audio: aac (LC), 44100 Hz, 5.1, fltp (default) Metadata: title : AAC 5.1 Stream #0:2(jpn): Audio: aac (LC), 44100 Hz, 5.1, fltp Metadata: title : AAC 5.1 Stream #0:3(eng): Subtitle: ass (default) Metadata: title : OP/ED Stream #0:4(eng): Subtitle: ass Metadata: title : Full 

У меня есть скрипт, который может делать субтитры на основе картинок, когда у меня есть:

-filter_complex "[0:v][0:6]overlay=(W-w)/2:H-h[v]" \ -map "[v]" \ -map 0:2 \ 

Затем я вернулся к предыдущему шаблону и нашел:

-vf subtitles="$i":force_style='FontName=DejaVu  Sans':force_style='Fontsize=15' \ 

Тем не менее, это все еще не работает. Я пытался разместить его сразу после ввода и перед выводом. Все еще ничего не работает, как я надеялся, и все, что я получаю, это ответы вроде этого:

[Parsed_subtitles_0 @ 0x209c1a0] Unable to open [file].mkv [AVFilterGraph @ 0x208e7c0] Error initializing filter 'subtitles' with args  '[file].mkv:force_style=FontName=DejaVu 

Если потребуется дополнительная информация, я с удовольствием предоставлю ее. Опять же, я очень новичок во всем этом и даже не знаю, предоставляю ли я нужную информацию прямо сейчас ... Это мое последнее средство, так как я пытался читать руководства, но, похоже, ничего конкретного что я пытаюсь сделать У меня ушло почти 5 месяцев, чтобы понять, как заставить работать субтитры на основе картинок ... Любая помощь приветствуется. Спасибо.

ОБНОВИТЬ

Перебрав все виды разных команд, я начал убирать

:force_style='Fontsize=15' 

от линии выше. Субтитры теперь отображаются в потоке, но я не могу понять, как указать, какой поток субтитров отображать. Я пытался использовать -map, чтобы заставить его, но получить:

 Stream mapping: Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264)) Stream #0:2 -> #0:1 (aac (native) -> aac (libfdk_aac)) Stream #0:4 -> #0:2 (ass (native) -> ? (?)) 

Я также попытался это, что я нашел после поиска

 -vf subtitles="$i":si=4 

это должно было позволить мне выбрать альтернативный поток субтитров, но это также привело к ошибке

[Parsed_subtitles_0 @ 0x15720c0] Unable to locate subtitle stream in Trigun.S01E01.The.60.Billion.Double.Doll‌​ar.Man.mkv [AVFilterGraph @ 0x14f1360] Error initializing filter 'subtitles' with args 'Trigun.S01E01.The.60.Billion.Double.Doll‌ar.Man.mkv:si=4:force_style=FontName=DejaVu Sans' 

так ... угу? немного прогресса?

ПОСЛЕДНЕЕ ОБНОВЛЕНИЕ!

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

si= 

Правильно, но я подумал, что мне нужно указать 4 в качестве 5-го потока в файле, когда мне фактически нужно было дать ему 1, чтобы выбрать 2-й поток субтитров ...

 -vf subtitles="$i":si=1:force_style='FontName=DejaVu Sans' 

работает просто отлично, и у меня есть правильные субтитры, которые записываются прямо в поток.

Для справки вот что я использую:

ffmpeg -re -i [file].mkv -map 0:v -map 0:2 -vf subtitles="$i":si=1:force_style='FontName=DejaVu Sans' -c:v libx264 -pix_fmt yuv420p -profile:v high -preset veryfast -crf 23 -maxrate 1.5M -bufsize 2.5M -threads 0 -c:a libfdk_aac -ac 2 -af "volume5.5" -f flv -b:v 900k -maxrate 1.5M -bufsize 2M rtmp://[server]/[mountpoint]/[key] 

Я продолжаю настраивать и настраивать по мере необходимости. Например, была добавлена ​​громкость, потому что во многих видео, которые мне попадались, звук очень тихий, возможно, потому, что я конвертирую многоканальную дорожку в 2 канала. В любом случае спасибо за помощь! Я надеюсь, что это может как-то помочь кому-то еще, кто испытывает затруднения, выясняя это самостоятельно!

0
Это, вероятно, проблема символов в имени файла или пути. Приведите пример одного. Gyan 6 лет назад 0
Файл: kitti @ video: ~ / vids / anime / trigun / Trigun.S01E01.The.60.Billion.Double.Dollar.Man.mkv KittiMeer 6 лет назад 0
Вручную используйте полный путь и попробуйте. (без переменной sub) Gyan 6 лет назад 0
Попробовал это и все еще получил ошибку. После вчерашней полной настройки и тестирования я удалил `: force_style = 'Fontsize = 15'`, и теперь отображаются субтитры, но, поскольку есть несколько дорожек субтитров, он выбирает только значение по умолчанию - 0: 3. , Я не могу понять, как сказать, чтобы заставить поток 0: 4. KittiMeer 6 лет назад 0
Я пропустил это. Вам нужен только один force_style. Разделите несколько параметров запятой. Добавьте `si = 1`, чтобы выбрать второй поток sub. Gyan 6 лет назад 0
Хорошо, это было так! Я знал, что это должно быть что-то до боли простое! `-vf subtitles =" $ i ": si = 1: force_style = 'FontName = DejaVu Sans'` - вот что помогло !! Спасибо! Мне просто интересно сейчас, есть ли способ легко сделать эту переменную для автоматического выбора полных английских субтитров, но, глядя на некоторые из моих других файлов, я замечаю, что у них тоже есть английская дорожка по умолчанию, которая отображается только при наличии текста на видео, которое нужно перевести. Думаю, я доволен этим результатом. Еще раз спасибо! KittiMeer 6 лет назад 0

0 ответов на вопрос

Похожие вопросы