Perché Quicktime non può riprodurre un file di filmato codificato da FFmpeg?

Quando cerco di aprire un film appena creato con il command:

ffmpeg -pattern_type glob -i '*.JPG' -s 640x480 movie.mp4 

Ho un errore da QuickTime:

 The document “movie.mp4” could not be opened. The file may be damaged or may not be a movie file that is compatible with QuickTime Player. 

Ho usato lo stesso command su un insieme di immagini generate da un intervallo di tempo iSight, ma in questo caso le immagini di cui sopra sono da una camera digitale. La risoluzione è molto più alta, ma lo sto scalando a 640×480 e non vedo niente nell'output che suggerisca un problema:

 Input #0, image2, from '*.JPG': Duration: 00:00:04.76, start: 0.000000, bitrate: N/A Stream #0:0: Video: mjpeg, yuvj422p(pc), 4928x3264, 25 tbr, 25 tbn, 25 tbc 

contro il film di lavoro:

 Input #0, image2, from '*.JPG': Duration: 00:01:23.72, start: 0.000000, bitrate: N/A Stream #0:0: Video: mjpeg, yuvj420p(pc), 640x480 [SAR 1:1 DAR 4:3], 25 fps, 25 tbr, 25 tbn, 25 tbc 

E per l'output:

 Output #0, mp4, to 'movie.mp4': Metadata: encoder : Lavf55.19.104 Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuvj422p, 640x480, q=-1--1, 12800 tbn, 25 tbc Stream mapping: Stream #0:0 -> #0:0 (mjpeg -> libx264) 

vs per quello che lavora:

 Output #0, mp4, to 'movie.mp4': Metadata: encoder : Lavf55.19.104 Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuvj420p, 640x480 [SAR 1:1 DAR 4:3], q=-1--1, 12800 tbn, 25 tbc Stream mapping: Stream #0:0 -> #0:0 (mjpeg -> libx264) 

A parte il filmato di lavoro più lungo e la risoluzione di una sorgente più bassa, l'unica differenza che vedo è che c'è una "SAR [1: 1 DAR 4: 3]" nel stream video, ma non ho idea di cosa sia è, o come provare a forzarlo nel film non lavorativo.

Aggiornamento: Ho appena scaricato VLC e suona il film bene. Quindi so che ffmpeg non è colpa qui.

Sulla base di questa risposta StackOverflow vorrei aggiungere -pix_fmt yuv420p al tuo command come questo; uno dei commenti menziona l' aggiunta di -vcodec libx264 così come è incluso qui:

 ffmpeg -pattern_type glob -i '*.JPG' -vcodec libx264 -s 640x480 \ -pix_fmt yuv420p movie.mp4 

Oppure puoi utilizzare il filter di formato . Questo esempio utilizza il filter di scala invece di -s e il filter di formato invece di -pix_fmt :

 ffmpeg -pattern_type glob -i '*.JPG' -vcodec libx264 \ -vf scale=640:-2,format=yuv420p movie.mp4 

Inoltre elaborato nel WFP FFmpeg ufficiale sotto la voce "Codifica per i giocatori muti"; enfasi mia:

Potrebbe essere necessario utilizzare -pix_fmt yuv420p per la tua output per lavorare in QuickTime e in molti altri giocatori. Questi giocatori support solo lo spazio planare planare YUV con il sottomasolamento di chroma 4: 2: 0 per il video H.264. Altrimenti, a seconda della fonte, ffmpeg può essere emesso in un formato di pixel che potrebbe essere incompatibile con questi giocatori.