FFMPEG сообщает о другом (неправильном) разрешении видео по сравнению с тем, как оно воспроизводится - PullRequest
5 голосов
/ 30 апреля 2011

Быстрый вопрос, у меня есть фильм, который был вырезан и воспроизведен с помощью Sony Vegas из исходного формата в файл .wmv. Здесь начинается сложная часть: фильм при воспроизведении с VLC или WMP имеет разрешение 656x480 ... НО, когда я запускаю ffmpeg -i , он говорит, что у него есть разрешение 600x480 ....

Я потратил время на фактическую съемку кадра и обрезку его с помощью фотошопа и его 656, а не 600, как ffmpeg с его отчетами, почему это могло произойти? Как я могу исправить разрешение заголовков? Повлияет ли это на повторный рендеринг видео? Как я уже сказал, VLC и WMP, похоже, не заботятся о неправильных заголовках и воспроизводят их правильно, НО, jwplayer, похоже, использует информацию заголовка, что я не виню его, это правильно, но почему видео заголовки могут быть неправильными?

ffmpeg -i trailer.wmv
Input #0, asf, from 'trailer.wmv':
Duration: 00:01:04.93, start: 3.000000, bitrate: 2144 kb/s
Stream #0.0: Audio: wmav2, 44100 Hz, mono, 32 kb/s
Stream #0.1: Video: wmv3, yuv420p, 600x480 [PAR 59:54 DAR 295:216], 2065 kb/
s, 25.00 tb(r)

И да, параметры PAR/DAR также неверны, но, честно говоря, я не понимаю этого технического дерьма, обычно смотрю видео и стараюсь, чтобы оно выглядело хорошо, любая обратная связь приветствуется: P

Есть ли способ изменить информацию о контейнере с помощью ffmpeg, чтобы приложения, которые действительно используют информацию о контейнере, не отображали видео неправильно?

1 Ответ

7 голосов
/ 20 декабря 2011

FFMPEG на 100% правильно, что технические вещи важны: D

Ваши PAR (форматное соотношение пикселей) и DAR (форматное соотношение дисплея) на самом деле правильны, и вы доказали это, сделав снимок экрана и измерив его.

Что сбило вас с толку, так это PAR . Не все пиксели имеют квадратную форму! IE: 1: 1, хотя большинство загружаемых видео будет таким, которое вы, вероятно, никогда не заметили. Некоторые плееры, такие как VLC, распознают значение PAR и растягивают видео соответственно, чтобы соответствовать DAR . DVD-видео является отличным примером этого.

Смотри также: http://en.wikipedia.org/wiki/Pixel_aspect_ratio

Итак, ffmpeg говорит, что ширина вашего видео равна 600. Умножьте это на PAR , и вы получите «реальную» ширину. Это означает, что пиксели были квадратными, а не прямоугольными (по горизонтали). 600 * (59/54) = 656 (округлено) Число выглядит знакомо?

Теперь возьмите «реальный» размер: 656/480 = 1.366 и посмотрите на ваш DAR: 295/216 = 1.366

Magic!

Как вы узнали, не все видеоплееры достаточно умны, чтобы распознавать PAR и выполнять соответствующее растяжение. Вы можете изменить его на 1: 1, используя ffmpeg, легко используя сетевые фильтры и видео фильтры.

ffmpeg ... stuff ... -vf "scale = 656: 480, setsar = 1: 1" ... more stuff ...

Для любопытных он называется setsar, потому что он также называется Sample (aka Pixel) Aspect Ratio: http://ffmpeg.org/ffmpeg.html#setsar-1

Надеюсь, что эта помощь, я уверен, что поначалу смущает многих людей (включая меня).

...