¿Cómo convertir archivos .mkv en archivos .mp4 sin pérdidas?

119

Necesito convertir un archivo de video del contenedor Matroska al contenedor mp4. El archivo Matroska contiene una pista de video h.264 y una pista de sonido AC3. Debería ser posible hacer esto sin pérdidas, pero ¿cómo hacerlo con herramientas nativas de Ubuntu?

La transcodificación no es una opción.

Seppo Erviälä
fuente
Ver esta cuestión .
Binarylife
2
Esta es especialmente una solución para convertir archivos Matroska que no se reproducirán en un televisor Samsung, a archivos que sean compatibles con él
lanzará el
Con los años he encontrado esto muy útil como Chromecastsoporte H.264con AACo MP3en un MP4contenedor. Es muy fácil transmitir videos desde su computadora a Chromecastsi tiene Chrome con la extensión Google Cast. Simplemente arrastre y suelte una MP4codificación de transmisión correcta a una ventana del navegador y comience a transmitir.
Seppo Erviälä

Respuestas:

164

Quizás la herramienta más fácil para eso es ffmpeg, o avconvdel libav-toolspaquete. Libav es una bifurcación de FFmpeg, que Ubuntu cambió durante unos años hasta Ubuntu 15.04. Es uno de los backends para muchas de las herramientas GUI mencionadas en otras respuestas.

Cambiar el contenedor sin volver a encontrar contenido no podría ser más simple:

ffmpeg -i input.mkv -codec copy output.mp4
  • Detecta automáticamente una conversión de contenedor Matroska a MP4 basada en nombres de archivo de entrada / salida.

  • -codec copycopias de flujo, o "re-muxes", los flujos de la entrada a la salida sin volver a codificar. Piense en ello como copiar y pegar.

  • El comportamiento de selección de flujo predeterminado es seleccionar solo un flujo por tipo de flujo. Por ejemplo, si su entrada tiene dos transmisiones de video y una transmisión de audio, entonces solo se seleccionará la transmisión de video con el tamaño de cuadro más grande. Agregue -map 0si desea seleccionar todas las transmisiones desde la entrada.

  • Es posible que algunos contenedores no admitan algunos formatos. Por lo tanto, verifique si su formato de contenedor elegido , ya sea mkv, mp4o incluso avitiene soporte para todo el contenido en sus archivos (video, audio, subtítulos, datos, etc.). Por ejemplo, mp4no admite subtítulos ( .srtarchivos) SubRip .

MestreLion
fuente
66
Para transcodificar el audio a AAC, dejando el video como AVC: avconv -i input.mkv -c:v copy -c:a libfaac output.mp4(usé ffmpeg, supongo que avconv tiene los mismos argumentos de línea de comando aquí)
camh
@camh: Lo que dijiste funciona, pero ten en cuenta 2 cosas: 1) Dejará el video tal cual, independientemente de si es AVC u otra cosa; 2) No solo convertirá audio a AAC sino también el formato contenedor de mkv a mp4
MestreLion
1
@AquariusPower: solo tenga en cuenta que el OP no quiere reasignar las transmisiones: solo desea convertir el contenedor y conservar todas las transmisiones.
MestreLion
2
@AquariusPower: ¿has intentado simplemente -map 0obtener ambas transmisiones de audio? Como dije en la respuesta: "El comportamiento de selección de flujo predeterminado es seleccionar solo un flujo por tipo de flujo"
MestreLion
1
Use la -c:s mov_textopción si necesita mantener, por ejemplo. srtpista de subtítulos
Seppo Erviälä
25

Obtenga el software necesario

sudo apt-get install gpac mkvtoolnix

Extraer video y audio del archivo matroska

Primero debe verificar qué pistas contiene el archivo matroska con

mkvmerge --identify video.mkv

File 'video.mkv': container: Matroska
Track ID 1: video (V_MPEG4/ISO/AVC)
Track ID 2: audio (A_AC3)

Luego extraiga video y audio de acuerdo con sus pistas con:

mkvextract tracks video.mkv 1:video.h264 2:audio.ac3

