Converti mkv in mp4 con ffmpeg


12

Quando provo a convertire mkv in mp4 usando ffmpeg, si verifica il seguente errore:

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

Ho usato questo comando per convertire il file:

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

Il file di input ha le seguenti caratteristiche:

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  

Essendo nuovo di ffmpeg, non sono sicuro del significato dell'errore o di come correggerlo.

Grazie!


Includere anche l'output completo della console di ffmpeg risultante dal comando ffmpeg.
Llogan,

Ci scusiamo per la formattazione del codice; la citazione mi ha reso difficile la modifica ...
Ripristina Monica - ζ--

Risposte:


20

Come ho già scritto qui , ti suggerisco di modificare alcuni dettagli nella tua riga di comando:

  • Se si utilizza una versione di Ubuntu precedente alla 15.04, sostituirla ffmpegcon avconv, poiché è stata la forcella utilizzata da Ubuntu per alcuni anni (vedere i commenti)
  • Ne hai davvero bisogno -absf aac_adtstoasc? Aveva alcuni problemi che potrebbero non essere stati corretti nell'attuale ffmpeg di Ubuntu. Ti consiglio di provare prima senza.
  • -vcodec copy -acodec copypuò essere semplificato a -codec copyo -c copy. Impedirebbe anche di manomettere altri flussi oltre a video e audio, come i sottotitoli.

Quindi il vincitore è ...

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

Se ciò non funziona, si prega di inviare tutta l'uscita del terminale.


-1. ottengo lo stesso errore con la riga di comando che hai fornito. sembra che tu sia solo pedante qui.
ixtmixilix,

@ixtmixilix: ti interessa pubblicare l'output del terminale? La avconvtua versione potrebbe essere diversa dalla mia.
MestreLion,

@ixtmixilix: inoltre, perché pedante? Gli ho offerto un'alternativa, vale la pena provare, e ho aspettato un feedback. Non ha senso sottovalutare questa e l'altra risposta (che ha risolto perfettamente la domanda del PO tra l'altro)
MestreLion

Ora avconvnon è più mantenuto in Ubuntu :-)
Ciro Santilli 17 改造 中心 法轮功 六四 事件

@CiroSantilli 巴拿馬 文件 六四 事件 法轮功 wow, davvero? Siamo tornati a ffmpeg? Hai delle fonti o riferimenti sulla modifica?
MestreLion,

3

So che è un thread molto vecchio, ma ho trovato una soluzione per eseguire correttamente ffmpeg. Non usare -vcodec copy -acodec copy, usa solo ffmpeg -i input.mkv output.m4vinvece. Inizierà a funzionare.

Ma nel mio caso, converto un .mkv in .mp4, l'output del risultato è solo cestino. Perde l'accuratezza del frame.


5
Se non si utilizza il copycodec, verrà ricodificato e perderà la qualità.
nyuszika7h,

2

Per convertire automaticamente tutti i file in una cartella da MKV in MP4 è possibile creare un alias:

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

Questo comando esegue i seguenti passi:

  • Cicli ricorsivi nella directory corrente alla ricerca di file .mkv
  • Converte ogni file in .mp4, non sovrascrivendo i file esistenti
  • Rimuove il file di origine quando la conversione ha avuto esito positivo

Spiega il tuo comando un po 'meglio passo dopo passo.
derHugo,

Che cosa vorresti sapere? C'è un riepilogo di ciò che il comando fa proprio sotto di esso.
Guido Bouman,

0

c'è già una risposta su questo Come convertire file .mkv in file .mp4 senza perdita di dati?

il concetto di base è che sia MKV che MP4 sono container, sono solo container, in pratica devi decomprimere e reimballare le tracce audio e video se vuoi passare da una all'altra.


L'ho letto ma sto cercando di imparare come farlo con ffmpeg invece di quegli altri strumenti. Uso sempre il freno a mano, ma ciò non mi aiuta a capire come farlo in ffmpeg. Sto solo cercando di imparare qualcosa di nuovo.
JohnS

@JohnS ffmpeg non è probabilmente la scelta migliore, perché cerca sempre di ricodificare tutto e perdi tempo e risorse facendo questo, comunque forum.doom9.org/showthread.php?t=164683 questo può probabilmente diventare un buon punto di partenza per te.
user827992

3
@ user827992 Questo non è corretto. ffmpeg non cerca sempre di ricodificare tutto. Hai anche letto i dettagli nella domanda? L'esempio nella domanda sta chiaramente tentando di copiare i flussi, non di ricodificarli.
Llogan,

2
@ user827992: sia ffmpeg che avconv sono in grado di reimballare senza perdita di dati da un contenitore all'altro senza ricodificare il contenuto.
MestreLion,


0

Prova questo :: Libav in Linux

Installazione: esegui comando

sudo apt-get install libav-tools

Comando di conversione video :: Vai alla cartella contiene il video ed esegui nel terminale

avconv -i oldvideo.mkv -ar 22050 convertedvideo.mp4
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.