Доброго времени суток.
Уже не первый день разбираюсь с проблемой кодирования видео с помощью 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-ом?