Como adicionar e remover legendas em um arquivo MKV?

28

Eu tenho um arquivo MKV de boa qualidade que possui várias opções de legenda. Quero adicionar um arquivo de legenda adicional à lista. Estou usando o OSX.

Algumas pesquisas online me levaram a usar conversores de vídeo e basicamente recodificamos o filme em um novo arquivo. Isso parece realmente um exagero para mim. Além disso, posso perder as legendas anteriores e alguma qualidade de imagem ao longo do caminho.

nute
fonte

Respostas:

41

Removendo legendas:

mkvmerge -o output.mkv input.mkv -S # remove all subtitle tracks
mkvmerge -o output.mkv input.mkv -s 3,4 # remove tracks 3 and 4
mkvmerge -o output.mkv input.mkv -s '!3' # remove all subtitle tracks except 3
mkvmerge -i input.mkv # show track numbers

Adicionando legendas:

mkvmerge -o output.mkv input.mkv subs.srt
mkvmerge -o output.mkv input.mkv --language 0:ger --track-name 0:German subs.srt

Extraindo legendas:

mkvextract tracks input.mkv 3:subs.srt
for f in *.mkv; do
  sub=$(mkvmerge -i "$f" | awk '$4=="subtitles"{print;exit}')
  [[ $sub ]] || continue
  [[ $sub =~ S_TEXT/ASS ]] && ext=ass || ext=srt
  track=$(awk -F '[ :]' '{print $3}' <<< "$sub")
  mkvextract tracks "$f" "$track:${f%mkv}$ext"
done

mkvmerge e mkvextract podem ser instalados com brew install mkvtoolnix.

Lri
fonte
2
A GUI do MKVMerge já está disponível no Mac OS X, mas, no entanto, é uma boa maneira de fazê-lo para os fãs de console.
Bora
Observe que os comandos acima para adicionar legendas também definem as legendas como "ativadas por padrão" ao reproduzir o arquivo. (Este sinalizador pode ser confirmado usando a GUI do MKVMerge.) Para evitar isso, use --default-track '0:0'.
Mathias Bynens
4

Existem duas maneiras básicas de mostrar legendas. Você pode codificar os pixels no próprio vídeo. Isso é chamado de "hardsubbing". A vantagem aqui é a simplicidade do reprodutor de vídeo, é apenas um fluxo de vídeo. As desvantagens são que você teve que recodificar o vídeo, o que leva tempo e tem alguma perda de fidelidade. Se você obtém uma tradução melhor, bem, são pixels no vídeo. E você pode ter apenas um idioma.

O que é um pouco melhor é o "softsubbing", que consiste em ter um arquivo de texto em algum lugar, separado do fluxo de vídeo. Existem muitos formatos diferentes de arquivos de legenda, mas todos eles têm "texto, começam a que horas, removem a que horas". Alguns possuem recursos adicionais, como cores e orientação na tela. A vantagem disso é que você pode ter vários idiomas (pense em um DVD, você tem vários idiomas disponíveis) e pode corrigir erros de digitação no arquivo. E se você não precisa de legendas, basta desativá-las.

Os Softsubs podem ser arquivos separados - a maioria dos players procura automaticamente legendas com o mesmo nome (extensão diferente) do vídeo principal. Ou determinados formatos de arquivo de contêiner (como MKV) podem incorporá-los. Confira MKVtoolnix (existe uma porta mac) para obter ferramentas de arquivo MKV. Isso deve permitir a incorporação de softsubs sem recodificação.

Observe que nem todos os players podem suportar todos os formatos. Minha experiência é que o XBMC tem problemas com arquivos SSA, mas os arquivos SRT muito mais simples estão bem. O VLC reproduzirá qualquer coisa, se houver suporte na sua plataforma.

Rich Homolka
fonte
1
Boa resposta, embora se deva notar que algumas legendas eletrônicas - especialmente legendas de DVD - são baseadas em bitmap, e não em texto. O principal efeito que é torná-los quase impossível editar -_-
evilsoup
@evilsoup obrigado, não sabia disso.
Rich Homolka
1
Sim, IDX + SUB VOBsub , em que IDX é um arquivo de texto, mas SUB contém bitmaps.
Karan
link alterado para a página de download direto.
Bora
0

Sei que essa é uma pergunta antiga e user495470a resposta foi aceita a partir de 2013, mas como parte da pergunta é sobre como adicionar legendas aos arquivos, eu queria adicionar esta nova adição.

Basicamente, eu precisava mesclar dezenas de .asslegendas em arquivos MKV com nomes semelhantes, portanto, executar este comando de cada vez não era suficiente. Então, criei esse script simples do Bash que procurará no diretório atual a partir do qual ele é executado .asse os mesclará conforme o esperado.

find -E . -maxdepth 1 -type f -iregex '.*\.(ASS|SRT)$' |\
  while read FILEPATH
  do
    DIRNAME=$(dirname "${FILEPATH}");
    BASENAME=$(basename "${FILEPATH}");
    FILENAME="${BASENAME%.*}";
    EXTENSION="${BASENAME##*.}"
    mkvmerge -o "/Users/jake/${FILENAME}"-NEW.mkv "${FILENAME}".mp4 --language 0:eng --track-name 0:English "${FILENAME}"."${EXTENSION}"
  done

Obviamente, esse script simples pressupõe que as legendas são em inglês e as mescla como tal, mas que podem ser ajustadas manualmente conforme a necessidade de uso; o grande problema de mesclar automaticamente as legendas com o MKV é resolvido por um script simples como este.

JakeGould
fonte