Конвертировать AVI (Xvid) в MP4 (H.264) с сохранением качества

Конвертировать AVI (Xvid) в MP4 (H.264) с сохранением качества

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

Оригинальное видео:

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

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

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

Тест 1

Команда FFmpeg:

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

Тест 1. Экран:

Вывод консоли 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 '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

Тест 2

Команда FFmpeg:

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

Тест 2. Экран:

Вывод консоли FFmpeg ( ffmpeg -i 2.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

решение1

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

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

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

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

    Вам придется установить более низкий CRF из-запотеря поколения. Вы кодируете то, что уже было закодировано, поэтому вы снова отбрасываете визуальную информацию. Это никогда не бывает хорошо, но если вам придется, вам придется установить более высокое качество, чтобы не удалить слишком много информации из входного видео.

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

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

    У x264 есть режим постоянного битрейта, но он считается хуже других методов кодирования. На самом деле, двухпроходное кодирование не предназначено для достижения оптимального качества, так что зачеркните это.

Учитывая все вышесказанное, попробуйте сделать что-нибудь из следующего:

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предустановку, которая обеспечит лучшее сжатие, но кодирование, очевидно, займет больше времени.

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

Связанный контент