DTS non monotono su concat (ffmpeg)


17

Dopo aver eseguito questo comando ffmpeg -f concat -i mylist.txt -c copy output.mp4- Ricevo output.mp4file corrotto e questo messaggio:

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%

Il contenuto di mylist.txt

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

cut.mp4 output da 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 output da 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 Ho ricevuto questo comando ffmpeg -ss 00:00:11 -i myfile.mp4 -to 00:00:39 -vf 'drawbox= : x=0 : y=0 : color=invert' cut.mp4

cut2.mp4 Ho ricevuto questo comando ffmpeg -ss 00:00:00 -i myfile.mp4 -to 00:00:10 -c copy cut2.mp4

Ho cercato molto - non ho trovato alcuna soluzione, forse qualcuno mi può aiutare con questo.

output.mp4 è giocabile, ma sembra strano.

inserisci qui la descrizione dell'immagine


1
Potete fornire entrambi i file di input in modo che io possa eseguire i test?
Llogan,

@LordNeckbeard sì, te l'ho inviato, grazie mille.
whitesiroi,

1
Non riesco a duplicare il problema esatto. Sto usando la build statica più recente disponibile da tessus . I file di esempio sembrano essere diversi dallo screenshot, ma sembra funzionare bene in VLC e QuickTime, tranne per il fatto che la ricerca sembra incasinata. Ho provato su una macchina OS X perché assomiglia a quello che stai usando.
Llogan,

@LordNeckbeard Grazie mille, sì con questa versione ffmpeg versione N-71996-g372aa07-tessus funziona alla grande. Grazie.
whitesiroi,

tl; dr; rimuovere -c copyper consentire la ricodifica o -c:a copysolo l' uso . Quindi il passaggio concat può ancora essere utilizzato -c copypoiché tutti i video sono già ricodificati. Si noti che alcuni video con questo avviso sembrano ancora ok dopo il concat e quindi -c copyva bene.
林果 皞

Risposte:


10

Usando l'ultima ffmpeg

Gli utenti generici devono sempre utilizzare ffmpegdal ramo master git corrente (l'ultimo codice disponibile):

  • Quando si verifica un problema, la prima cosa da fare è verificare se si sta utilizzando una build di git master.
  • È considerato stabile.
  • Avrà più correzioni di bug e funzionalità.
  • Lo sviluppo di FFmpeg è molto attivo .
  • Se vuoi ottenere supporto dalle risorse di aiuto ufficiali devi usare git master.
  • Le pubblicazioni sono per i distributori.

Consulta la pagina di download di FFmpeg per varie opzioni o fai riferimento a FFmpeg Wiki: Compile Guides .

Altre cose

  • Ai tuoi comandi drawboxpuoi copiare l'audio con vapore-c:a copy invece di ricodificarlo.

  • Quando si utilizza -ss, -tofunziona solo come previsto se -ssviene utilizzato come opzione di output.


Grazie mille, funziona meglio e più velocemente. Potete per favore controllare anche questo video.stackexchange.com/questions/15477/… Sono solo curioso di sapere se può essere semplificato.
whitesiroi,

@whitesiroi Certo. Risposto, anche se sembra che abbia reso infelice un commentatore a quella domanda.
Llogan,

Scusa per quello.
whitesiroi,

1

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

Ho avuto lo stesso problema. Sto eseguendo ffmpeg versione 2.6.3 su un Mac. Ho convertito i miei clip sorgente nel formato .MTS con un tag aggiunto di -q 0, ho aggiornato le estensioni nel file di testo e ho impostato il mio file di output su un .MTS quando ho eseguito il comando concat in ffmpeg. Ha funzionato come un fascino. Ecco il mio flusso di lavoro.

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

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

aggiornato il file di testo (mylist.txt) per leggere:

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

quindi ha eseguito il comando concat come segue:

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

Ha funzionato per me! È possibile convertire l'output finale.MTS in qualsiasi formato sia necessario.


questo protocollo è senza perdita?
becko,

No, il primo comando converte in MPEG-2 che non ha una modalità lossless.
Gyan,

1

Ho riscontrato errori simili e l'audio nei miei video di output a volte era fuori sincrono e talvolta mancava completamente, ma alla fine ho mkvmergeusato invece da mkvtoolnix.

I miei video di input erano stati codificati con impostazioni diverse e avevano dimensioni diverse, quindi ho prima ridimensionato e ricodificato loro usando 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

Alcuni dei miei video di input non avevano un canale audio, quindi ho usato un comando come questo per aggiungere un canale audio silenzioso a loro:

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

Dopo di che ho concatenato i video:

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

Se i file di input hanno le stesse dimensioni, lo stesso numero di canali audio, la stessa frequenza di campionamento audio e così via, è possibile utilizzare solo mkvmergeper concatenare i file senza perdita di dati. I file di input per mkvmergepossono anche avere un contenitore MP4 ma il file di output avrà un contenitore MKV anche se la sua estensione è specificata come .mp4. È possibile eseguire ffmpeg -i output.mkv -c copy output.mp4per cambiare il contenitore.

mkvmergeha una sintassi come mkvmerge -o output.mkv file1.mkv + file2.mkv + file3.mkv, dove mkvmerge -o output.mkv file1.mkv +file2.mkv +file3.mkvè anche accettato.


1

Basato sulla risposta davvero utile di Duncan:

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

Poi questo:

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

0

Quando uso ffmpeg per rimodellare alcuni video registrati (possono essere TS, MP4 o MKV) e ottenere i dts non monotoni nel flusso di output - errori di data / ora ecc. Ecc., Il video risultante sembra avere solo audio o viene riprodotto a scatti. L'unico modo che ho scoperto per gestirmi in modo affidabile è utilizzare AviDemux. Con Copia impostazioni sia per audio che per video e selezionando MP4V2 Muxer è possibile, sotto l'opzione Configura selezionare Ottimizza per streaming. Il file MP4 risultante ora può essere utilizzato in ffmpeg senza generare messaggi di errore. Fidati di questo è utile.

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.