Extracting track 1 with the CodecID 'V_MPEG4/ISO/AVC' to the file 'video.h264'. Container format: AVC/h.264 elementary stream
Extracting track 2 with the CodecID 'A_AC3' to the file 'audio.ac3'. Container format: Dolby Digital (AC3)
Progress: 100%

Mux audio y video en contactor mp4

MP4Box -fps 24 -add video.h264 -add audio.ac3 video.mp4

AVC-H264 import - frame size 1280 x 720 at 24.000 FPS
Import results: 31671 samples - Slices: 5672 I 125048 P 122648 B - 32288 SEI - 4936 IDR
AC3 import - sample rate 48000 - 6 channels
Saving to video.mp4: 0.500 secs Interleaving

Tuve que agregar la -fps 24opción porque MP4Boxno detectó fps de video correctamente. Dependiendo del uso, AC3la pista de audio debe volver a codificarse en otra cosa antes de la muxing.

Ahora tiene transmisiones remuxed del contenedor matroska al contenedor mp4 sin perder calidad.

EDITAR: MP4 no admite oficialmente el audio AC3, por lo que la pista de audio debe convertirse a un formato compatible (por ejemplo, AAC, MP3) si desea que el archivo se pueda reproducir con algo más que VLC.

Seppo Erviälä
fuente
1
¿Funcionará esto con pistas de subtítulos?
CyberSkull
11

Puedes usar Avidemux

Tiene buena interfaz GUI.

Al convertir de mkv a mp4, no se vuelve a codificar.

La conversión se realiza en un minuto (para un video de 60 minutos).

  1. sudo apt-get install avidemux

  2. Abra el archivo mkv en avidemux.

  3. Seleccione el modo seguro si se le solicita.

  4. Deja el video como copia.

  5. Elija Archivo-> Propiedades. Compruebe si el códec de audio es aac.

    1. Si el códec de audio NO es aac, seleccione aac(faac).
    2. De lo contrario, déjalo como copy. (A veces, usando esta opción, el audio puede estar fuera de sincronización o distorsionado, en ese caso, seleccione en su aac(faac)lugar).
  6. Seleccione mp4para el formato.

  7. Seleccione guardar, elija ubicación y escriba un nombre de archivo con .mp4la extensión.

Nota: A veces (~ 10% de probabilidad) puede fallar. Entonces usar handbrake(re-encode).

Nota 2: hay dos enlaces que te ayudan:

http://www.ubuntugeek.com/avidemux-free-video-editor-designed-for-simple-cutting-filtering-and-encoding-tasks.html

http://www.ubuntugeek.com/how-to-convert-mkv-file-into-mp4-file-using-avidemux.html

loksena
fuente
Trabajado como un encanto. Tuve problemas de sincronización después de la respuesta aceptada, pero no con esta.
moraes
funciona muy bien
psychok7
-2

Como MPEG Parte 14 admite h.264 y AC3 de forma nativa sin transcodificación, simplemente puede cambiar el nombre del archivo para que tenga una .mp4extensión en lugar de una .mkvextensión.

Ricardo
fuente
3
Es posible que admita los códecs internos, pero eso no significa que funcionará en una aplicación que no entienda Matroska. Esto solo funcionaría si la aplicación es compatible con Matroska y mira el número mágico en lugar de la extensión.
Arda Xi
Cambiar el nombre del archivo no convertirá el formato del contenedor y podría confundir a la aplicación (y a los usuarios). Como dijo @ArdaXi, la aplicación aún necesitaría admitir Matroska para jugarla.
MestreLion
-2

Puede probar HANDBRAKE agregando su PPA escribiendo este código en la terminal:

sudo add-apt-repository ppa:stebbins/handbrake-releases
13east
fuente
Esto parece ser un transcodificador de video. No quiero volver a comprimir la pista de video ya que ya está en formato h.264.
Seppo Erviälä
1
Handbrake es un excelente transcodificador, pero nunca lo usaría para la conversión de formatos de archivo.
CyberSkull
1
Me encanta Handbreak, pero desafortunadamente solo funciona sin pérdidas para audio (y subtítulos). No pude encontrar una manera de copiar el video sin transcodificarlo, y el OP solicitó específicamente la conversión de formato sin pérdida.
MestreLion