Вопрос или проблема
Сначала я сгенерировал файл ASS:
ffmpeg -i foo.srt bar.ass
Который затем создал это:
[Script Info]
; Сценарий сгенерирован FFmpeg/Lavc60.31.102
ScriptType: v4.00+
PlayResX: 384
PlayResY: 288
ScaledBorderAndShadow: yes
YCbCr Matrix: None
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arabic Poetry,16,&Hffffff,&Hffffff,&H0,&H0,0,0,0,0,100,100,0,0,1,1,0,2,10,10,10,1
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.00,0:00:05.00,Default,,0,0,0,,هذا نص تجريبي باللغة العربية لاستخدامه في العروض.
Сжигал его, используя:
ffmpeg -i input.mp4 -vf subtitles=bar.ass output.mp4
Но текст выглядит так [] [] [] [] []
с арабскими словами. Почему?
Примечание: “Arabic Poetry” явно является шрифтом для арабских текстов, так что это определенно не причина.
Использование фильтра ass вместо субтитров заставило это работать как по волшебству:
ffmpeg -i input.mp4 -vf ass=bar.ass output.mp4
Ответ или решение
Проблема отображения арабских слов в виде квадратных блоков («[] [] []») при использовании FFmpeg для встраивания субтитров, скорее всего, связана с несколькими факторами, касающимися кодировок шрифта и метода обработки субтитров. Давайте подробно рассмотрим, что именно происходит и как можно это исправить.
1. Контекст проблемы
Ваша команда для преобразования .srt
файла в .ass
:
ffmpeg -i foo.srt bar.ass
гарантировала создание файла, содержащего информацию о субтитрах, включая стиль и текст. Однако при сжигании субтитров в видео с помощью:
ffmpeg -i input.mp4 -vf subtitles=bar.ass output.mp4
текст оказался отображён как квадратные блоки. Это указывает на то, что шрифт, используемый для отображения арабских символов, может быть недоступен или неправильно настроен.
2. Шрифты и кодировки
Хотя вы указали, что «Arabic Poetry» — это шрифт, предназначенный для арабского текста, важно учитывать следующее:
-
Убедитесь, что шрифт установлен: FFmpeg при обработке видео требует наличия адресуемых шрифтов на системе. Если ваш шрифт не установлен или не доступен в глобальном пути, ваши субтитры будут отображаться некорректно.
-
Кодировка текста: Также следует убедиться, что ваш текст в
.ass
файле правильно закодирован. Арабский текст должен быть сохранён в правильной кодировке (обычно UTF-8), чтобы избежать распознавания символов как некорректных.
3. Решение проблемы
Вы заметили, что использование фильтра ass
вместо subtitles
устраняет проблему:
ffmpeg -i input.mp4 -vf ass=bar.ass output.mp4
Этот метод более эффективен, поскольку:
- Прямое обращение к ASS позволяет FFmpeg узнать о стиле и шрифте непосредственно из файла
.ass
, тем самым применяя все заданные вами настройки, включая правильную кодировку и используемые шрифты.
4. Рекомендации по исправлению
-
Убедитесь в доступности шрифта: Проверьте, установлен ли шрифт «Arabic Poetry» на вашей системе. Если нет, установите его или замените на другой совместимый шрифт для арабских символов.
-
Используйте правильные команды: Для работы с арабскими текстами рекомендуется всегда использовать команду
-vf ass=
, так как она гарантирует корректное применение всех стилей и свойств, описанных в файле. -
Проверка кодировки: Убедитесь, что ваш
.srt
и.ass
файлы сохранены в кодировке UTF-8. Это можно сделать с помощью текстового редактора или утилиты командной строки.
5. Заключение
Отображение арабских символов в виде квадратов является следствием неправильной обработки шрифта или кодировки текста. Следуя вышеприведённым рекомендациям и используя команду с фильтром ass
, вы сможете добиться желаемого результата с корректным отображением арабских субтитров. Если вы сталкиваетесь с подобными проблемами, обязательно проверяйте шрифты и их доступность на вашей системе.