Nicht monotone DTS auf Concat (ffmpeg)


17

Nach dem Ausführen dieses Befehls ffmpeg -f concat -i mylist.txt -c copy output.mp4erhalte ich eine beschädigte output.mp4Datei und die folgende Meldung:

ffmpeg -f concat -i mylist.txt -c copy output.mp4
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, concat, from 'mylist.txt':
  Duration: N/A, start: 0.000000, bitrate: 829 kb/s
    Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1440x900, 701 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc
    Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s
Output #0, mp4, to 'output.mp4':
  Metadata:
    encoder         : Lavf56.25.101
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1440x900, q=2-31, 701 kb/s, 30 fps, 30 tbr, 15360 tbn, 15360 tbc
    Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, 128 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598061, current: 467644; changing to 598062. This may result in incorrect timestamps in the output file.
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598062, current: 468044; changing to 598063. This may result in incorrect timestamps in the output file.
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598063, current: 468444; changing to 598064. This may result in incorrect timestamps in the output file.
...
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598362, current: 588044; changing to 598363. This may result in incorrect timestamps in the output file.
frame= 1472 fps=0.0 q=-1.0 Lsize=    5825kB time=00:00:49.04 bitrate= 973.0kbits/s
video:4903kB audio:877kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.776358%

Inhalt von mylist.txt

file 'cut.mp4'
file 'cut2.mp4'

cut.mp4 Ausgabe von ffmpeg:

ffmpeg -i cut.mp4
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'cut.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.25.101
  Duration: 00:00:39.04, start: 0.036281, bitrate: 837 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1440x900, 701 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

cut2.mp4 Ausgabe von ffmpeg:

ffmpeg -i cut2.mp4
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'cut2.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.25.101
  Duration: 00:00:10.07, start: 0.000000, bitrate: 1498 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1440x900, 1271 kb/s, 30 fps, 30 tbr, 12k tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 218 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

cut.mp4 Ich habe diesen Befehl erhalten ffmpeg -ss 00:00:11 -i myfile.mp4 -to 00:00:39 -vf 'drawbox= : x=0 : y=0 : color=invert' cut.mp4

cut2.mp4 Ich habe diesen Befehl erhalten ffmpeg -ss 00:00:00 -i myfile.mp4 -to 00:00:10 -c copy cut2.mp4

Ich habe viel gesucht - habe keine Lösung gefunden, vielleicht kann mir jemand dabei helfen.

output.mp4 ist spielbar, sieht aber komisch aus.

Bildbeschreibung hier eingeben


1
Können Sie beide Eingabedateien bereitstellen, damit ich Tests durchführen kann?
Logan

@LordNeckbeard ja, ich habe es dir geschickt, vielen Dank.
Whitesiroi

1
Ich kann nicht scheinen, die genaue Ausgabe zu kopieren. Ich verwende den neuesten statischen Build von Tessus . Die Beispieldateien scheinen sich von Ihrem Screenshot zu unterscheiden, aber es scheint in VLC und QuickTime einwandfrei zu funktionieren, mit der Ausnahme, dass die Suche durcheinander zu sein scheint. Ich habe es auf einem OS X-Computer getestet, da es so aussieht, als ob Sie es verwenden.
Logan

@LordNeckbeard Vielen Dank, ja, mit dieser Version von ffmpeg N-71996-g372aa07-tessus funktioniert es großartig. Vielen Dank.
Whitesiroi

tl; dr; entfernen -c copy, um eine Neukodierung zuzulassen oder -c:a copynur zu verwenden. Dann kann concat step noch verwenden, -c copyda alle Videos bereits neu codiert wurden. Beachten Sie, dass einige Videos mit dieser Warnung nach concat noch in Ordnung aussehen und daher -c copyin Ordnung sind.
21.

Antworten:


10

Neueste verwenden ffmpeg

Allgemeine Benutzer sollten immer ffmpegden aktuellen Git-Master-Zweig verwenden (der neueste verfügbare Code):

  • Wenn Sie auf ein Problem stoßen, überprüfen Sie zunächst, ob Sie einen Build von git master verwenden.
  • Es gilt als stabil.
  • Es wird mehr Fehlerbehebungen und Funktionen geben.
  • Die FFmpeg-Entwicklung ist sehr aktiv .
  • Wenn Sie Unterstützung von offiziellen Hilfsquellen erhalten möchten, müssen Sie git master verwenden.
  • Veröffentlichungen sind für Distributoren.

Auf der FFmpeg-Download- Seite finden Sie verschiedene Optionen FFmpeg-Wiki: Compile Guides .

Andere Sachen

  • In Ihrem Befehl mit können drawboxSie das Audio mit Steam kopieren-c:a copy anstatt es neu zu codieren.

  • Bei der Verwendung von -ss, -tofunktioniert nur , wie erwartet , wenn -ssals Ausgabeoption verwendet wird.


Vielen Dank, es funktioniert besser und schneller. Kannst du das bitte auch überprüfen video.stackexchange.com/questions/15477/… Ich bin nur neugierig, ob es vereinfacht werden kann.
Whitesiroi

