Convierte mkv a mp4 con ffmpeg


12

Cuando intento convertir mkv a mp4 usando ffmpeg, aparece el siguiente error:

version 0.8.3-4:0.8.3-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers   built on Jun 12 2012 16:52:09 with gcc 4.6.3  
 *** THIS PROGRAM IS DEPRECATED ***   This program is only provided for compatibility and will be removed in a future release. Please use
 avconv instead.   [matroska,webm @ 0x1e939c0] max_analyze_duration
 reached   [matroska,webm @ 0x1e939c0] Estimating duration from
 bitrate, this may be inaccurate   Input #0, matroska,webm, from
 'input.mkv':     Duration: 00:01:00.76, start: 0.000000, bitrate: 384
 kb/s  
     Stream #0.0(eng): Video: h264 (High), yuv420p, 1280x544, PAR 1:1 DAR 40:17, 25 fps, 25 tbr, 1k tbn, 50 tbc (default)  
     Stream #0.1(eng): Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s (default)  
     Stream #0.2(eng): Subtitle: [0][0][0][0] / 0x0000   Output #0, ipod, to 'output.m4v':     Metadata:  
     encoder         : Lavf53.21.0  
     Stream #0.0(eng): Video: libx264, yuv420p, 1280x544 [PAR 1:1 DAR 40:17], q=2-31, 25 tbn, 25 tbc (default)  
     Stream #0.1(eng): Audio: ac3, 48000 Hz, 5.1, 384 kb/s (default)   Stream mapping:     Stream #0.0 -> #0.0     Stream #0.1 -> #0.1  
 Press ctrl-c to stop encoding   [ipod @ 0x1e9b740] Application
 provided invalid, non monotonically increasing dts to muxer in stream
 0: -2 >= -2 av_interleaved_write_frame(): Invalid argument

Usé este comando para convertir el archivo:

ffmpeg -i input.mkv -vcodec copy -acodec copy -absf aac_adtstoasc output.m4v

El archivo de entrada tiene las siguientes características:

mediainfo input.mkv 


>General
>
>Unique ID                                : 200459305952356554213392832683163418790 (0x96CF0ED8DB5914CBB9E18163689280A6)  
>Complete name                            : input.mkv  
>Format                                   : Matroska  
>Format version                           : Version 2  
>File size                                : 1.46 GiB  
>Duration                                 : 1h 5mn  
>Overall bit rate                         : 3 168 Kbps  
>Encoded date                             : UTC 2010-09-26 21:44:02  
>Writing application                      : mkvmerge v2.9.5 ('Tu es le seul') built on >Jun 17 2009 16:28:30  
>Writing library                          : libebml v0.7.8 + libmatroska v0.8.1  
>
>Video
>ID                                       : 1  
>Format                                   : AVC  
>Format/Info                              : Advanced Video Codec  
>Format profile                           : High@L3.1  
>Format settings, CABAC                   : Yes  
>Format settings, ReFrames                : 4 frames  
>Codec ID                                 : V_MPEG4/ISO/AVC  
>Duration                                 : 1h 5mn  
>Bit rate                                 : 2 910 Kbps  
>Width                                    : 1 280 pixels  
>Height                                   : 720 pixels  
>Display aspect ratio                     : 16:9  
>Frame rate                               : 25.000 fps  
>Color space                              : YUV  
>Chroma subsampling                       : 4:2:0  
>Bit depth                                : 8 bits  
>Scan type                                : Progressive  
>Bits/(Pixel*Frame)                       : 0.126  
>Stream size                              : 1.31 GiB (90%)  
>Writing library                          : x264 core 105 r1724 b02df7b  
>Encoding settings                        : cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=6 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=0 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=0 / chroma_qp_offset=-2 / threads=18 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=3 / weightb=1 / open_gop=0 / weightp=0 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc=2pass / mbtree=0 / bitrate=2910 / ratetol=1.0 / qcomp=0.60 / qpmin=10 / qpmax=51 / qpstep=4 / cplxblur=20.0 / qblur=0.5 / ip_ratio=1.40 / pb_ratio=1.30 / aq=1:1.00  
>
>Default                                  : Yes  
>Forced                                   : No  
>
>Audio
>ID                                       : 2  
>Format                                   : AC-3  
>Format/Info                              : Audio Coding 3  
>Mode extension                           : CM (complete main)  
>Codec ID                                 : A_AC3  
>Duration                                 : 1h 5mn  
>Bit rate mode                            : Constant  
>Bit rate                                 : 256 Kbps  
>Channel(s)                               : 2 channels  
>Channel positions                        : Front: L R  
>Sampling rate                            : 48.0 KHz  
>Bit depth                                : 16 bits  
>Compression mode                         : Lossy  
Stream size                              : 121 MiB (8%)  
Language                                 : English  
Default                                  : Yes  
Forced                                   : No  

