Kiedy próbuję otworzyć film, który właśnie utworzyłem za pomocą polecenia:
ffmpeg -pattern_type glob -i '*.JPG' -s 640x480 movie.mp4
Otrzymuję błąd z 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.
Użyłem tego samego polecenia na zestawie obrazów wygenerowanych z upływu czasu iSight, ale w tym przypadku powyższe obrazy pochodzą z aparatu cyfrowego. Rozdzielczość jest znacznie wyższa, ale skaluję ją do 640x480 i nie widzę nic na wyjściu, co sugerowałoby problem:
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
a działający film:
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
I dla wyniku:
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. dla pracującego:
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)
Poza dłuższym działającym filmem i niższą rozdzielczością źródłową, jedyną różnicą, którą widzę, jest to, że w strumieniu wideo pojawia się dodatkowy „[SAR 1: 1 DAR 4: 3]”, ale nie mam pojęcia, co to jest lub jak spróbować wymusić to w niedziałającym filmie.
Aktualizacja: Właśnie pobrałem VLC i dobrze odtwarza film. Wiem, że ffmpeg nie jest tutaj winna.
ffprobe video.mp4
można użyć do sprawdzenia, który format pikseli jest używany.Odpowiedzi:
Na podstawie tej odpowiedzi StackOverflow dodam
-pix_fmt yuv420p
do twojego polecenia w ten sposób; jeden z komentarzy wspomina-vcodec libx264
również o dodawaniu, więc jest on zawarty tutaj:Lub możesz użyć filtra formatu . W tym przykładzie użyty zostanie filtr skalowania zamiast
-s
, a filtr formatu zamiast-pix_fmt
:Opracowano również na oficjalnej Wiki FFmpeg pod nagłówkiem „Kodowanie dla głupich graczy”; mój nacisk:
źródło
-pix_fmt yuv420p
rozwiązało to dla mnie!