1

Я пытаюсь преобразовать некоторые старые файлы фильмов в изображения (а затем перекодировать в 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, но что это значит?

0