2012-12-28 14:42:59 +0000 2012-12-28 14:42:59 +0000
48
48

Преобразование AVI (Xvid) в MP4 (H.264) с сохранением того же качества.

Я хочу сжать файл AVI в MP4 с помощью кодека h.264. Я не смог получить того же качества. Как я могу его сжать? 0x2 и 0x2 и ### Оригинальное видео:

Оригинальный видеоэкран:

FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
  built on Dec 28 2012 10:03:40 with gcc 4.4.6 20120305 (Red Hat 4.4.6-4)
  configuration: --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-x11grab --enable-libopencore-amrnb --enable-libopenc ore-amrwb --enable-libdc1394 --enable-libfaac --enable-libmp3lame --enable-libop enjpeg --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --enable-filter=drawtext
  libavutil 50.36. 0 / 50.36. 0
  libavcore 0.16. 1 / 0.16. 1
  libavcodec 52.108. 0 / 52.108. 0
  libavformat 52.93. 0 / 52.93. 0
  libavdevice 52. 2. 3 / 52. 2. 3
  libavfilter 1.74. 0 / 1.74. 0
  libswscale 0.12. 0 / 0.12. 0
[mpeg4 @ 0x626b50] Invalid and inefficient vfw-avi packed B frames detected
Input #0, avi, from 'input.avi':
  Metadata:
    encoder : VirtualDubMod 1.5.10.2 (build 2542/release)
  Duration: 01:32:38.13, start: 0.000000, bitrate: 2094 kb/s
    Stream #0.0: Video: mpeg4, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 23.98 tbr, 23.98 tbn, 23.98 tbc
    Stream #0.1: Audio: ac3, 44100 Hz, 5.1, s16, 384 kb/s
At least one output file must be specified

FFmpeg выход консоли (ffmpeg -i input.avi):

ffmpeg -i input.avi -vcodec libx264 -vpre lossless_slow -crf 25 -acodec libfaac -threads 0 -t 60 1.mp4

Испытание 1

FFmpeg команда:

FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
  built on Dec 28 2012 10:03:40 with gcc 4.4.6 20120305 (Red Hat 4.4.6-4)
  configuration: --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-x11grab --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libdc1394 --enable-libfaac --enable-libmp3lame --enable-libopenjpeg --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --enable-filter=drawtext
  libavutil 50.36. 0 / 50.36. 0
  libavcore 0.16. 1 / 0.16. 1
  libavcodec 52.108. 0 / 52.108. 0
  libavformat 52.93. 0 / 52.93. 0
  libavdevice 52. 2. 3 / 52. 2. 3
  libavfilter 1.74. 0 / 1.74. 0
  libswscale 0.12. 0 / 0.12. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4':
  Metadata:
    major_brand : isom
    minor_version : 512
    compatible_brands: isomiso2avc1mp41
    creation_time : 1970-01-01 00:00:00
    encoder : Lavf52.93.0
  Duration: 00:01:00.01, start: 0.000000, bitrate: 618 kb/s
    Stream #0.0(und): Video: h264, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 437 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc
    Metadata:
      creation_time : 1970-01-01 00:00:00
    Stream #0.1(und): Audio: aac, 44100 Hz, 5.1, s16, 176 kb/s
    Metadata:
      creation_time : 1970-01-01 00:00:00
At least one output file must be specified

Тест 1 Экран:

ffmpeg -y -i input.avi -pass 1 -vcodec libx264 -vpre slow -b 2000k -threads 0 -t 60 -f mp4 -an -y /dev/null
ffmpeg -y -i input.avi -pass 2 -vcodec libx264 -vpre slow -b 2000k -threads 0 -t 60 -acodec libfaac -ab 128k -ac 2 2.mp4

FFmpeg вывод консоли (ffmpeg -i 1.mp4)

FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
  built on Dec 28 2012 10:03:40 with gcc 4.4.6 20120305 (Red Hat 4.4.6-4)
  configuration: --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-x11grab --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libdc1394 --enable-libfaac --enable-libmp3lame --enable-libopenjpeg --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --enable-filter=drawtext
  libavutil 50.36. 0 / 50.36. 0
  libavcore 0.16. 1 / 0.16. 1
  libavcodec 52.108. 0 / 52.108. 0
  libavformat 52.93. 0 / 52.93. 0
  libavdevice 52. 2. 3 / 52. 2. 3
  libavfilter 1.74. 0 / 1.74. 0
  libswscale 0.12. 0 / 0.12. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2.mp4':
  Metadata:
    major_brand : isom
    minor_version : 512
    compatible_brands: isomiso2avc1mp41
    creation_time : 1970-01-01 00:00:00
    encoder : Lavf52.93.0
  Duration: 00:01:00.01, start: 0.000000, bitrate: 1097 kb/s
    Stream #0.0(und): Video: h264, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 1028 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc
    Metadata:
      creation_time : 1970-01-01 00:00:00
    Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 63 kb/s
    Metadata:
      creation_time : 1970-01-01 00:00:00
At least one output file must be specified

Тест 2

FFmpeg команда:

Экран 2-го теста:

FFmpeg вывод консоли (ffmpeg -i 2.mp4)

Ответы (1)

60
60
60
2012-12-28 14:53:52 +0000

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

Использование предустановок vpre (это способ установки значений по умолчанию для настроек ffmpeg, а не для настроек кодеров) на самом деле не является необходимым; обычно вы хотите использовать опции -preset, определенные кодировщиками.

Причины, по которым вы получаете низкое качество вывода, следующие, для двух ваших случаев соответственно:

  1. В первом случае вы используете crf 25, Constant Rate Factor , который даст вам худшее качество, чем то, что установлено по умолчанию для кодировщика x264 (т.е. 23). CRF контролирует качество. Попробуйте установить более низкий CRF, может быть 20, 18 и т.д. Здесь меньшее означает лучшее качество, но это увеличит размер файла. Смена 6 в CRF дает дважды/половину исходного среднего битрейта, грубо говоря.

  2. Во втором случае вы пытаетесь установить постоянную скорость передачи данных 2 Мбит/с. Ваше входное видео имеет примерно такую же скорость передачи. Теперь x264 обеспечивает намного лучшее визуальное качество, чем MPEG-4 визуальный кодер при той же скорости передачи данных, но из-за потерь при генерации, опять же, Вы можете захотеть использовать еще более высокий битрейт, чем исходный - в противном случае, в конечном итоге, Вы будете сжимать слишком много информации. 0x2 и 0x2 и все это, попробуйте что-нибудь следующее:

ffmpeg -i input.avi -c:v libx264 -crf 19 -preset slow -c:a libfdk_aac -b:a 192k -ac 2 out.mp4

Если libfdk_aac недоступен, используйте это:

ffmpeg -i input.avi -c:v libx264 -crf 19 -preset slow -c:a aac -b:a 192k -ac 2 out.mp4

Главной ручкой контроля качества будет ваша настройка CRF. Экспериментируйте с этим и используйте более низкое значение, если вам нужно лучшее качество.

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

Если вам не удается получить файл достойного качества с разумным размером, то вам не повезло. Лучше сохранить исходный файл как есть, без перекодирования. Нет никакого волшебного инструмента “сохранения того же качества”, когда вы сжимаете что-то, что уже сжато.