¿Cómo convertir videos MKV a videos MP4 sin pérdida que son compatibles con dispositivos iOS en Windows?

10

Soy nuevo en FFmpeg (Windows) y necesito ayuda.

Quiero convertir mis MKV a MP4 con la menor pérdida de calidad posible. Los MKV están hechos con MakeMKV y contienen, entre otros, la banda sonora de DTS. No tienen pérdidas. La razón por la que quiero convertir es que planeo transmitirlo a iPads y Apple TV. Los iPads no son compatibles con DTS y MKV. Los MKV son DVD y Blu-Ray. Los MKV contienen video, bandas sonoras y subtítulos.

He intentado esto, pero no recibo sonido debido a la banda sonora de DTS:

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

Alguien puede ayudarme?

¿Qué códecs debo usar? ¿MP4 es el mejor para Apple?

Striky
fuente
1
¿Hay versiones específicas de iPad y Apple TV a las que apunta, o desea admitirlas todas?
llogan
2
Nota: MP4 no es un códec. Es solo un formato de archivo (un "contenedor").
slhck
Tengo el iPod Air más nuevo. Tengo el último Apple TV. Sé que MP4 es un contenedor y no un códec :)
Striky
Incluya información sobre una de sus entradas típicas. La salida completa de la consola ffmpeg -i input.mkvserá suficiente.
llogan
Intenté ffmpeg -i input.mkv -c: v copy -c: a copy output.mp4 Esto se reprodujo pero no obtuvo sonido ya que Apple no reproduce DTS. También probé ffmpeg -i input.mkv -strict experimental -c: v copy -c: a aac -b: a 192k -q: a 6 output.mp4 pero la película (tanto de video como de sonido) no se estaba reproduciendo sin problemas en mi iPad Air (transmisión y descarga).
Striky

Respuestas:

22

MP4 es de hecho el mejor formato para dispositivos y software de Apple. DTS tampoco es compatible, muchos archivos de video MP4 contienen dos pistas de audio, una DTS y una AAC.

Hay múltiples codificadores disponibles, todos ellos documentados en la wiki de ffmpeg . El códec disponible depende de cómo se compiló ffmpeg. libfdk_aac le dará los mejores resultados, pero debido a que este códec no es libre, no siempre está disponible.

Cosas que puedes probar (las pongo en el orden de mi calidad percibida, mejor primero)

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

Si también desea conservar la pista DTS, use la -mapbandera.

No se usa directamente para OP, pero el subprograma del programa OS X hace que este proceso sea muy fácil.

EDITAR: Comentarios tl; dr? OP solucionó el problema con el siguiente 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

CONSEJO: si los -c:s copysubtítulos no funcionan, inténtalo -c:s mov_text.
Me salvó en múltiples ocasiones.

jornane
fuente
No creo que el modo VBR del codificador AAC interno funcione según lo previsto. La última vez que lo revisé estaba roto. Mejor vaya con CBR, y use VBR para los otros codificadores ( libfdky libfaac)
slhck
También he leído que libfdk_aac dará el mejor resultado. He descargado la versión estática de 32 bits para Windows (git-9722a6a (2014-05-24)). ¿Cómo puedo verificar si tengo el códec libfdk? Editar: me sale el codificador desconocido 'libfdk_aac'. ¿DÓNDE puedo descargarlo o hay un códec de audio casi tan bueno?
Striky
He intentado tanto ffmpeg -i input.mkv -c: v copy -c: a libfdk_aac -b: 128k output.mp4 y ffmpeg -i input.mkv -c: v copy -c: a libfaac -b: una salida de 192k .mp4 No ir :(
Striky
@Striky "No voy :(" Probé el último comando ffmpeg con un fresco de Homebrew, que funciona para mí ¿Puede dar más detalles sobre por qué no funciona para usted.?
jornane
@slhck: Acabo de probar la -c:a aac -q:a 6configuración y comparé el resultado con -c:a libfaac -b:a 192k, en mi opinión, el códec aac da mejores resultados que libfaac , pero dado que los códecs están en desarrollo, esto puede cambiar. libfdk_aac probablemente dará resultados aún mejores, pero no lo tengo disponible en este momento.
jornane
0

Sé que esta es una vieja pregunta, y ya tiene una respuesta, pero quería compartir algunos comandos que estoy usando con FFmpeg en macOS.

Un video x264 MP4 codificado con audio AAC desde un MKV

Conversión básica de un MKV con un MP4 pero convirtiendo el audio a AAC a 128k. Tenga en cuenta las asignaciones: -map 0:0significa la primera 0pista ( ) de la entrada de origen ( 0) y -map 0:1significa la segunda 1pista ( ) de la misma entrada de origen ( 0). Me gusta hacer esto en los casos en que hay varias pistas de audio, por lo que podría hacer algo como seleccionar -map 0:3para obtener la tercera pista.

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

Un video MP4 codificado HEVC / x265 con audio AAC desde un MKV

Esto es similar al comando x264 anterior, pero en su lugar utiliza HEVC / x265 para obtener un tamaño de archivo más pequeño con el mismo video, si no de mejor calidad, del MKV de origen. Tenga en cuenta que prefiero escalar videos de iOS a 720 cuando uso HEVC / x265; La calidad de reproducción sin demasiado ruido es sólida en mi MacBook, iPad y iPhone. Solo asegúrese de que su hardware y sistema operativo sean compatibles con la reproducción HEVC / x265. Y tenga cuidado: HEVC / x265 consume mucha CPU, por lo que si su máquina no tiene mucha potencia de CPU, puede llevar hasta un día codificar 90 minutos de video.

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 \
       ;

Aquí hay un desglose de cada uno de los parámetros principales distintos de los archivos de entrada y salida.

  • -vf scale=-1:720: Escala el video a 720 de altura y calcula automáticamente el ancho. Tenga en cuenta que FFmpeg puede parar hasta algunos MKVs por razones no estoy 100% claro en lo que tendría que establecer explícitamente el ancho con algo como esto: -vf scale=1280:720. Experimente y vea lo que funciona para usted.
  • -c:v libx265 -crf 20: El libx265es el códec de codificación de video. El -crf 20es el CRF (factor de tasa constante) . El CRF predeterminado si no lo especifica es 28, pero, a partir de ahora, considera que la calidad es bastante ... Meh. Prefiero 20 ya que es un muy buen equilibrio entre calidad y tamaño de archivo.
  • -threads 4: Me gusta especificar el número de hilos. 4 es lo que mi sistema puede manejar ahora, pero a veces lo reduzco a 2 o 3. Un número mayor es más rápido si tiene suficientes CPU para manejarlo.
  • -tag:v hvc1: La configuración mágica de metadatos para que los dispositivos iOS puedan reproducir correctamente los videos HEVC / x265.

¡Y eso es todo!

JakeGould
fuente