Al ser nuevo en ffmpeg, no estoy seguro de qué significa el error o cómo corregirlo.

¡Gracias!


Incluya también la salida completa de la consola ffmpeg que resulta de su comando ffmpeg.
llogan

Perdón por el formato del código; citando el hecho que sea difícil para mí para editar ...
Restablecer Mónica - ζ--

Respuestas:


20

Como ya he escrito aquí , le sugiero que cambie algunos detalles en su línea de comando:

  • Si está utilizando una versión de Ubuntu mayores de 15.04, sustituir ffmpegpor avconv, como lo fue el tenedor utilizado por Ubuntu durante algunos años (véanse los comentarios)
  • ¿Realmente necesitas -absf aac_adtstoasc? Tuvo algunos problemas que pueden no haber sido corregidos en el ffmpeg actual de Ubuntu. Te sugiero que pruebes sin él primero.
  • -vcodec copy -acodec copyse puede simplificar a -codec copyo -c copy. También evitaría alterar otras transmisiones además de video y audio, como los subtítulos.

Entonces el ganador es ...

ffmpeg -i input.mkv -c copy output.m4v

Si eso no funciona, publique toda la salida del terminal.


-1. Me sale el mismo error con la línea de comando que proporcionó. parece que solo estás siendo pedante aquí.
ixtmixilix

@ixtmixilix: ¿quieres publicar la salida del terminal? Usted avconv's versión puede ser diferente a la mía.
MestreLion

@ixtmixilix: también, ¿por qué pedante? Le ofrecí una alternativa, una que valía la pena probar, y esperé sus comentarios. No tiene sentido rechazar esta y la otra respuesta (que resolvió perfectamente la pregunta del OP por cierto)
MestreLion

Ahora avconvya no se mantiene en Ubuntu :-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

@CiroSantilli 巴拿馬 文件 六四 事件 法轮功 wow, ¿en serio? ¿Estamos de vuelta ffmpeg? ¿Tienes alguna fuente o referencia sobre el cambio?
MestreLion

3

Sé que es un hilo muy antiguo, pero he encontrado una solución para ejecutar con éxito ffmpeg. No use -vcodec copy -acodec copy, use solo en su ffmpeg -i input.mkv output.m4vlugar. Comenzará a correr.

Pero en mi caso, convierto un .mkv a .mp4, el resultado resultante es solo basura. Pierde precisión de cuadro.


55
Si no usa el copycódec, se volverá a codificar y perderá calidad.
nyuszika7h

2

Para convertir automáticamente todos los archivos en una carpeta de MKV a MP4, puede crear un alias:

alias mkv2mp4="for f in ./**/*.mkv; do ffmpeg -n -i \"\$f\" -c copy \"\${f%.mkv}.mp4\" && rm \"\$f\"; done"

Este comando realiza los siguientes pasos:

  • Recorre recursivamente el directorio actual buscando archivos .mkv
  • Convierte cada archivo a .mp4, no sobrescribe los archivos existentes
  • Elimina el archivo fuente cuando la conversión fue exitosa

Por favor, explique su comando un poco mejor paso a paso.
derHugo

¿Qué te gustaría saber? Hay un resumen de lo que hace el comando justo debajo.
Guido Bouman

0

ya hay una respuesta sobre esto ¿Cómo convertir archivos .mkv en archivos .mp4 sin pérdidas?

El concepto básico es que tanto el MKV como el MP4 son contenedores, son solo contenedores, básicamente tiene que desempaquetar y volver a empacar las pistas de audio y video si desea cambiar entre los dos.


Lo leí, pero estoy tratando de aprender cómo hacerlo con ffmpeg en lugar de esas otras herramientas. Uso el freno de mano todo el tiempo, pero eso no me ayuda a entender cómo hacerlo en ffmpeg. Solo trato de aprender algo nuevo.
JohnS

@JohnS ffmpeg probablemente no sea la mejor opción, porque siempre trata de volver a codificar todo y pierde tiempo y recursos haciendo esto, de todos modos forum.doom9.org/showthread.php?t=164683 esto probablemente puede convertirse en un buen punto de partida para ti.
user827992

3
@ user827992 Esto es incorrecto. ffmpeg no siempre intenta volver a codificar todo. ¿Incluso leíste los detalles en la pregunta? El ejemplo en la pregunta claramente está intentando copiar las secuencias, no volver a codificar.
llogan

2
@ user827992: tanto ffmpeg como avconv pueden volver a empaquetar sin pérdidas de un contenedor a otro sin volver a encontrar contenido.
MestreLion


0

Pruebe este :: Libav en Linux

Instalación: comando de ejecución

sudo apt-get install libav-tools

Comando de conversión de video :: Ir a la carpeta contiene el video y ejecutarlo en la terminal

avconv -i oldvideo.mkv -ar 22050 convertedvideo.mp4
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.