Burn-in legendas com avconv?


4

Eu tenho um arquivo mkv e quero convertê-lo em um arquivo mpg compatível com DVD com avconv. Como eu também posso gravar em um fluxo de legendas do mesmo arquivo mkv?

avconv -i input.mkv -map 0:0 -map 0:1 -target pal-dvd -aspect 16:9 -q:v 1 -acodec mp2 -ac 2 -ab 128k output.mpg

Respostas:


5

Legendas baseadas em texto

ffmpeg tem um subtitles filtro que pode gravar arquivos SRT no fluxo de vídeo. Você precisa do ffmpeg compilado com --enable-libass Apesar. Eu não acho que Libav tem algo parecido, pelo menos olhando o filtros disponíveis .

Você primeiro precisa extrair as legendas. -map 0:s:0 seleciona o primeiro fluxo de legendas para a saída e -c:s:0 seleciona o codec para isso - só para ter certeza de que é realmente SRT.

ffmpeg -i input.mkv -an -vn -map 0:s:0 -c:s:0 srt subtitles.srt

Então, queime-os.

ffmpeg -i input.mkv -map 0:0 -map 0:1 -target pal-dvd -aspect 16:9 -q:v 1 \
-c:a mp2 -ac 2 -b:a 128k -filter:v subtitles=subtitles.srt output.mpg

Nota:

  • O comando acima está assumindo que fluxos 0:0 e 0:1 na sua entrada são os fluxos de vídeo e áudio, respectivamente. Se você quiser impedir que as legendas sejam incluídas no arquivo de saída, você também pode adicionar -sn para desativá-los completamente.

  • Você tem que mudar -ab para -b:a, uma vez que o primeiro é uma opção inexistente para o ffmpeg.


Legendas baseadas em imagem

Caso sua entrada tenha legendas baseadas em imagem como HDMV PG (parece que o MakeMKV está criando essas, e outras ferramentas não conseguem extraí-las), você pode tentar usar o filtro de sobreposição para gravá-las em:

ffmpeg -i input.mkv -filter_complex "[0:v][0:s]overlay[v]" -map [v] -map 0:a \
-target pal-dvd -aspect 16:9 -q:v 1 -c:a mp2 -ac 2 -b:a 128k output.mpg

Isso também é explicado na Wiki do FFmpeg .

Caso suas legendas tenham dimensões diferentes do filme original (por exemplo, porque o fluxo de vídeo foi reduzido, mas as legendas não foram), você pode tentar usar a -canvas_size opção para definir o tamanho.


Obrigado pela sua ajuda, mas a extração não funciona. Eu recebo a seguinte mensagem de erro "Erro ao abrir o codificador para o fluxo de saída # 0: 0 - talvez parâmetros incorretos, como bit_rate, taxa, largura ou altura". O fluxo de legendas é anunciado como "Subtítulo: hdmv_pgs_subtitle". Você sabe qual é o problema?
user4811

THX! Eu também tentei isso, mas as legendas não aparecem e eu recebo a mensagem "sub2video: retângulo transbordando". Eu descobri que o problema é que a fonte foi convertida de 1080p para 720p, mas as legendas ainda são 1080p. É possível dimensionar o fluxo de legendas para 720p antes de sobrepor?
user4811

Sim, isso deveria ser possível. "[0:s]scale=-1:720[subs];[0:v][subs]overlay[v]" ou alguma coisa. Eu não posso testá-lo agora, mas algo assim deveria funcionar.
slhck

Porra, ainda recebe "sub2video: retângulo transbordando" e sem legendas na saída. Isso está correto ou? ffmpeg -i input.mkv -filter_complex "[0: s] scale = -1: 720 [subs]; [0: v] [subs] sobreposição [v]" -map [v] -map 0: a: 0 - alvo pal-dvd -aspecto 16: 9 -q: v 1 -c: a mp2 -ac2 -b: uma saída de 128k.mpg
user4811

A solução é o parâmetro "-canvas_size" para especificar a tela para legendas. Deve ser o primeiro parâmetro!
user4811
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.