Estou tentando adicionar legendas de texto a um contêiner .mp4 usando ffmpeg:
ffmpeg -i input.mp4 -i input.srt -map 0.0 -map 0.1 -map 1.0 output.mp4
Quando estou tentando executar esta linha, ocorre um erro:
A quantidade de mapas de fluxo deve corresponder ao número de fluxos de saída.
Se eu tentar mudar o mp4 para mkv (embora o mp4 suporte legendas de texto), assim:
ffmpeg -i input.mp4 -i input.srt -map 0.0 -map 0.1 -map 1.0 output.mkv
Mapeia corretamente os fluxos, mas fornece um erro:
Codificador (codec id 94210) não encontrado para o fluxo de saída # 0.2
Quando eu lanço
ffmpeg -codecs
Percebo que o codec srt é suportado como decodificador e codificador, no entanto, não tenho certeza do que é usado para a codificação de subs mp4 e mkv e se preciso ativá-lo ou compilar separadamente.
-c:s copy
não-c:s mov_text
.NOTA: Esta solução "grava as legendas" no vídeo, para que todos os visualizadores do vídeo sejam forçados a vê-las.
Use a
libass
biblioteca (verifique se a instalação do ffmpeg tem a biblioteca na configuração--enable-libass
).Primeiro converta as legendas para o
.ass
formato:Em seguida, adicione-os usando um filtro de vídeo:
fonte
libass
extensões se ausentes nos sistemas Debian com o `apt update && apt install libass-dev".Você está tentando misturar legendas como um fluxo de legendas. É fácil, mas é usada uma sintaxe diferente para MP4 (ou M4V) e MKV. Nos dois casos, você deve especificar o codec de vídeo e áudio ou apenas copiar o fluxo, se quiser adicionar legendas.
MP4:
MKV:
fonte
O contêiner MKV suporta codecs de vídeo e áudio Praticamente qualquer coisa e também suporta legendas e menus de DVD. Assim, você pode simplesmente copiar codecs de entrada de vídeo para saída de vídeo com contêiner MKV com legendas. Primeiro, você deve converter o formato de legenda SRT para ASS
e incorporar legendas do ASS ao vídeo
Também trabalhou com arquivo VMW.
veja a página wiki Comparação de formatos de contêiner
fonte
O ffmpeg suporta o
mov_text
codificador de legenda, que é praticamente o único suportado em um contêiner MP4 e reproduzível pelo iTunes, Quicktime, iOS etc.Sua linha seria:
ffmpeg -i input.mp4 -i input.srt -map 0:0 -map 0:1 -map 1:0 -c:s mov_text output.mp4
fonte
Tentei usar o MP4Box para esta tarefa, mas ele não suportava o M4V com o qual estava lidando. Consegui incorporar o SRT como legendas suaves com ffmpeg com a seguinte linha de comando:
ffmpeg -i input.m4v -i input.srt -vcodec copy -acodec copy -scodec copy -map 0:0 -map 0:1 -map 1:0 -y output.mkv
Como você, eu tive que usar um arquivo de saída MKV - não consegui criar um arquivo M4V.
fonte
Fornecerei uma resposta simples e geral que funcione com qualquer número de áudios e legendas srt e respeite os metadados que podem incluir o contêiner mkv . Assim, ele adiciona as imagens que a matroska pode incluir como anexos (embora não outros tipos AFAIK) e as converte em faixas; você não poderá assistir, mas eles estarão lá (você pode desmembrá-los). Ah, e se o mkv tiver capítulos o mp4 também.
Como você pode ver, é tudo sobre o
-map 0
que diz ao FFmpeg para adicionar todas as faixas, incluindo metadados, capítulos, anexos etc. Se houver uma "faixa" não reconhecida (o mkv permite anexar qualquer tipo de arquivo), ele será termine com um erro.Você pode criar um lote simples
mkv2mp4.bat
, se você costuma fazer isso, para criar um mp4 com o mesmo nome que o mkv . Seria melhor com controle de erro, um nome de saída diferente, etc., mas você entendeu.Agora você pode simplesmente executar
E criará "Vídeo com legendas etc.mp4" com o máximo de informações incluídas.
fonte
Exemplo simples:
Substitua apenas as variáveis linux
fonte
Esta é a razão pela qual o mkv é um contêiner tão bom, especialmente agora que está maduro:
fonte