Мы пытаемся преобразовать видео .mxf в .mpeg на ffmpeg-0.9.2 и похоже, что версия 0.9.2 не поддерживает преобразование .mxf в .mpeg.

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

Ниже приведена ошибка при преобразовании команды:

[root@localhost ~]# ffmpeg -i test.mxf  -ac 2 output.mpg                                                                                     ffmpeg version 0.9.2-syslint, Copyright (c) 2000-2012 the FFmpeg developers
  built on Mar  1 2013 22:34:33 with gcc 4.6.3
  configuration: --prefix=/usr/local/cpffmpeg --enable-shared --enable-nonfree --enable-gpl --enable-pthreads --enable-libopencore-amrnb --enable-decoder=liba52 --enable-libopencore-amrwb --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --extra-cflags=-I/usr/local/cpffmpeg/include/ --extra-ldflags=-L/usr/local/cpffmpeg/lib --enable-version3 --extra-version=syslint
  libavutil    51. 32. 0 / 51. 54.100
  libavcodec   53. 42. 4 / 53. 42. 4
  libavformat  53. 24. 2 / 53. 24. 2
  libavdevice  53.  4. 0 / 53.  4. 0
  libavfilter   2. 53. 0 /  2. 77.100
  libswscale    2.  1. 0 /  2.  1.100
  libpostproc  51.  2. 0 / 51.  2. 0
Input #0, mxf, from `test.mxf`:
  Duration: 00:00:07.04, start: 0.000000, bitrate: 62580 kb/s
    Stream #0:0: Video: mpeg2video (4:2:2), yuv422p, 720x608 [SAR 608:405 DAR 16:9], 50000 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc
    Stream #0:1: Audio: pcm_s16le, 48000 Hz, 8 channels, s16, 6144 kb/s
File `output.mpg` already exists. Overwrite ? [y/N] y
Incompatible pixel format `yuv422p` for codec `mpeg1video`, auto-selecting format `yuv420p`
[buffer @ 0x8476e0] w:720 h:608 pixfmt:yuv422p tb:1/1000000 sar:608/405 sws_param:
[buffersink @ 0x847b80] auto-inserting filter `auto-inserted scaler 0` between the filter `src` and the filter `out`
[scale @ 0x848220] w:720 h:608 fmt:yuv422p sar:608/405 -> w:720 h:608 fmt:yuv420p sar:608/405 flags:0x4
[mpeg @ 0x84a7a0] VBV buffer size not set, muxing may fail
Output #0, mpeg, to `output.mpg`:
  Metadata:
    encoder         : Lavf53.24.2
    Stream #0:0: Video: mpeg1video, yuv420p, 720x608 [SAR 608:405 DAR 16:9], q=2-31, 200 kb/s, 90k tbn, 25 tbc
    Stream #0:1: Audio: mp2, 48000 Hz, 2 channels, s16, 128 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (mpeg2video -> mpeg1video)
  Stream #0:1 -> #0:1 (pcm_s16le -> mp2)
Press [q] to stop, [?] for help
[buffer @ 0x8476e0] Changing frame properties on the fly is not supported.
Failed to inject frame into filter network

1 ответ1

4

Вы уверены, что хотите видео MPEG-1? Ваша команда перекодирует видео в стандарт, выпущенный в 1993 году. Я не удивлюсь, если качество не так хорошо, как вы ожидаете.

Ваш исходный файл содержит видео в формате MPEG-2 и аудио в формате PCM, поэтому в идеале вместо этого просто объедините его в контейнер MPEG-2:

ffmpeg -i in.mxf -c copy out.mpg

Это не перекодирует аудио и видео, так что вы не потеряете качество в процессе.

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

Это перекодировало бы видео в MPEG-2 с переменным качеством 2 (нормальные значения 2–5, диапазон от 1–31 и меньшее значение, что лучше):

ffmpeg -i in.mxf -c:v mpeg2video -qscale:v 2 -c:a mp2 -b:a 128k out.mpg

Конечно, вы также можете использовать кодирование с постоянным битрейтом:

ffmpeg -i in.mxf -c:v mpeg2video -b:v 2M -c:a mp2 -b:a 128k out.mpg

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .