Come sbarazzarsi di ffmpeg pts non ha alcun errore di valore


15

Sto cercando di convertire un file AVI in un file MP4. Il flusso video è un XVID mentre il flusso audio è MP3.

Il problema è che il file MP4 risultante non è riproducibile in QuickTime Player su un Mac. Gioca su VLC. Anche se non è un affare, vorrei sapere come risolvere tali problemi.

Il comando e il suo output sono i seguenti:

$ ffmpeg -i 103.avi -codec copy -f mp4 103.mp4

ffmpeg version N-60163-g78a9f18 Copyright (c) 2000-2014 the FFmpeg developers
  built on Jan 25 2014 14:03:47 with Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
  configuration: 
  libavutil      52. 63.100 / 52. 63.100
  libavcodec     55. 49.100 / 55. 49.100
  libavformat    55. 26.100 / 55. 26.100
  libavdevice    55.  5.102 / 55.  5.102
  libavfilter     4.  1.101 /  4.  1.101
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
Input #0, avi, from '103.avi':
  Metadata:
    encoder         : Lavf55.26.100
  Duration: 00:49:36.43, start: 0.000000, bitrate: 986 kb/s
    Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID / 0x44495658), yuv420p, 512x368 [SAR 1:1 DAR 32:23], 23.98 tbr, 23.98 tbn, 23.98 tbc
    Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, s16p, 121 kb/s
Output #0, mp4, to '103.mp4':
  Metadata:
    encoder         : Lavf55.26.100
    Stream #0:0: Video: mpeg4 ( [0][0][0] / 0x0020), yuv420p, 512x368 [SAR 1:1 DAR 32:23], q=2-31, 11988 tbn, 23.98 tbc
    Stream #0:1: Audio: mp3 (i[0][0][0] / 0x0069), 48000 Hz, stereo, 121 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[mp4 @ 0x7fe5ca01fa00] pts has no value
    Last message repeated 1555 times
[mp4 @ 0x7fe5ca01fa00] pts has no value9kB time=00:01:17.70 bitrate=1458.0kbits/s    
    Last message repeated 1041 times
[mp4 @ 0x7fe5ca01fa00] pts has no value49kB time=00:02:08.42 bitrate=1661.6kbits/s    
    Last message repeated 1906 times
[mp4 @ 0x7fe5ca01fa00] pts has no value53kB time=00:03:40.39 bitrate=1537.1kbits/s    
    Last message repeated 2136 times
[mp4 @ 0x7fe5ca01fa00] pts has no value93kB time=00:05:35.80 bitrate=1307.4kbits/s    
    Last message repeated 3519 times
[mp4 @ 0x7fe5ca01fa00] pts has no value32kB time=00:08:32.18 bitrate=1150.5kbits/s    
    Last message repeated 2813 times
[mp4 @ 0x7fe5ca01fa00] pts has no value88kB time=00:11:18.01 bitrate=1090.9kbits/s    
    Last message repeated 3057 times
[mp4 @ 0x7fe5ca01fa00] pts has no value39kB time=00:14:00.42 bitrate=1028.7kbits/s    
    Last message repeated 3731 times
[mp4 @ 0x7fe5ca01fa00] pts has no value11kB time=00:16:57.72 bitrate= 991.0kbits/s    
    Last message repeated 2658 times
[mp4 @ 0x7fe5ca01fa00] pts has no value76kB time=00:19:25.70 bitrate= 978.1kbits/s    
    Last message repeated 2167 times
[mp4 @ 0x7fe5ca01fa00] pts has no value70kB time=00:21:17.11 bitrate= 990.8kbits/s    
    Last message repeated 3663 times
[mp4 @ 0x7fe5ca01fa00] pts has no value20kB time=00:24:42.06 bitrate= 938.1kbits/s    
    Last message repeated 2335 times
[mp4 @ 0x7fe5ca01fa00] pts has no value79kB time=00:26:53.90 bitrate= 950.6kbits/s    
    Last message repeated 4153 times
[mp4 @ 0x7fe5ca01fa00] pts has no value06kB time=00:30:59.94 bitrate= 895.4kbits/s    
    Last message repeated 3168 times
[mp4 @ 0x7fe5ca01fa00] pts has no value87kB time=00:33:35.43 bitrate= 888.5kbits/s    
    Last message repeated 1565 times
[mp4 @ 0x7fe5ca01fa00] pts has no value02kB time=00:34:56.47 bitrate= 914.0kbits/s    
    Last message repeated 2792 times
[mp4 @ 0x7fe5ca01fa00] pts has no value10kB time=00:37:34.42 bitrate= 909.6kbits/s    
    Last message repeated 2503 times
[mp4 @ 0x7fe5ca01fa00] pts has no value49kB time=00:39:48.76 bitrate= 916.2kbits/s    
    Last message repeated 1714 times
[mp4 @ 0x7fe5ca01fa00] pts has no value70kB time=00:41:16.64 bitrate= 928.7kbits/s    
    Last message repeated 2060 times
[mp4 @ 0x7fe5ca01fa00] pts has no value79kB time=00:43:04.79 bitrate= 935.2kbits/s    
    Last message repeated 1349 times
