Я дергал себя за волосы, пытаясь понять, как именно это сделать. У меня есть видеофайлы, которые я передаю через 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.Dollar.Man.mkv
[AVFilterGraph @ 0x14f1360] Error initializing filter 'subtitles' with args 'Trigun.S01E01.The.60.Billion.Double.Dollar.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 канала. В любом случае спасибо за помощь! Я надеюсь, что это может как-то помочь кому-то еще, кто испытывает затруднения, выясняя это самостоятельно!