Вопрос или проблема
Я использовал эту команду на протяжении нескольких лет, чтобы создавать .ogg файлы (или любой другой формат) из серии .svg файлов на Linux:
ffmpeg -y -r 1.2 -i %06d.svg -qscale:v 10 path.ogg
Это работало безупречно до сих пор, когда оно выдает видео с разрешением 100×100, а не 1920×1080, как у входных файлов.
Если я принудительно задаю разрешение по выходу 1920×1080 с помощью опции -s
, то полученное видео является увеличенной версией видео 100×100, которое я получаю без опции -s
. Если я конвертирую svg файлы в png с помощью inkscape
, все работает нормально, но я хотел бы избежать усложнения моего рабочего процесса.
Здесь вы можете найти некоторые из .svg файлов.
Есть идеи?
Ответ или решение
Вопрос о том, почему FFmpeg игнорирует разрешение входных SVG файлов и производит видео с размером 100×100 пикселей, имеет несколько причин. Рассмотрим основные проблемы, с которыми вы можете столкнуться, и предложим возможные решения.
Проблема с разрешением SVG файлов
SVG (Scalable Vector Graphics) — это векторный формат, который не имеет фиксированного разрешения. Вместо этого он определяет графику в виде математических формул, что делает его отличным для масштабирования. Однако FFmpeg может некорректно интерпретировать эти файлы, выдавая стандартное разрешение 100×100 пикселей. Это происходит из-за того, что FFmpeg не всегда знает, как считывать атрибуты width
и height
в SVG.
Возможные причины проблемы
-
Недостаточная информация о размерах: SVG файлы могут не содержать явной информации о размере изображения в метках, таких как
width
иheight
, что затрудняет правильное масштабирование. -
Изменения в версии FFmpeg: Если ваш FFmpeg был обновлен, возможно, в новой версии были внесены изменения в обработку SVG.
-
Отсутствие необходимых библиотек: FFmpeg может зависеть от внешних библиотек для обработки SVG. Убедитесь, что они установлены, и обновите их при необходимости.
Возможные решения
-
Указать размеры явно: Вы можете попробовать добавить атрибуты
width
иheight
в ваши SVG файлы, если они отсутствуют. Например:<svg width="1920" height="1080" ...>
-
Использовать флаг
-s
: Вы уже упомянули использование флага-s
для задания разрешения, но при этом возникает проблема с увеличением изображения. Попробуйте использовать параметр-vf scale
для более точной настройки:ffmpeg -y -r 1.2 -i %06d.svg -vf "scale=1920:1080" -qscale:v 10 path.ogg
-
Конвертация в PNG: Хотя вы хотите избежать этого шага, конвертация SVG в PNG с использованием Inkscape действительно даёт лучшие результаты. Если проблемы сохраняются, это может стать временным решением.
-
Проверка документации FFmpeg: Убедитесь, что вы используете последнюю документацию FFmpeg, чтобы быть уверенными в правильности используемых вами параметров и опций.
Заключение
Проблема с разрешением видео, создаваемого из SVG файлов в FFmpeg, может быть связана с особенностями обработки векторной графики. Проанализируйте свои SVG файлы на наличие атрибутов размеров и попробуйте различные подходы, чтобы правильно передать нужное разрешение. Если вы хотите минимизировать сложность рабочего процесса, попробуйте использовать фильтры, такие как scale
, для точной настройки вывода.