[mp4 @ 0x7fe5ca01fa00] pts has no value46kB time=00:44:06.57 bitrate= 951.6kbits/s    
    Last message repeated 2354 times
[mp4 @ 0x7fe5ca01fa00] pts has no value67kB time=00:45:56.33 bitrate= 967.9kbits/s    
    Last message repeated 2668 times
[mp4 @ 0x7fe5ca01fa00] pts has no value50kB time=00:48:14.72 bitrate= 964.9kbits/s    
    Last message repeated 1655 times
frame=71363 fps=5738 q=-1.0 Lsize=  355528kB time=00:49:36.43 bitrate= 978.5kbits/s    
video:309630kB audio:44196kB subtitle:0 global headers:0kB muxing overhead 0.481011%

Se poi copio di nuovo mp4, ottengo i seguenti risultati:

$ ffmpeg -i 103.mp4 -codec copy -f mp4 103-new.mp4

ffmpeg version N-60163-g78a9f18 Copyright (c) 2000-2014 the FFmpeg developers
  built on Jan 25 2014 14:03:47 with Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
  configuration: 
  libavutil      52. 63.100 / 52. 63.100
  libavcodec     55. 49.100 / 55. 49.100
  libavformat    55. 26.100 / 55. 26.100
  libavdevice    55.  5.102 / 55.  5.102
  libavfilter     4.  1.101 /  4.  1.101
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
[mpeg4 @ 0x7fcddb018000] Video uses a non-standard and wasteful way to store B-frames ('packed B-frames'). Consider using a tool like VirtualDub or avidemux to fix it.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '103.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2mp41
    encoder         : Lavf55.26.100
  Duration: 00:49:36.44, start: 0.000000, bitrate: 978 kb/s
    Stream #0:0(und): Video: mpeg4 (Advanced Simple Profile) (mp4v / 0x7634706D), yuv420p, 512x368 [SAR 1:1 DAR 32:23], 852 kb/s, 23.98 fps, 23.98 tbr, 11988 tbn, 23.98 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: mp3 (mp4a / 0x6134706D), 48000 Hz, stereo, s16p, 121 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Output #0, mp4, to '103-new.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2mp41
    encoder         : Lavf55.26.100
    Stream #0:0(und): Video: mpeg4 ( [0][0][0] / 0x0020), yuv420p, 512x368 [SAR 1:1 DAR 32:23], q=2-31, 852 kb/s, 23.98 fps, 11988 tbn, 11988 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: mp3 (i[0][0][0] / 0x0069), 48000 Hz, stereo, 121 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=71363 fps=5505 q=-1.0 Lsize=  355528kB time=00:49:36.43 bitrate= 978.5kbits/s    
video:309567kB audio:44196kB subtitle:0 global headers:0kB muxing overhead 0.498835%

Risposte:


25

Innanzitutto, uno sfondo sul perché questo errore esiste. AVI non supporta video con frequenza dei fotogrammi variabile. Quindi da qualche parte all'inizio del file viene registrata la frequenza dei fotogrammi. mp4 supporta frame rate variabile, quindi è necessario che sia nota la durata di ciascun frame. In ffmpeg la generazione di pts per i video con frame rate fisso è generalmente gestita dal decoder. ma usando -codec copy, stai bypassando il decodificatore.

La soluzione sta specificando -fflags +genpts(deve essere prima che il file di input sia specificato con -i).


Grazie mille per il dettaglio dello sfondo e per la soluzione suggerita. Questo lo spiega un po '. Quindi qualcosa del genere ffmpeg -i 103.avi -fflags +genpts -codec copy -f mp4 103.mp4? In realtà l'ho provato prima di pubblicare qui, ma non ha risolto il problema nel mio caso. Sai come utilizzare avidemuxper risolvere questo problema come suggerito dal secondo registro?
Umar Farooq Khawaja,

5
@UmarFarooqKhawaja -fflags +genptsdeve andare prima -i.
Andrew Marshall,

Ha funzionato bene, ma il file mp4 risultante non è ricercabile in Quick Time Player. Qualche idea ..?
Tony Thomas,

1
Secondo la mia modesta opinione, ciò è dovuto al fatto che Quicktime Player è stupido (una descrizione più accurata è che probabilmente manca un indice).
Wyatt8740,

6
So che questa è una domanda / risposta relativamente vecchia. L'ho trovato cercando la soluzione a questo stesso problema. Sfortunatamente, -fflags +genptsnon risolve il problema. Ricevo esattamente lo stesso errore. Sono in esecuzione su OSX e ho compilato ffmpeg da fonti.
Aleks G,

1

Ho scoperto che l'hard-coding della frequenza dei fotogrammi ha risolto questo problema:

ffmpeg -r 25 -i test.h264 -codec copy testout25.mp4

(Ho ancora ricevuto l'avviso "I timestamp non sono impostati in un pacchetto nello stream 0", ma il file risultante era ricercabile in Quicktime Player su un Mac.)


Prova a utilizzare l' -fflags +nofillinopzione prima della -idichiarazione e riporta indietro.
林正浩
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.