Como converter vídeos MKV em vídeos MP4 sem perdas compatíveis com dispositivos iOS no Windows?


10

Eu sou novo no FFmpeg (Windows) e preciso de ajuda.

Quero converter meus MKVs para MP4 com a menor perda de qualidade possível. Os MKVs são feitos com MakeMKV e contêm, entre outros, a trilha sonora do DTS. Eles são sem perdas. A razão pela qual desejo converter, é que pretendo transmiti-lo para iPads e Apple TV. Os iPads não suportam DTS e MKVs. Os MKVs são DVDs e Blu-Ray. Os MKVs contêm vídeo, trilhas sonoras e legendas.

Eu tentei isso, mas não obtive som devido à trilha sonora do DTS:

ffmpeg -i input.mkv -c:v copy -c:a copy output.mp4

Alguém pode me ajudar?

Quais codecs devo usar? MP4 é o melhor para a Apple?


1
Existem versões específicas para iPad e Apple TV que você está segmentando ou deseja oferecer suporte a todas elas?
Llogan 24/05

2
Nota: MP4 não é um codec. É apenas um formato de arquivo (um "contêiner").
Slhck 24/05

Eu tenho o mais novo iPod Air. Eu tenho a mais nova Apple TV. Eu sei MP4 é um recipiente e não um codec :)
Striky

Inclua algumas informações sobre uma de suas entradas típicas. A saída completa do console de ffmpeg -i input.mkvserá suficiente.
llogan 24/05

Tentei ffmpeg -i input.mkv -c: v copy -c: uma cópia output.mp4 Isso foi reproduzido, mas não obteve som, uma vez que a apple não reproduz DTS. Tentei também ffmpeg -i input.mkv -strict experimental -c: v copy -c: a aac -b: a 192k -q: a 6 output.mp4, mas o filme (vídeo e som) não estava sendo reproduzido sem problemas no meu iPad Air (em fluxo e baixado).
Striky

Respostas:


22

MP4 é realmente o melhor formato para dispositivos e software da Apple. De fato, o DTS também não é suportado, muitos arquivos de vídeo MP4 contêm duas faixas de áudio, uma DTS e uma AAC.

Existem vários codificadores disponíveis, todos eles documentados no wiki ffmpeg . O codec disponível depende de como o ffmpeg foi compilado. O libfdk_aac fornecerá os melhores resultados, mas, como esse codec não é gratuito, ele nem sempre está disponível.

Coisas que você pode tentar (eu as coloco na ordem da minha qualidade percebida, melhor primeiro)

ffmpeg -i input.mkv -c:v copy -c:a libfdk_aac -b:a 128k output.mp4
ffmpeg -i input.mkv -strict experimental -c:v copy -c:a aac -b:a 192k output.mp4
ffmpeg -i input.mkv -c:v copy -c:a libfaac -b:a 192k output.mp4

Se você deseja manter a faixa DTS também, use a -mapbandeira.

Não é diretamente usado para OP, mas o subler do programa OS X facilita esse processo.

EDIT: Comentários tl; dr? OP resolveu o problema com o seguinte comando

ffmpeg -i input.mkv -strict experimental -map 0:0 -map 0:1 -map 0:2 -map 0:3 -c:v copy -c:a aac -b:a 384 -c:s copy output.mp4

DICA: se as -c:s copylegendas não funcionarem, tente -c:s mov_text.
Me salvou em várias ocasiões.


Eu não acho que o modo VBR do codificador interno AAC funcione conforme o esperado. A última vez que verifiquei que estava quebrado. Melhor ir com CBR, e usar VBR para os outros encoders ( libfdke libfaac)
slhck

Eu também li que libfdk_aac dará o melhor resultado. Fiz o download da versão estática de 32 bits para Windows (git-9722a6a (24-05-2014)). Como posso verificar se tenho o codec libfdk? Edit: Eu recebo o codificador desconhecido 'libfdk_aac'. ONDE posso baixá-lo ou existe um codec de áudio quase tão bom?
Striky

