LINUX.ORG.RU

ffmpeg кодирование видео


0

1

Доброго времени суток.

Уже не первый день разбираюсь с проблемой кодирования видео с помощью ffmpeg.

При изменении разрешения видео столкнулся с проблемой. В одном из моих видеофайлов вот такое:

[alexey@alex 2]$ ffmpeg -i input.mpg
ffmpeg version 0.7.3, Copyright (c) 2000-2011 the FFmpeg developers
  built on Aug 23 2011 04:35:42 with gcc 4.6.0 20110603 (Red Hat 4.6.0-10)
  configuration: --prefix=/usr --enable-gpl --enable-shared --enable-version3 --enable-nonfree --enable-libfaac --enable-libmp3lame --enable-libx264
  libavutil    50. 43. 0 / 50. 43. 0
  libavcodec   52.122. 0 / 52.122. 0
  libavformat  52.110. 0 / 52.110. 0
  libavdevice  52.  5. 0 / 52.  5. 0
  libavfilter   1. 80. 0 /  1. 80. 0
  libswscale    0. 14. 1 /  0. 14. 1
  libpostproc  51.  2. 0 / 51.  2. 0
[mpeg @ 0x90e0e00] max_analyze_duration 5000000 reached at 5000000
Input #0, mpeg, from 'input.mpg':                                                   
  Duration: 00:00:21.56, start: 0.220000, bitrate: 6220 kb/s
    Stream #0.0[0x1e0]: Video: mpeg2video (Main), yuv420p, 720x576 [PAR 64:45 DAR 16:9], 9500 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
    Stream #0.1[0x1c0]: Audio: mp2, 48000 Hz, stereo, s16, 224 kb/s

Присутствуют параметры [PAR 64:45 DAR 16:9], тоесть это широкоформатное видео. Есть вариант переконвертировать его в 4:3 но с добавлением черных полос сверху и снизу, что меня не устраивает.

Иначе, если не добавлять черные полосы - видео расплющивает в высоту. При таких обстоятельствах я пытался рассчитать величину высоты таким путем: height/PAR , т.е. PAR = 64/45 = 1,42, далее 576/1.42 = 406. В итоге, конвертируем в 4:3 c разрешением 720x406 и получаем правильную картинку по высоте, но проблема в том, что растягивается на весь экран в плеере она только на квадратном мониторе, а на широкоформатном - на часть экрана.

Также в выходном файле мы видим флаги PAR и DAR

Удивляет то, что на youtub-е у всех видеофайлов (даже широкоформатных) таких параметров попросту нет:

[alexey@alex 2]$ ffmpeg -i youtube-video.mp4 
ffmpeg version 0.7.3, Copyright (c) 2000-2011 the FFmpeg developers
  built on Aug 23 2011 04:35:42 with gcc 4.6.0 20110603 (Red Hat 4.6.0-10)
  configuration: --prefix=/usr --enable-gpl --enable-shared --enable-version3 --enable-nonfree --enable-libfaac --enable-libmp3lame --enable-libx264
  libavutil    50. 43. 0 / 50. 43. 0
  libavcodec   52.122. 0 / 52.122. 0
  libavformat  52.110. 0 / 52.110. 0
  libavdevice  52.  5. 0 / 52.  5. 0
  libavfilter   1. 80. 0 /  1. 80. 0
  libswscale    0. 14. 1 /  0. 14. 1
  libpostproc  51.  2. 0 / 51.  2. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'youtube-video.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2011-06-25 14:09:28
  Duration: 00:04:19.41, start: 0.000000, bitrate: 550 kb/s
    Stream #0.0(und): Video: h264 (Constrained Baseline), yuv420p, 640x360, 448 kb/s, 23.98 fps, 24 tbr, 1k tbn, 48 tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
    Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 96 kb/s
    Metadata:
      creation_time   : 2011-06-25 14:09:31

При этом, если пропорционально рассчитывать высоты и ширины при конвертации и уменьшении его размеров - то видео без проблем сжимается и отлично отображается на любых мониторах.

Кстати, пробовал заливать свое видео на youtube, после скачал и получил mp4 без PAR и DAR, так что в будущем при манипуляции с расширением видео никакие параметры больше учитывать не надо.

Подскажите, кто знает, что же за формат видео такой у youtube? Я не про кодек, там все понятно, а про отсутствие флага aspect ratio PAR и DAR. Есть ли какие-то способы его убрать при конвертировании видео ffmpeg-ом?

Так тебе рассказать про устройство ютьюба или решить твою проблему? Кстати, я так и не понял, чего ти хочешь добиться?

anonymous
()
Ответ на: комментарий от anonymous

Видно что невнимательно прочитали. Мне нужно понять, как с помощью ffmpeg убрать флаги aspect ratio (SAR DAR) из файла, либо возможно поможет установка PAR в 1:1.

Вопрос - КАК?

AlexeyVitebsk
() автор топика

Правильное разрешение вашего видео для 16:9 будет 1024x576. Информация об Aspect Ratio хранится в контейнере (mkv, mp4), а не в самом видео файле. Естественно, что видео 16:9 будет иметь чёрные полосы на мониторах с соотношением сторон 4:3. У меня, вообще, монитор 5:4 и любое видео на нём идёт с чёрными полосами в полноэкранном режиме. Естественно, что на компьютерных мониторах mpeg2 видео нужно выводить с учётом Aspect Ratio. Правильное соотношение сторон можно выставить в плеере, указать в контейнере или перекодировать видео в заданное разрешение.

Для 16:9:

PAL: 1024x576
NTSC: 854x480

Для 4:3:

PAL: 768x576
NTSC: 640x480

Nebuchadnezzar ★★★★
()
Ответ на: комментарий от Nebuchadnezzar

Не, вы меня не так поняли. Черные полосы на квадратных мониторах конечно же присутствуют, но не являются частью видеофайла, так, развернув видео на широкоформатном - получим во весь экран.

В инете же советуют добавлять черные полосы в сам файл, в таком случае уже на широкоформатном я буду наблюдать - квадрат с черными полосами вверху и внизу.

У меня же вопрос такой - что за формат у ютуба, в котором попросту нет этих данных в контейнере? И как можно их оттуда убрать? Видео ютуба я жму под любые разрещения без заморочек на aspect ratio, а вот полученные видео с камеры с предустановленными PAR и DAR - проблематично, тем более что не все флеш-плееры такие умные, в большинстве случаев воспринимают это как 4:3 и в итоге картинка растянута до квадрата вверх и вниз.

AlexeyVitebsk
() автор топика
Ответ на: комментарий от AlexeyVitebsk

Просто оригинальное разрешение вашего видео 720x576. А в контейнере указано соотношение сторон 16:9 поэтому умные плееры его растягивают по горизонтали в соответствии с этой информацией, а тупые, не читают эту инфу из контейнера и просто выводят видео как оно на самом деле есть - сплющенным. Если вам так важно чтобы видео правильно выводилось во всех плеерах, просто пережмите видео в разрешение 1024x576. Если вы уберёте информацию о соотношении сторон из контейнера, то видео у вас будет сплющенным во всех плеерах (кроме, разве что, тех кто умеет гадать на кофейной гуще и размере пикселей).

Nebuchadnezzar ★★★★
()
Ответ на: комментарий от Nebuchadnezzar

ок! тогда каким образом видео можно переконвертировать с pixel aspect ratio 1:1 ? с помощью ffmpeg

AlexeyVitebsk
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.