Я получаю неправильное соотношение сторон для изображений и видео, конвертированных с помощью ffmpeg

1326
tomsv

Я пытаюсь преобразовать некоторые старые файлы фильмов в изображения (а затем перекодировать в h.264). Проблема в том, что полученные изображения растягиваются вертикально.

Вот команда ffmpeg:

ffmpeg -i preview.mpg -filter_complex "[0:v]fps=fps=1[onepersec]; [onepersec]scale=min(200\, iw):-2[rescaled]" -map "[rescaled]" -f image2 image%4d.jpg 

У меня есть предположение: scaleфильтр, который я использую, игнорирует соотношение сторон экрана DARи просто масштабирует значения пикселей. Я хочу, чтобы ширина изображений составляла не более 200 пикселей, а высота могла быть любой, какой она должна быть, до тех пор, пока она выглядит правильно, то есть не растянутой.

Как мне преобразовать файл фильма, чтобы получить изображения (и перекодированное видео), которые не выглядят растянутыми?

Дополнительная информация о видеофайле:

В VLC он воспроизводится, выглядит нормально. Это выглядит как нормальное соотношение сторон 4: 3. VLC отображает следующее в Current media information> Codec:

Stream 0 Type: Video Codec: MPEG-1/2 Video (mpgv) Resolution: 352x576 Frame rate: 25 Decoded format: Planar 4:2:0 YUV 

Вот результат выполнения вышеуказанной ffmpegкоманды:

ffmpeg version git-2014-07-24-f753956 Copyright (c) 2000-2014 the FFmpeg developers built on Jul 24 2014 13:39:56 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-4) configuration: --prefix=/home/somename/ffmpeg_build --extra-cflags=-I/home/somename/ffmpeg_build/include --extra-ldflags=-L/home/somename/ffmpeg_build/lib --bindir=/home/somename/bin --extra-libs=-ldl --enable-gpl --enable-nonfree --enable-libfdk_aac --enable-libmp3la me --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libfreetype --enable-libspeex --enable-libtheora libavutil 52. 92.101 / 52. 92.101 libavcodec 55. 69.100 / 55. 69.100 libavformat 55. 49.100 / 55. 49.100 libavdevice 55. 13.102 / 55. 13.102 libavfilter 4. 11.102 / 4. 11.102 libswscale 2. 6.100 / 2. 6.100 libswresample 0. 19.100 / 0. 19.100 libpostproc 52. 3.100 / 52. 3.100 Input #0, mpeg, from 'preview.mpg': Duration: 00:14:23.59, start: 1.646067, bitrate: 2244 kb/s Stream #0:0[0x1bf]: Data: dvd_nav_packet Stream #0:1[0x1e0]: Video: mpeg2video (Main), yuv420p(tv), 352x576 [SAR 24:11 DAR 4:3], max. 2500 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc Stream #0:2[0x80]: Audio: ac3, 48000 Hz, stereo, fltp, 256 kb/s [swscaler @ 0x3f6fae0] deprecated pixel format used, make sure you did set range correctly Output #0, image2, to 'image%4d.jpg': Metadata: encoder : Lavf55.49.100 Stream #0:0: Video: mjpeg, yuvj420p, 200x328 [SAR 164:75 DAR 4:3], q=2-31, 200 kb/s, 1 fps, 1 tbn, 1 tbc Metadata: encoder : Lavc55.69.100 mjpeg Stream mapping: Stream #0:1 (mpeg2video) -> fps scale -> Stream #0:0 (mjpeg) Press [q] to stop, [?] for help frame= 41 fps=0.0 q=1.6 size=N/A time=00:00:41.00 bitrate=N/A ^Mframe= 80 fps= 79 q=1.6 size=N/A time=00:01:20.00 bitrate=N/A ^Mframe= 125 fps= 71 q=1.6 size=N/A time=00:02:05.00 bitrate=N/A ^Mframe= 156 fps= 69 q=1.6 size=N/A time=00:02:36.00 bitrate=N/A ^Mframe= 203 fps= 74 q=1.6 size=N/A time=00:03:23.00 bitrate=N/A ^Mframe= 248 fps= 76 q=1.6 size=N/A time=00:04:08.00 bitrate=N/A ^Mframe= 295 fps= 79 q=1.6 size=N/A time=00:04:55.00 bitrate=N/A ^Mframe= 336 fps= 79 q=1.6 size=N/A time=00:05:36.00 bitrate=N/A ^Mframe= 377 fps= 79 q=1.6 size=N/A time=00:06:17.00 bitrate=N/A ^Mframe= 424 fps= 81 q=1.6 size=N/A time=00:07:04.00 bitrate=N/A ^Mframe= 465 fps= 81 q=1.6 size=N/A time=00:07:45.00 bitrate=N/A ^Mframe= 508 fps= 81 q=1.6 size=N/A time=00:08:28.00 bitrate=N/A ^Mframe= 547 fps= 79 q=1.6 size=N/A time=00:09:07.00 bitrate=N/A ^Mframe= 580 fps= 78 q=1.6 size=N/A time=00:09:40.00 bitrate=N/A ^Mframe= 621 fps= 79 q=1.6 size=N/A time=00:10:21.00 bitrate=N/A ^Mframe= 665 fps= 79 q=1.6 size=N/A time=00:11:05.00 bitrate=N/A ^Mframe= 709 fps= 80 q=1.6 size=N/A time=00:11:49.00 bitrate=N/A ^Mframe= 746 fps= 79 q=1.6 size=N/A time=00:12:26.00 bitrate=N/A ^Mframe= 794 fps= 80 q=1.6 size=N/A time=00:13:14.00 bitrate=N/A ^Mframe= 833 fps= 80 q=1.6 size=N/A time=00:13:53.00 bitrate=N/A ^Mframe= 865 fps= 81 q=1.6 Lsize=N/A time=00:14:25.00 bitrate=N/A video:11118kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown 

