Eu tenho puxado meu cabelo para fora tentando descobrir exatamente como fazer isso. Eu tenho arquivos de vídeo que estou transmitindo via rtmp usando ffmpeg que estou tentando gravar legendas incorporadas (?) .Ass em. Eu tenho trabalhado com legendas baseadas em imagens muito bem, mas tem sido a ruína da minha existência nos últimos meses e eu quase desisti. Eu sou muito novo em streaming e ainda aprendo e apesar de todos os guias e tudo que eu li online, eu simplesmente não consigo fazer isso ..
Aqui está parte de um arquivo de exemplo:
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
Eu já tenho um script que pode fazer legendas baseadas em imagens quando tenho:
-filter_complex "[0:v][0:6]overlay=(W-w)/2:H-h[v]" \
-map "[v]" \
-map 0:2 \
Voltei então a um modelo anterior e encontrei:
-vf subtitles="$i":force_style='FontName=DejaVu
Sans':force_style='Fontsize=15' \
No entanto, isso ainda não funciona. Eu tentei colocá-lo imediatamente após a entrada e antes da saída. Ainda nada funciona como eu esperava, e tudo que eu recebo são respostas como esta:
[Parsed_subtitles_0 @ 0x209c1a0] Unable to open [file].mkv
[AVFilterGraph @ 0x208e7c0] Error initializing filter 'subtitles' with args
'[file].mkv:force_style=FontName=DejaVu
Se mais alguma informação for necessária, será de bom grado fornecê-la. Novamente, sou muito novo em tudo isso e nem sei se estou fornecendo a informação certa agora ... Esse é o meu último recurso, já que tentei ler guias, mas nada parece ser específico para o que estou tentando fazer. Levei quase 5 meses para descobrir como conseguir legendas baseadas em imagens ... Qualquer ajuda é apreciada. Obrigado.
UPDATE
Depois de mexer com todos os tipos de comandos diferentes, comecei a remover
:force_style='Fontsize=15'
da linha acima. As legendas agora estão aparecendo no fluxo, mas não consigo descobrir como especificar qual fluxo de legendas exibir. Eu tentei usar o -map para forçá-lo, mas recebo:
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) -> ? (?))
Eu também tentei isso, que encontrei após uma pesquisa
-vf subtitles="$i":si=4
que aparentemente deveria me deixar escolher o fluxo de legendas alternativo, mas isso só resultou em um erro também
[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'
então ... yay? um pouco de progresso?
ÚLTIMA ATUALIZAÇÃO!
Eu estava perto, mas precisava de alguns esclarecimentos para ajudar a resolver isso.
si=
Estava correto, mas eu estava pensando que precisava especificar 4 como o quinto fluxo no arquivo, quando eu realmente precisava dar a ele 1 para selecionar o segundo fluxo de legendas ...
-vf subtitles="$i":si=1:force_style='FontName=DejaVu Sans'
funciona muito bem e eu tenho as legendas corretas sendo gravadas diretamente no fluxo.
Para referência, aqui está o que estou usando:
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]
Eu continuo a ajustar e ajustar conforme necessário. Por exemplo, o volume foi adicionado porque muitos vídeos que eu encontro têm um áudio realmente silencioso, talvez porque eu esteja convertendo uma faixa multicanal para 2 canais. De qualquer forma, obrigado pela ajuda! Espero que isso possa de alguma forma ajudar alguém que está tendo problemas para descobrir isso!
Tags video ffmpeg video-conversion rtmp