49 votes

Pourquoi Quicktime ne peut-il pas lire un fichier vidéo encodé par FFmpeg ?

Lorsque j'essaie d'ouvrir un film que je viens de créer avec la commande :

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

Je reçois une erreur de 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.

J'ai utilisé la même commande sur un ensemble d'images générées à partir d'un time lapse iSight, mais dans ce cas, les images ci-dessus proviennent d'un appareil photo numérique. La résolution est beaucoup plus élevée, mais je la mets à l'échelle en 640x480 et je ne vois rien dans la sortie qui suggère un problème :

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

vs. le film de travail :

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

Et pour la sortie :

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. pour le travailleur :

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)

Outre le fait que le film qui fonctionne est plus long et que la résolution de la source est inférieure, la seule différence que je vois est qu'il y a un "[SAR 1:1 DAR 4:3]" supplémentaire mentionné dans le flux vidéo, mais je n'ai aucune idée de ce que c'est, ou de comment essayer de le forcer dans le film qui ne fonctionne pas.

Mise à jour : je viens de télécharger VLC et il lit le film sans problème. Je sais donc que ffmpeg n'est pas en cause.

80voto

Giacomo1968 Points 48326

Sur la base de cette Réponse de StackOverflow J'ajouterais -pix_fmt yuv420p à votre commande comme suit ; l'un des commentaires mentionne ajoutant -vcodec libx264 également, il est donc inclus ici :

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

Vous pouvez également utiliser la fonction filtre de format . Cet exemple utilisera l'option filtre à échelle au lieu de -s et le filtre de format au lieu de -pix_fmt :

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

También développé dans le wiki officiel de FFmpeg sous le titre "Encoding for dumb players" ; c'est moi qui souligne :

Il se peut que vous deviez utiliser -pix_fmt yuv420p pour que votre résultat fonctionne dans QuickTime et la plupart des autres lecteurs. Ces acteurs ne soutiennent que avec sous-échantillonnage chromatique 4:2:0 pour la vidéo H.264. Sinon, en fonction de votre s qui peut être incompatible avec ces lecteurs.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X