Wenn ich versuche, einen Film zu öffnen, habe ich gerade mit dem folgenden Befehl erstellt:
ffmpeg -pattern_type glob -i '*.JPG' -s 640x480 movie.mp4
Ich erhalte eine Fehlermeldung von 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.
Ich habe den gleichen Befehl für eine Reihe von Bildern verwendet, die mit einem iSight-Zeitraffer erstellt wurden. In diesem Fall stammen die oben genannten Bilder jedoch von einer Digitalkamera. Die Auflösung ist viel höher, aber ich skaliere sie auf 640x480 und sehe in der Ausgabe nichts, was auf ein Problem hindeutet:
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
gegen den Arbeitsfilm:
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
Und für die Ausgabe:
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)
für den arbeitenden:
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)
Abgesehen davon, dass der Arbeitsfilm länger ist und eine niedrigere Quellauflösung hat, kann ich nur feststellen, dass im Videostream ein zusätzliches "[SAR 1: 1 DAR 4: 3]" erwähnt wird, aber ich habe keine Ahnung, was dies ist ist, oder wie man versucht, es im nicht funktionierenden Film zu erzwingen.
Update: Ich habe gerade VLC heruntergeladen und es spielt den Film gut ab. Ich weiß also, dass ffmpeg hier keine Schuld hat.
ffprobe video.mp4
kann verwendet werden, um zu überprüfen, welches Pixelformat verwendet wird.Antworten:
Basierend auf dieser StackOverflow-Antwort würde ich
-pix_fmt yuv420p
Ihren Befehl folgendermaßen ergänzen . In einem der Kommentare wird auch das Hinzufügen erwähnt ,-vcodec libx264
so dass es hier enthalten ist:Oder Sie könnten den Formatfilter verwenden . In diesem Beispiel wird der Skalierungsfilter anstelle von
-s
und der Formatfilter anstelle von verwendet-pix_fmt
:Wird auch im offiziellen FFmpeg-Wiki unter der Überschrift „Kodierung für blöde Spieler“ erläutert . Hervorhebung meiner:
quelle
-pix_fmt yuv420p
löste es für mich!