Может быть, мне нужно что-то сделать с используемым устаревшим форматом пикселей [swscaler @ 0x3f6fae0], убедитесь, что вы правильно установили диапазон ?

Вот вывод из mediainfo:

$ mediainfo preview.mpg General Complete name : /[...]/preview.mpg Format : MPEG-PS File size : 231 MiB Duration : 14mn 23s Overall bit rate mode : Variable Overall bit rate : 2 244 Kbps  Video ID : 224 (0xE0) Format : MPEG Video Format version : Version 2 Format profile : Main@Main Format settings, BVOP : Yes Format settings, Matrix : Custom Format settings, GOP : M=2, N=12 Duration : 14mn 23s Bit rate mode : Variable Bit rate : 1 943 Kbps Maximum bit rate : 2 500 Kbps Width : 352 pixels Height : 576 pixels Display aspect ratio : 4:3 Frame rate : 25.000 fps Standard : PAL Color space : YUV Chroma subsampling : 4:2:0 Bit depth : 8 bits Scan type : Interlaced Scan order : Top Field First Compression mode : Lossy Bits/(Pixel*Frame) : 0.383 Time code of first frame : 00:00:00:12 Time code source : Group of pictures header Stream size : 200 MiB (87%)  Audio ID : 189 (0xBD)-128 (0x80) Format : AC-3 Format/Info : Audio Coding 3 Mode extension : CM (complete main) Format settings, Endianness : Big Muxing mode : DVD-Video Duration : 14mn 23s Bit rate mode : Constant Bit rate : 256 Kbps Channel(s) : 2 channels Channel positions : Front: L R Sampling rate : 48.0 KHz Bit depth : 16 bits Compression mode : Lossy Delay relative to video : -31ms Stream size : 26.3 MiB (11%)  Menu 

Вот вывод из ffprobe:

$ ffprobe preview.mpg ffprobe version git-2014-07-24-f753956 Copyright (c) 2007-2014 the FFmpeg developers built on Jul 24 2014 13:39:56 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-4) configuration: --prefix=/home/sadmin/ffmpeg_build --extra-cflags=-I/home/somename/ffmpeg_build/include --extra-ldflags=-L/home/somename/ffmpeg_build/lib --bindir=/home/somename/bin --extra-libs=-ldl --enable-gpl --enable-nonfree --enable-libfdk_aac --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libfreetype --enable-libspeex --enable-libtheora libavutil 52. 92.101 / 52. 92.101 libavcodec 55. 69.100 / 55. 69.100 libavformat 55. 49.100 / 55. 49.100 libavdevice 55. 13.102 / 55. 13.102 libavfilter 4. 11.102 / 4. 11.102 libswscale 2. 6.100 / 2. 6.100 libswresample 0. 19.100 / 0. 19.100 libpostproc 52. 3.100 / 52. 3.100 Input #0, mpeg, from 'preview.mpg': Duration: 00:14:23.59, start: 1.646067, bitrate: 2244 kb/s Stream #0:0[0x1bf]: Data: dvd_nav_packet Stream #0:1[0x1e0]: Video: mpeg2video (Main), yuv420p(tv), 352x576 [SAR 24:11 DAR 4:3], max. 2500 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc Stream #0:2[0x80]: Audio: ac3, 48000 Hz, stereo, fltp, 256 kb/s Unsupported codec with id 1145979222 for input stream 0 $ 

Здесь выделяется текст « Неподдерживаемый кодек с идентификатором 1145979222 для входного потока 0» . Я думаю, это о Stream #0.0(?), Что мне не нужно.

Вот что я получаю за одно из изображений:

$ ffprobe image0001.jpg ffprobe version git-2014-07-24-f753956 Copyright (c) 2007-2014 the FFmpeg developers built on Jul 24 2014 13:39:56 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-4) configuration: --prefix=/home/somename/ffmpeg_build --extra-cflags=-I/home/somename/ffmpeg_build/include --extra-ldflags=-L/home/somename/ffmpeg_build/lib --bindir=/home/somename/bin --extra-libs=-ldl --enable-gpl --enable-nonfree --enable-libfdk_aac --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libfreetype --enable-libspeex --enable-libtheora libavutil 52. 92.101 / 52. 92.101 libavcodec 55. 69.100 / 55. 69.100 libavformat 55. 49.100 / 55. 49.100 libavdevice 55. 13.102 / 55. 13.102 libavfilter 4. 11.102 / 4. 11.102 libswscale 2. 6.100 / 2. 6.100 libswresample 0. 19.100 / 0. 19.100 libpostproc 52. 3.100 / 52. 3.100 [mjpeg @ 0x24c7e40] ignoring invalid SAR: 164/75 Input #0, image2, from 'mov0001.jpg': Duration: 00:00:00.04, start: 0.000000, bitrate: N/A Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg), 200x328, 25 tbr, 25 tbn, 25 tbc 

Интересно, что [mjpeg @ 0x24c7e40] игнорирует неверный SAR: 164/75, но что это значит?

1

0 ответов на вопрос

Похожие вопросы