Низкое качество преобразования с использованием ffmpeg

Мне нужно преобразовать FLV-видео в mp4-видео, поэтому я использовал эту команду:

ffmpeg -i input.flv -c -vcodec libx264 -acodec copy output.mp4

Но выходное видео имеет немного худшее качество видео, как я могу это исправить?

Информация MP4 (выход):

  • видео: битрейт 472кб/с, 680*480, 24 FPS
  • аудио: битрейт 112 кбит/с, 44,1 кГц, аудио в формате mpeg, стерео

Информация FLV (ввод):

  • видео: битрейт 1500кб/с, 680*480, 24 FPS
  • аудио: битрейт 112 кбит/с, 44,1 кГц, аудио в формате mpeg, стерео

ОБНОВИТЬ:

Я попробовал с -crf 18и вот результат (цвета на выходе более яркие и посмотрите на эту желтую линию на крышке, на выходном изображении эта желтая линия содержит что-то вроде шума).

Вход:

ВХОД

Вывод:

ВЫВОД

Добавить -crf 20..
@Gyan, почему 20? 23 по умолчанию, верно? И 0 без потерь, так почему нет 0?
0вывод не совместим с большинством игроков. Низкий CRF предлагает убывающую отдачу. 18считается визуально без потерь, но вам не нужно сначала пробовать это.
@Gyan Что не так с этой командой ffmpeg -i input.flv -crf 20 -c -vcodec libx264 -acodec copy -copyts output.mp4? Я получаю сообщение об ошибке: Не удалось найти подходящий формат вывода для «libx264».
Удалить -c. Если у вас нет особых потребностей, удалите их -copyts.
@Gyan -c - это кодек, верно? А зачем удалять копии? Это просто копирование временной метки, для чего это нужно?
Вы не установили значение -cи уже указали vcodec и acodec, поэтому они не требуются. копии могут привести к проблемам с мультиплексированием в зависимости от выходной вертикальной синхронизации.
@Gyan, спасибо, под проблемами мультиплексирования вы имеете в виду, что видео и аудио могут не синхронизироваться? Посмотрите на обновленный вопрос.
Не синхронизация напрямую, а точность временных меток и решения об удалении / дублировании, если исходная временная база и выходная временная база имеют сильно различающиеся разрешения.
Что касается цвета, похоже, что источник имеет полный диапазон, а выход помечен или обрабатывается как ограниченный диапазон.

Ответы (2)

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

Я предполагаю, что исходным материалом является либо H.264, либо MPEG-2, поэтому лучшим решением в вашем случае будет просто скопировать все потоки в новый контейнер:

ffmpeg -i input.flv -c copy output.mp4

Вот команда для использования режима x264 без потерь, если вам по какой-либо причине необходимо перекодировать:

ffmpeg -i input.flv -c:a copy -c:v libx264 -crf 0 output.mp4

Пожалуйста выше ваш -minrate, -maxrate, -bufsizeи изучите кодек. Загрузите контейнер Better для видеокодека и аудиокодека отдельно. закодируйте кодек в этих контейнерах, но выполните следующие действия:

1. Загрузите аудио и видео отдельно. вы можете сделать это, добавив -vn и -an в выходную командную строку. -vn означает «нет видео», а -an означает «нет звука». После этого изучите кодек видео или аудио и закодируйте его в его лучший контейнер. Вот лучшие контейнеры для современных кодеков.

"Audio/Video codec"

*AAC/H264 is better on (TS)
*OPUS is better on (MKV)
*VP9 is better on (AVI)

2. После загрузки видео/аудио по отдельности, вам, конечно, нужно объединить их вместе. Пожалуйста, укажите указанные параметры -minrate, -maxrate и -bufsize. Не забудьте изучить свои кодеки и объединить их вместе с этими контейнерами:

"Merging"

*Mixing VP9 and OPUS is better on (MKV)
*Mixing H264 and AAC is better on (MOV)
*otherwise most incompatible codec is better on (MKV)