Minha pergunta, eu acho, é bem simples...
Às vezes gosto de baixar arquivos MKV grandes de um servidor web meu e reproduzi-los durante o download. No entanto, se eu fizer isso em arquivos MKV que transcodifiquei, muitas vezes o arquivo mostrará que é muito mais curto do que realmente é e, depois de chegar ao fim, ele continuará reproduzindo e exibirá um horário incorreto... por exemplo ele exibirá 2:50/2:50, mas continuará jogando; no entanto, se eu tentar retroceder com as teclas de seta, o player irá travar ou voltar ao início do arquivo.
Então, como posso mover todos os metadados para o início do arquivo durante a codificação, para que o player saiba quanto tempo o arquivo tem sem ter tudo?Você pode fazer isso com o mp4
formato usando-movflags faststart
, mas como fazer isso mkv
?
Sinto muito se isso já foi perguntado e respondido em outro lugar, não consegui pensar em palavras-chave melhores do que as que usei e as que usei não produziram resultados.
Responder1
A fundação Matroska oferece uma ferramenta,mkclean, que executa uma tarefa semelhante ao que qt-faststart faz para MOV/MP4s.
Sintaxe:
mkclean in.mkv out.mkv
Isso irá regenerar o índice de dicas. Para manter as sugestões originais,
mkclean --keep-cues in.mkv out.mkv
FFmpeg também pode fazeresse, com algumas suposições, por parte do usuário.
ffmpeg -i in.mkv -c copy -reserve_index_space 50k out.mkv
onde o reserve_index_space
valor em bytes é o tamanho necessário para o índice. 50k
bytes é o tamanho sugerido para 1 hora de mídia.
Responder2
Construindo em cimaA resposta de Gyan, mkclean é a ferramenta certa para otimizar MKVs para streaming. No entanto, notei algumas peculiaridades na forma como o mkclean produzia arquivos, então fiz um fork:https://github.com/XMB5/mkclean-pragmatic
Exemplo de uso:mkclean test.mkv test_streaming_optimized.mkv
Aqui estão alguns trechos do leia-me:
Antecedentes (por que precisamos do mkclean em primeiro lugar)
Para transmitir arquivos mkv, o player de vídeo precisa ler oelemento de dicas, uma parte do arquivo que mapeia carimbos de data/hora de vídeo para deslocamentos de bytes. Essas compensações permitem que o player de vídeo busque carimbos de data/hora em todo o vídeo, sem adivinhar a localização do byte no arquivo.
Normalmente, o elemento cues está localizado no final de um arquivo matroska (vejadiagrama de estrutura matroska). Isso ocorre porque o aplicativo que cria o mkv grava todos os dados de vídeo primeiro e só depois pode saber a localização exata dos bytes do conteúdo do vídeo.
No entanto, ter o elemento de dicas no final do arquivo não é o ideal: o reprodutor de vídeo deve ler o cabeçalho de busca no início do arquivo, depois buscar o final do arquivo para ler as informações das dicas e, em seguida, buscar novamente para ler. o conteúdo do vídeo. Com o streaming HTTP, isso equivale a três solicitações separadas, que adicionam alguns segundos de atraso em comparação com uma solicitação.
mkclean
reestrutura um arquivo mkv para que o elemento cues esteja no início, permitindo que o vídeo comece a ser reproduzido mais cedo.
Mudanças técnicas no fork (em comparação com o mkclean original)
- Defina a versão doctype como
matroska v4
padrão- Defina a versão de leitura do documento como 2 (para compatibilidade, caso contrário não funcionará com vlc, mpv, ffmpeg, etc.)
- Desativar otimizações por padrão (equivalente ao
--no-optimize
sinalizador mkclean normal) - Ignorar quando os carimbos de data/hora do cluster não seguem em ordem cronológica
- A alteração forçada dos carimbos de data e hora faz com que o mpv avise "Carimbo de data e hora de vídeo inválido: 10.085000 -> 10.060000"