Prawidłowy współczynnik kształtu bez ponownego kodowania pliku wideo

18

Mam strumień wideo o następujących właściwościach:

Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID / 0x44495658), yuv420p, 720x416 [SAR 1:1 DAR 45:26], 1908 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc

Kiedy uruchamiam go w VLC, muszę nacisnąć „A”, aby zmienić proporcje obrazu na „4: 3”, aby wideo wyświetlało się z właściwym współczynnikiem proporcji.

Patrząc na fakty wideo, czy błąd polega na tym, że a) rzeczywiste wideo zostało niepoprawnie rozciągnięte w danych pikselowych, lub b) istnieje po prostu pewna wartość metadanych, która została nieprawidłowo ustawiona?

Jeśli to pierwsze, wiem, że mogę ponownie zakodować wideo i zmienić szerokość i wysokość. Ale jeśli to drugie, jakie polecenie ffmpeg uruchomić, aby naprawić metadane bez ponownego kodowania samego wideo?

naprzód
źródło

Odpowiedzi:

36

Istnieje różnica między współczynnikiem proporcji próbki (SAR) a współczynnikiem wyświetlanego obrazu (DAR). Jeśli chcesz zmienić wideo do wyświetlania w formacie 4: 3, musisz albo zmienić rzeczywiste piksele na obrazie (skalując piksele i zmieniając SAR), albo ustawiając flagę metadanych na poziomie kontenera, która mówi zewnętrznemu odtwarzacze multimedialne, aby rozciągnąć obraz do żądanego DAR.

Nie będzie można skalować pikseli i zmieniać SAR bez zastosowania filtra wideo. Jeśli wybierzesz tę metodę, konieczne będzie transkodowanie pliku - ponieważ nie można „przesłać strumieniowo” strumienia wideo podczas stosowania filtra wideo.

Aby przeskalować obraz i zmienić SAR (podczas transkodowania), spróbuj:

ffmpeg -i <INPUT_FILE> -vf scale=720:540 -c:v <Video_Codec> <OUTPUT_FILE>

Z drugiej strony, jeśli chcesz tylko zmienić flagę metadanych i dostosować DAR, będziesz mógł strumieniowo skopiować film. Aby to zrobić, spróbuj:

ffmpeg -i <INPUT_FILE> -aspect 720:540 -c copy [OUTPUT_FILE]
occvtech
źródło
Świetny! Zmiana aspektu zadziałała od razu!
forwardrin 30.04.15
2
Nie można jednocześnie używać -c copyi skalować; można jednak użyć -aspectdo zmiany współczynnika kształtu na poziomie kontenera (ale nie na poziomie strumienia).
llogan
@ LordNeckbeard, using -aspectdziała w trybie odtwarzania ffplay, ale nie działa w WMP ani MPC-HC. Dodaje dodatkowy element SAR / DAR do Stream #…linii informacyjnej w, FFmpeg/probe/playale wydaje się, że nie jest to rozwiązanie do ogólnego odtwarzania. Rozciąganie wideo za pomocą okna wydaje się najłatwiejszym rozwiązaniem do odtwarzania MPC-HC.
Lumi,
nie działało dla mnie dla MPEG2 bez ponownego kodowania
Michaił V
Nie wiem, dlaczego mi to nie zadziałało. Po prostu wyświetla ten sam film!
Tina J
4

Odpowiedź Delgado jest prawidłowa, że ​​MP4Box może to zrobić, ale -paropcja nie działa tak, jak opisano. Za pomocą -outparametru (aby nie zakłócać oryginalnego pliku):

mp4box source.mp4 -out target.mp4 -par stream-number=width:height

Podczas używania -par stream-number=width:heightdefiniujesz proporcje pikseli - to znaczy wynik dzielenia proporcji urządzenia przez proporcje pamięci. (Równolegle opisujesz proporcje piksela źródłowego.) Załóżmy na przykład, że masz źródło DVD o rozdzielczości 720 × 480, a prawidłowy współczynnik wyświetlania wynosi 4: 3. W tym przypadku potrzebujesz:

mp4box source.mp4 -out target.mp4 -par 1=8:9

ponieważ (4/3) / (720/480) = 8/9.

Jeśli źródło reprezentuje prawdziwe piksele SD NTSC (w takim przypadku tylko środkowe 704 × 480 pikseli powinny być mapowane na ekran 4 × 3, z 8-pikselowym przeskanowaniem po obu stronach), poprawne polecenie brzmiałoby:

mp4box source.mp4 -out target.mp4 -par 1=10:11

ponieważ (4/3) / (704/480) = 10/11 - dokładnie proporcje pikseli odniesienia dla wideo w standardowej rozdzielczości NTSC.

W przypadku podanym w pytaniu, jeśli to naprawdę 4: 3, daje to bardzo dziwny współczynnik proporcji pikseli: (4/3) / (720/416) = 104/135. Ma 720 szerokości, co sugeruje źródło DVD; jest to wideo 25 fps, sugerujące PAL, ale PAR działa mniej niż 1, sugerując NTSC. Przypuszczam, że może to być 4: 5 (bardzo blisko 104: 135), ale nie znam niczego, co dałoby ten współczynnik pikseli; może najpierw wypróbuj to, a następnie wypróbuj 3: 4, jeśli nadal wygląda na nieco zbyt rozciągniętego w poziomie. Jeśli jesteś pewien, że to dokładnie 4: 3, oczywiście, użyj 104: 135.

Coises
źródło
3

ffmpeg nie może zmienić parametrów strumienia wideo bez ponownego kodowania, MP4Box (część gpac ) i mkvmerge mogą. W przypadku jednego strumienia wideo i rzeczywistego / poprawnego współczynnika proporcji 4: 3 możesz spróbować:

MP4Box -par 1=3:4 VideoFile.mp4

    "-par" : PixelAspectRatio (adjusts DAR + SAR with respect to the video resolution)
    "1"=   : stream number
    "3:4"  : aspect ratio (lower number 1st!)
    Changes are directly applied to "VideoFile.mp4", no copy

Aby zweryfikować przed i po: ffmpeg -i VideoFile.mp4

Delgado
źródło
0

Zmiana SAR bez reencoding również prace z ffmpegna .mp4użyciu h264_metadatajako Gyan wskazał tutaj :

ffmpeg -i in.mp4 -c copy -bsf:v "h264_metadata=sample_aspect_ratio=4/3" out.mp4
drake7
źródło
Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
MMM