Tentei o ffmpeg -i input.mkv -c: v copy -c: a libfdk_aac -b: uma saída de 128k.mp4 e o ffmpeg -i input.mkv -c: v copy -c: a libfaac -b: uma saída 192k .mp4 Não vai :(
Striky 24/05

@Striky "Não vá :(" Eu tentei o último comando com um ffmpeg fresco do Homebrew, trabalha para mim Você pode dar mais detalhes sobre por que ele não funciona para você.?
jornane

@slhck: Eu apenas tentei as -c:a aac -q:a 6configurações e comparei o resultado com -c:a libfaac -b:a 192k, na minha opinião, o codec aac oferece melhores resultados que o libfaac , mas, como os codecs estão em desenvolvimento, isso pode mudar. O libfdk_aac provavelmente fornecerá resultados ainda melhores, mas não o tenho disponível no momento.
jornane 24/05

0

Sei que essa é uma pergunta antiga - e já tem uma resposta - mas eu queria compartilhar alguns comandos que estou usando com o FFmpeg no macOS.

Um vídeo x264 codificado em MP4 com áudio AAC de um MKV

Conversão básica de um MKV com um MP4, mas convertendo o áudio para AAC em 128k. Observe os mapeamentos: -map 0:0significa a primeira 0faixa ( ) da entrada de origem ( 0) e -map 0:1a segunda 1faixa ( ) da mesma entrada de fonte ( 0). Eu gosto de fazer isso nos casos em que existem várias faixas de áudio para que eu pudesse fazer algo como selecionar -map 0:3para obter a terceira faixa.

ffmpeg -i input.mkv \
       -c:v copy \
       -c:a aac -b:a 128k \
       -map 0:0 -map 0:1 \
       output.mp4 \
       ;

Um vídeo HEVC / x265 codificado em MP4 com áudio AAC de um MKV

Isso é semelhante ao comando x264 acima, mas usa o HEVC / x265 para obter um tamanho de arquivo menor com o mesmo vídeo - se não com melhor qualidade - do MKV de origem. Observe que eu prefiro escalar vídeos do iOS para 720 ao usar o HEVC / x265; a qualidade da reprodução sem muito ruído é sólida no meu MacBook, iPad e iPhone. Certifique-se de que seu hardware e sistema operacional suportem a reprodução HEVC / x265. E esteja avisado: o HEVC / x265 consome muita CPU; portanto, se sua máquina não tiver muita energia da CPU, pode levar até um dia para codificar 90 minutos de vídeo.

ffmpeg -i input.mkv \
       -vf scale=-1:720 \
       -c:v libx265 -crf 20 \
       -c:a aac -b:a 128k \
       -threads 4 \
       -tag:v hvc1 \
       -map 0:0 -map 0:1 \
       output.mp4 \
       ;

Aqui está um detalhamento de cada um dos parâmetros principais, exceto os arquivos de entrada e saída.

  • -vf scale=-1:720: Dimensione o vídeo para 720 de altura e calcule automaticamente a largura. Note-se que FFmpeg pode sufocar algumas MKVs por razões que eu não estou 100% claro no que você teria que definir explicitamente a largura com algo parecido com isto: -vf scale=1280:720. Experimente e veja o que funciona para você.
  • -c:v libx265 -crf 20: O libx265é o codec de codificação de vídeo. O -crf 20é o CRF (fator de taxa constante) . O CRF padrão, se você não especificar, é 28, mas - a partir de agora - encontre a qualidade praticamente… Meh. Prefiro 20, pois é um equilíbrio muito bom entre qualidade e tamanho do arquivo.
  • -threads 4: Gosto de especificar contagens de threads. 4 é o que meu sistema pode lidar agora, mas às vezes eu o reduzo para 2 ou 3. Número maior é mais rápido se você tiver CPUs suficientes para lidar com isso.
  • -tag:v hvc1: A configuração de metadados mágicos a ser implementada para os dispositivos iOS reproduzirem corretamente vídeos HEVC / x265.

E é sobre isso!

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.