Konvertiere mkv in mp4 mit ffmpeg

12

Wenn ich versuche, mkv mit ffmpeg in mp4 zu konvertieren, tritt der folgende Fehler auf:

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

Ich habe diesen Befehl verwendet, um die Datei zu konvertieren:

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

Die Eingabedatei weist die folgenden Merkmale auf:

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                           : [email protected]  
>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  

Ich bin mir nicht sicher, was der Fehler bedeutet oder wie man ihn korrigiert, da ffmpeg neu ist.

Vielen Dank!

JohnS
quelle
Bitte geben Sie auch die vollständige Ausgabe der ffmpeg-Konsole an, die sich aus Ihrem Befehl ffmpeg ergibt.
Logan
Entschuldigung für die Formatierung des Codes; Das Zitat machte es mir schwer, es zu bearbeiten ...
Reinstate Monica - ζ--

Antworten:

20

Wie ich bereits geschrieben habe , schlage ich vor, dass Sie einige Details in Ihrer Befehlszeile ändern:

  • Wenn Sie eine Ubuntu - Version älter als 15.04 verwenden, ersetzen Sie ffmpegfür avconv, wie es die Gabel , die von Ubuntu für ein paar Jahre war (siehe Kommentare)
  • Haben Sie wirklich brauchen -absf aac_adtstoasc? Es gab einige Probleme , die im aktuellen ffmpeg von Ubuntu möglicherweise nicht behoben wurden. Ich empfehle Ihnen, es zuerst ohne zu versuchen.
  • -vcodec copy -acodec copykann zu -codec copyoder vereinfacht werden -c copy. Dies würde auch verhindern, dass andere Streams als Video und Audio, wie z. B. Untertitel, manipuliert werden.

Der Gewinner ist also ...

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

Wenn das nicht funktioniert, posten Sie bitte alle Terminalausgaben.

MestreLion
quelle
-1. Ich erhalte den gleichen Fehler mit der Kommandozeile, die Sie angegeben haben. anscheinend bist du hier nur pedantisch.
ixtmixilix
@ixtmixilix: Möchtest du die Terminal-Ausgabe posten? Sie avconv‚s - Version könnte als meine unterschiedlich sein.
MestreLion
@ixtmixilix: auch, warum pedantisch? Ich bot ihm eine Alternative an, die es wert war, ausprobiert zu werden, und wartete auf Feedback. Es macht keinen Sinn, dies und die andere Antwort (die die Frage des OP übrigens perfekt löste)
MestreLion
Jetzt avconvwird in Ubuntu nicht mehr gepflegt :-)
Ciro Santilli 17 新疆 at 六四 事件 事件
@CiroSantilli Wow, wirklich? Sind wir zurück zu ffmpeg? Haben Sie Quellen oder Hinweise zur Änderung?
MestreLion
3

Ich weiß, dass es ein sehr alter Thread ist, aber ich habe eine Lösung gefunden, um ffmpeg erfolgreich auszuführen. Nicht verwenden -vcodec copy -acodec copy, ffmpeg -i input.mkv output.m4vsondern nur verwenden. Es wird gestartet.

Aber in meinem Fall konvertiere ich eine .mkv in .mp4, die Ergebnisausgabe ist nur Papierkorb. Es verliert die Bildgenauigkeit.

Anonyme Maus
quelle
5
Wenn Sie den copyCodec nicht verwenden , wird er neu codiert und verliert an Qualität.
Nyuszika7h
2

Um alle Dateien in einem Ordner automatisch von MKV nach MP4 zu konvertieren, können Sie einen Alias ​​erstellen:

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

Dieser Befehl führt die folgenden Schritte aus:

  • Durchläuft das aktuelle Verzeichnis rekursiv nach MKV-Dateien
  • Konvertiert jede Datei in .mp4, wobei vorhandene Dateien nicht überschrieben werden
  • Entfernt die Quelldatei, wenn die Konvertierung erfolgreich war
Guido Bouman
quelle
Bitte erklären Sie Ihren Befehl Schritt für Schritt etwas genauer.
derHugo
Was würdest du gerne wissen? Darunter finden Sie eine Zusammenfassung der Aktionen des Befehls.
Guido Bouman
0

Es gibt bereits eine Antwort zu diesem Thema .mkv-Datei verlustfrei in MP4-Datei konvertieren?

Das Grundkonzept ist, dass sowohl der MKV als auch der MP4 Container sind. Es handelt sich lediglich um Container. Sie müssen die Audio- und Videospuren grundsätzlich entpacken und neu packen, wenn Sie zwischen den beiden wechseln möchten.

user827992
quelle
Ich habe das gelesen, aber ich versuche zu lernen, wie man es mit ffmpeg anstatt mit diesen anderen Werkzeugen macht. Ich benutze die Handbremse die ganze Zeit, aber das hilft mir nicht zu verstehen, wie man es in ffmpeg macht. Ich versuche nur etwas Neues zu lernen.
JohnS
@JohnS ffmpeg ist wahrscheinlich nicht die beste Wahl, weil sie neu codieren alles versuchen immer , und Sie diese verschwenden Zeit und Ressourcen zu tun, trotzdem forum.doom9.org/showthread.php?t=164683 kann dies wahrscheinlich ein guter Ausgangspunkt geworden für dich.
User827992
3
@ user827992 Dies ist falsch. ffmpeg versucht nicht immer, alles neu zu codieren. Hast du die Details in der Frage überhaupt gelesen? Das Beispiel in der Frage versucht eindeutig, die Streams zu kopieren und nicht neu zu codieren.
Logan
2
@ user827992: Sowohl ffmpeg als auch avconv können verlustfrei von einem Container in einen anderen umpacken, ohne den Inhalt erneut zu laden.
MestreLion
0

Bekam dies auf Xubuntu 14.04, als ich versuchte, eine DVD mit MP4s mit DVDStyler zu brennen; Bombono erzeugt den gleichen Fehler. ffmpeg # 1154 deutet darauf hin, dass dies möglicherweise behoben wurde ffmpeg, obwohl dies möglicherweise nicht der avconvFall ist. libav # 478 ist immer noch als offen markiert.

Siehe auch: /unix/127522/avconv-error-av-interleaved-write-frame

Ich habe Launchpad # 1339980 eingereicht . Verwenden Sie zusammenfassend eine aktuelle Version von ffmpegund nicht avconv.

Jesse Glick
quelle
0

Versuchen Sie dieses :: Libav in Linux

Installation: Befehl ausführen

sudo apt-get install libav-tools

Befehl zur Videokonvertierung :: Gehe zu Ordner enthält das Video und wird im Terminal ausgeführt

avconv -i oldvideo.mkv -ar 22050 convertedvideo.mp4
Vishal
quelle