@ Whitesiroi Sicher. Beantwortet, obwohl es scheint, machte ich einen Kommentar zu dieser Frage unglücklich.
Logan

Das tut mir leid.
Whitesiroi

1

Laut https://trac.ffmpeg.org/wiki/Concatenate

Ich hatte das gleiche Problem. Ich verwende ffmpeg Version 2.6.3 auf einem Mac. Ich konvertierte meine Quellclips in das .MTS-Format mit dem hinzugefügten Tag -q 0, aktualisierte die Erweiterungen in der Textdatei und stellte meine Ausgabedatei auf eine .MTS-Datei ein, als ich den Befehl concat in ffmpeg ausführte. Es wirkte wie ein Zauber. Hier ist mein Workflow.

ffmpeg -i clip-1.MOV -q 0 clip-1.MTS

ffmpeg -i clip-2.MOV -q 0 clip-2.MTS

Die Textdatei (mylist.txt) wurde folgendermaßen aktualisiert:

file clip-1.MTS
file clip-2.MTS

Führen Sie dann den Befehl concat wie folgt aus:

ffmpeg -f concat -i mylist.txt -c copy output.MTS

Arbeitete für mich! Sie können die endgültige Ausgabe von .MTS in ein beliebiges Format konvertieren.


Ist dieses Protokoll verlustfrei?
Becko

Nein, der erste Befehl wird in MPEG-2 konvertiert, das keinen verlustfreien Modus hat.
Gyan

1

Ich habe ähnliche Fehler erhalten und das Audio in meinen Ausgabevideos war manchmal nicht synchron und fehlte manchmal vollständig, aber ich mkvmergehabe stattdessen mkvtoolnix verwendet.

Mein Eingang Videos haben mit verschiedenen Einstellungen codiert worden ist und sie verschiedene Dimensionen hatten, so dass ich zuerst die Größe verändert und neu codierte sie mit ffmpeg:

for f in *.mp4;do w=1280;h=720;ffmpeg -i $f -filter:v "scale=iw*min($w/iw\,$h/ih):ih*min($w/iw\,$h/ih),pad=$w:$h:($w-iw*min($w/iw\,$h/ih))/2:($h-ih*min($w/iw\,$h/ih))/2" -c:v libx264 -crf 22 -preset slow -pix_fmt yuv420p -c:a libfdk_aac -vbr 3 -ac 2 -ar 44100 ${f%mp4}mkv;done

Einige meiner Eingangsvideos hatten keinen Audiokanal, daher habe ich einen Befehl wie diesen verwendet, um ihnen einen stummen Audiokanal hinzuzufügen:

for f in *.mkv;do ffprobe $f|&grep -q '1: Audio'||ffmpeg -i $f -f lavfi -i anullsrc -c:a libfdk_aac -shortest -c:v copy temp-$f;mv {temp-,}$f;done

Danach habe ich die Videos verkettet:

mkvmerge -o /tmp/output.mkv $(printf %s\\n *.mkv|sed '1!s/^/+/')

Wenn Ihre Eingabedateien die gleichen Abmessungen, die gleiche Anzahl von Audiokanälen, die gleiche Audio-Abtastrate usw. haben, können Sie mkvmergedie Dateien nur verlustfrei verketten. Die Eingabedateien für mkvmergekönnen auch einen MP4-Container haben, aber die Ausgabedatei hat einen MKV-Container, selbst wenn die Dateinamenerweiterung als angegeben ist .mp4. Sie können ausführen ffmpeg -i output.mkv -c copy output.mp4, um den Container zu ändern.

mkvmergehat eine Syntax wie mkvmerge -o output.mkv file1.mkv + file2.mkv + file3.mkv, wo mkvmerge -o output.mkv file1.mkv +file2.mkv +file3.mkvauch akzeptiert wird.


1

Basierend auf Duncans wirklich hilfreicher Antwort:

for f in ./*.mp4; do ffmpeg -i $f -q 0 "${f%.*}.mts"; done

Dann das:

ffmpeg -f concat -safe 0 -i <(for f in ./*.mts; do echo "file '$PWD/$f'"; done) -c copy All.mts

0

Wenn ich ffmpeg verwende, um ein aufgenommenes Video zu remuxen (kann TS, MP4 oder MKV sein) und die nicht monotonen dts im Ausgabestream zu erhalten - Zeitstempel usw. usw. Fehler, scheint das resultierende Video nur Audio zu haben oder wird ruckelig abgespielt. Der einzige Weg, wie ich damit zuverlässig umgegangen bin, ist die Verwendung von AviDemux. Mit den Kopiereinstellungen für Audio und Video und der Auswahl von MP4V2 Muxer ist es möglich, unter der Option Konfigurieren die Option Für Streaming optimieren auszuwählen. Die resultierende MP4-Datei kann jetzt in ffmpeg verwendet werden, ohne dass Fehlermeldungen generiert werden. Vertrauen Sie, dass dies von Nutzen ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.