Я пытался сделать некоторые видео редактирования и кодирования. У меня есть так называемое SD-видео, которое якобы должно быть в 4:3
соотношении сторон. Но вместо 640x480
, это 720x480
. Интересно, когда я играю в нее с помощью медиаплеера, я вижу, 640x480
что она не воспроизводится как 720x480
!
Что происходит?! Как это возможно?
Есть 2 разные вещи:
Проблема возникла в старые недобрые времена, когда разрешение устройств (количество пикселей в изображении) было очень низким, а необходимое соотношение ширины к высокому для воспроизведения было 4:3.
Решением (в те времена) было изобретение неквадратных пикселей.
Для простоты предположим (теоретически) очень низкие размеры:
Решением были неквадратные пиксели с соотношением сторон пикселя ( PAR ) 4:3 , как здесь:
Таким образом, соотношение сторон пикселя ( PAR ) — это соотношение размеров каждого отдельного пикселя:
Каждый синий пиксель на нашем изображении имеет PAR 4:3, а каждый оранжевый и каждый зеленый — PAR 1:1.
Теперь все наше (синее) изображение отображается правильно, как мы и хотели — например, как 12 см x 9 см — поэтому его соотношение сторон экрана ( DAR ) составляет 12: 9 или 4: 3.
Несмотря на это, он сохраняется как 3 × 3 пикселя, поэтому соотношение сторон при хранении ( SAR ) составляет 3 пикселя: 3 пикселя или 1:1.
Намекать:
Следовательно, соотношение между этими тремя значениями равно
ДАР = САР × ПАР.
Важное примечание:
Иногда PAR (Pixel Aspect Ratio) называют Sample Aspect Ratio — как в FFmpeg *. К сожалению, аббревиатура для него тогда SAR , что очень сбивает с толку, потому что, как мы видели, это также аббревиатура для соотношения сторон хранения.
Главная проблема:
В настоящее время все устройства имеют соотношение сторон пикселя 1:1 (квадратные пиксели), и многие медиаплееры, в основном для небольших устройств (мобильные телефоны, планшеты), полагаются на него, полностью игнорируя значение DAR, хранящееся в видеопотоках .
Так что вы можете столкнуться с ситуацией, когда одно и то же видео (сделанное из всех источников) корректно воспроизводится на вашем стационарном или портативном компьютере, но некорректно (суженно) на вашем смартфоне. Или даже на другом медиаплеере на том же компьютере или устройстве.
В нашем примере кадры могут неправильно отображаться в виде квадрата (см. зеленую часть изображения выше).
Решение этой проблемы в FFmpeg:
В нашем (нереальном) примере вы можете использовать filtergraph
-vf scale=4:3,setsar=1,setdar=w/h
где w
- ширина (только что отмасштабированных) кадров в пикселях, h
- их высота. FFmpeg автоматически заменит соответствующие значения.
Результатом будет оранжевая часть изображения выше.
В вашем случае ваше видео имеет (из вашей информации)
Таким образом, чтобы избежать проблем с медиаплеерами, игнорирующими значение DAR (и воспроизводящими его в пропорции 720:480, вы можете преобразовать его с помощью команды
ffmpeg -i your_input_file -vf -scale=640:480,setsar=1 -c:a copy your_output_file
Проблемы с картинками с неквадратными пикселями:
С картинками дело обстоит еще хуже:
Почти все средства просмотра/редакторы изображений и интернет-браузеры просто игнорируют изображения SAR и DAR , предполагая, что все изображения в мире имеют SAR 1:1.
Почетным исключением является (что интересно и достаточно неожиданно) Microsoft Windows Photo Viewer, который корректно отображает все картинки.
Убедиться в этом можно, например, с помощью The Pixel Aspect Ratio Acid Test — все 9 картинок должны правильно отображаться в вашем браузере, но, скорее всего, это не так.
525/60 оцифрованное SD-видео в соответствии с Rec. 601 действительно имеет ширину 720 пикселей и высоту 480 пикселей, включая некоторые пробелы по бокам. Цифровой эквивалент 625/50 — 720x576. В обоих случаях соотношение сторон кадра составляет 4:3, это просто означает, что пиксели не квадратные. См. https://en.wikipedia.org/wiki/D-1_(Sony)
Чтобы усложнить ситуацию, только часть кадра имеет пропорции 4:3. По-моему, только 704х480 (для 525/60) и 704х576 (для 625/50) имеют пропорции 4:3. Смотрите обсуждение здесь: https://lurkertech.com/lg/video-systems/
Итак, 480 пикселей имеют пропорцию 10/11, 576 пикселей — пропорцию 59/54. Также см. здесь: https://en.wikipedia.org/wiki/Pixel_aspect_ratio И не забывайте, что форматы 480 и 576 строк также могут быть широкоэкранными (16:9), но с одинаковым количеством пикселей в строке. ! Кроме того, с такими числами, как 59/54, работать непросто. Все это привело к тому, что для 576-строчного формата было выбрано соотношение сторон пикселя 12/11 для соотношения сторон экрана 4:3 и 16/11 для соотношения сторон 16:9.
Квадратные пиксели стали нормой, начиная с видеоадаптера VGA, а затем и со спецификациями HD для 720-строчного и 1080-строчного видео. Кстати, есть некоторые форматы HD, которые записывают 1440x1080 или 960x720, но имеют соотношение сторон кадра 16:9, а также имеют неквадратные пиксели. Квадратные пиксели появились относительно недавно, и их не следует ожидать автоматически.
FFmpeg
некоторыми экспериментами (чтобы увидеть, имеют ли они одинаковую длину сцены). Итак, поскольку воспроизведение одинаковое, я должен предположить ffmpeg
, что 640x480 и 720x480 идентичны?!
Мариан Д