Вопрос или проблема
Я конвертирую h.265 в h.264, но качество на выходе не слишком хорошее, особенно если на экране много деталей, получается очень пикселизировано.
Моя команда приведена ниже. Что я могу добавить/убрать, чтобы сохранить оригинальное качество, но конвертировать в h.264? Также подскажите, пожалуйста, является ли моя команда слишком длинной и есть ли ненужные параметры, вызывающие проблему. Спасибо!
ffmpeg.exe -i “http://StreamUrl location” -hls_allow_cache 1 -map_metadata -1 -threads 2 -map 0:v:0 -map 0:a:0 -map -0:s -codec:v:0 libx264 -pix_fmt yuv420p -preset superfast -crf 20 -b:v 1200000 -maxrate 1200000 -bufsize 2698344 -profile:v high -level 41 -aspect 640:360 -s 1280×720 -sc_threshold 0 -codec:a:0 aac -strict experimental -ac 2 -ab 96000 -hls_time 6 -start_number 0 -hls_list_size 20 -hls_flags delete_segments -fps_mode auto -y C:\temp\temp.m3u8
Правка: Также я сейчас использую этот флаг в начале -err_detect ignore_err.
Есть ли способ заставить ffmpeg игнорировать ошибки ниже и просто продолжать попытки?
Ошибка ввода/вывода
Ошибка открытия входных файлов: Сервер вернул 403 Forbidden (доступ запрещен)
Ответ или решение
Для достижения максимально возможного качества при конвертации видео из формата H.265 в H.264 с помощью FFmpeg, важно правильно настроить параметры кодирования и минимизировать возможные потери качества. Ваш текущий набор параметров можно оптимизировать. Вот более оптимизированный пример команды, который поможет сохранить качество:
ffmpeg -err_detect ignore_err -i "http://StreamUrl location" -map_metadata -1 -threads 2 -map 0:v:0 -map 0:a:0 -map -0:s -c:v libx264 -pix_fmt yuv420p -preset slow -crf 18 -b:v 0 -profile:v high -level 4.1 -aspect 640:360 -s 1280x720 -codec:a aac -b:a 96000 -hls_time 6 -hls_list_size 20 -hls_flags delete_segments -y C:\temp\temp.m3u8
Объяснение параметров:
-
-err_detect ignore_err: Этот параметр заставляет FFmpeg игнорировать определенные ошибки при чтении/записи, включая ошибки доступа. Однако важно понимать, что игнорирование ошибок может привести к тому, что вы не получите ожидаемое качество выходного файла.
-
-preset slow: Параметры
-preset
изменяют скорость кодирования. Более медленный режим (например,slow
) может дать лучшее соотношение между качеством и размером файла. Вы можете попробоватьveryslow
, если время не имеет значения и важнее качество. -
-crf 18: Устанавливает уровень вариативной битовой скорости. Значение 18 обычно рассматривается как практически бесстрашный; чем ниже значение, тем выше качество (но и размер файла).
-
-b:v 0: Это означает, что FFmpeg будет использовать VBR (Variable Bit Rate) вместо CBR (Constant Bit Rate). Это может улучшить качество при наличии сложных сцена.
-
-profile:v high: Указывает на использование High Profile в H.264, что является лучшим выбором для большинства дисплеев и потоковых приложений.
-
-level 4.1: Указывает уровень H.264. Убедитесь, что уровень выбран правильно в зависимости от целевой платформы.
Дополнительные рекомендации:
- Убедитесь, что на выходе вы получаете нужное разрешение (
-s 1280x720
), и это соответствует вашим желаниям по качеству. - Если ваше исходное видео содержит аудиопотоки, вы можете настроить их параметры. Например,
-b:a 96000
для битрейта 96 кбит/с. Можно увеличить этот параметр для улучшения качества звука. - Оцените использование других кодеков для аудио, таких как
libmp3lame
, если вы хотите изменить качество.
Ошибка 403 Forbidden:
К сожалению, 403 ошибка указывает, что сервер отклоняет доступ к ресурсу. Это может быть связано с правами доступа, настройками авторизации или ограничениями сервера. Проверьте корректность URL и права доступа. Возможно, вам потребуется включить ключ API или другую аутентификацию, чтобы получить доступ к этому ресурсу.
Таким образом, эти рекомендации и изменения в вашей команде FFmpeg помогут вам достичь лучшего качества видео при конвертации H.265 в H.264.