Neden Quicktime, FFmpeg tarafından kodlanmış bir film dosyasını oynatamıyor? [çift]


34

Bir filmi açmaya çalıştığımda, az önce şu komutla oluşturdum:

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

QuickTime'dan bir hata alıyorum:

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.

Aynı komutu iSight zaman atlamalı tarafından oluşturulan bir dizi görüntüde kullandım, ancak bu durumda yukarıdaki görüntüler bir dijital kameradan geliyor. Çözünürlük çok daha yüksek, ancak 640x480'e ölçeklendiriyorum ve çıktıda sorun çıkaran hiçbir şey göremiyorum:

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

çalışan film vs.

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

Ve çıktı için:

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)

çalışan kişi için vs.

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)

Çalışan filmin daha uzun olması ve daha düşük kaynak çözünürlüğünün yanı sıra, görebildiğim tek fark, video akışında belirtilen fazladan bir "[SAR 1: 1 DAR 4: 3]" olduğu, ancak bunun ne olduğu hakkında hiçbir fikrim yok. , ya da çalışmayan filmde zorlamak için nasıl çalışacağını.

Güncelleme: Sadece VLC'yi indirdim ve filmi iyi oynatıyor. Bu yüzden ffmpeg’in burada hatalı olmadığını biliyorum.


2
Gelecekte, ffmpeg hakkında soru sorurken, lütfen her zaman tam, kesilmemiş komut satırı çıktısını ekleyin. Yanılmıyorsam (ve yeni bir versiyona sahipseniz), piksel formatı hakkında bazı oynatıcılarla uyumlu olmama konusunda bir şey söylemeliydi.
slhck

ffprobe video.mp4Hangi piksel biçiminin kullanıldığını kontrol etmek için kullanılabilir.
l - marc l

Yanıtlar:


47

Bu StackOverflow yanıtına dayanarak -pix_fmt yuv420pkomutunuza böyle ekleyeceğim ; yorumlardan biri de eklendiğinden bahsettiğinden-vcodec libx264 buraya dahil:

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

Veya format filtresini kullanabilirsiniz . Bu örnek yerine ölçek filtresini-s ve bunun yerine biçim filtresini kullanacaktır -pix_fmt:

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

Ayrıca resmi FFmpeg Wiki'de “Aptal oyunculara kodlama” başlığı altında detaylandı ; vurgu benim:

-pix_fmt yuv420pÇıktınızın QuickTime ve diğer birçok oynatıcıda çalışması için kullanmanız gerekebilir . Bu oynatıcılar sadece H.264 video için 4: 2: 0 kroma alt örneklemeli YUV düzlemsel renk alanını destekler. Aksi halde, kaynağınıza bağlı olarak, ffmpeg bu oynatıcılarla uyumlu olmayan bir piksel biçiminde çıktı verebilir.


6
Gerçekten de, ffmpeg, Quicktime'ı üzen yuv422p'nin varsayılan kodlamasını seçiyordu. Ekleme -pix_fmt yuv420pbenim için çözdü!
Nick Desaulniers 16:15

sadece ilk çözüm benim için çalıştı
PR
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.