Вопрос или проблема
Команда –
ffmpeg -loop 1 -t 14.99 -i /app/public/image/news-image-1.jpg -loop 1 -t 14.99 -i /app/public/image/news-image-2.jpg -loop 1 -t 14.99 -i /app/public/image/news-image-3.jpg -loop 1 -t 14.99 -i /app/public/image/news-image-4.jpg -loop 1 -t 14.99 -i /app/public/image/news-image-5.jpg -loop 1 -t 14.99 -i /app/public/image/news-image-6.jpg -loop 1 -t 14.99 -i /app/public/image/news-image-7.jpg -i /app/public/audio/merged-audio.mp3 -y -filter_complex [0:v]scale=720:1080,setsar=1,fade=t=out:st=14.489714285714285:d=0.5[v0];[1:v]scale=720:1080,setsar=1,fade=t=out:st=14.489714285714285:d=0.5[v1];[2:v]scale=720:1080,setsar=1,fade=t=out:st=14.489714285714285:d=0.5[v2];[3:v]scale=720:1080,setsar=1,fade=t=out:st=14.489714285714285:d=0.5[v3];[4:v]scale=720:1080,setsar=1,fade=t=out:st=14.489714285714285:d=0.5[v4];[5:v]scale=720:1080,setsar=1,fade=t=out:st=14.489714285714285:d=0.5[v5];[6:v]scale=720:1080,setsar=1,fade=t=out:st=14.489714285714285:d=0.5[v6];[v0][v1][v2][v3][v4][v5][v6]concat=n=7:v=1:a=0[vout];[vout]drawtext=text="Apple pulls data protection tool after UK governme..":font=arial:fontcolor=white:fontsize=25:x=(w-text_w)/2:y=200:enable="between(t,0.00,104.93)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="Apple is taking the unprecedented step of":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,0.00,4.56)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="removing its highest level data security tool":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,4.56,9.12)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="from customers in the UK, after the government":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,9.12,13.69)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="demanded access to user data. Advanced Data":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,13.69,18.25)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="Protection ADP means only account holders can":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,18.25,22.81)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="view items such as photos or documents they":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,22.81,27.37)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="have stored online through a process known as":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,27.37,31.93)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="endtoend encryption. But earlier this month":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,31.93,36.50)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="the UK government asked for the right to see":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,36.50,41.06)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="the data, which currently not even Apple can":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,41.06,45.62)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="access. Apple did not comment at the time but":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,45.62,50.18)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="has consistently opposed creating a backdoor":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,50.18,54.75)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="in its encryption service, arguing that if it":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,54.75,59.31)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="did so, it would only be a matter of time":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,59.31,63.87)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="before bad actors also found a way in. Now the":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,63.87,68.43)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="tech giant has decided it will no longer be":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,68.43,72.99)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="possible to activate ADP in the UK. It means":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,72.99,77.56)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="eventually not all UK customer data stored on":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,77.56,82.12)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="iCloud Apples cloud storage service will be":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,82.12,86.68)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="fully encrypted. In a statement the Home":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,86.68,91.24)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="Office said We do not comment on operational":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,91.24,95.80)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="matters, including for example confirming or":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,95.80,100.37)":box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text="denying the e":font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable="between(t,100.37,104.93)":box=1:[email protected]:boxborderw=10[vout] -map [vout] -map 7:a -c:v libx264 -b:v 300K -preset fast -pix_fmt yuv420p -c:a aac -b:a 96K -shortest /app/public/video/news-video.mp4
Я пробовал поставить ” перед сложным фильтром, а также одинарную кавычку вместе с экранированием для других ‘, но ничего из этого не работает, так что я не уверен, что здесь не так.
Примечание: Это работает на моей локальной машине, но когда я пытаюсь запустить это на виртуальной машине, это не работает.
Я получаю следующую ошибку:
ffmpeg вышел с кодом 8: Не удалось установить значение ‘[0:v]scale=720:1080,setsar=1,fade=t=out:st=14.489714285714285:d=0.5[v0];[1:v]scale=720:1080,setsar=1,fade=t=out:st=14.489714285714285:d=0.5[v1];…………………..’:font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable=”between(t,95.80,100.37)”:box=1:[email protected]:boxborderw=10[vout];[vout]drawtext=text=”denying the e”:font=arial:fontcolor=yellow:fontsize=25:x=(w-text_w)/2:y=800:enable=”between(t,100.37,104.93)”:box=1:[email protected]:boxborderw=10[vout]’ для опции ‘filter_complex’: Фильтр не найден
Ошибка разбора глобальных опций: Фильтр не найден
.
Ответ или решение
Проблема, с которой вы столкнулись при применении сложного фильтра ffmpeg, работающего локально, но не работающего после развертывания, весьма распространена в мире разработки, особенно в тех случаях, когда программы или скрипты успешно выполняются в одной среде, но терпят неудачу в другой. Давайте рассмотрим эту проблему с точки зрения информации, предоставленной в вашем вопросе.
Теория:
Во-первых, необходимо понять, что ffmpeg – это мощный инструмент для обработки видео и аудио, который поддерживает огромное количество форматов и фильтров. В вашей команде используется filter_complex
, который позволяет объединять и применять к видео различные фильтры и манипуляции, такие как изменение размера, наборный отсчет соотношения сторон, применение анимации исчезания, добавление текста и многое другое. Если данный фильтр работает на вашей локальной машине, но не работает после развертывания, это может указывать на различия в конфигурации среды исполнения между вашим локальным компьютером и VM (виртуальной машиной).
Пример:
В сообщении об ошибке, которое вы привели, говорится, что фильтр не был найден: "Failed to set value ‘[0:v]scale=720:1080,setsar=1,fade…’ for option ‘filter_complex’: Filter not found". Это указывает на то, что на вашей VM отсутствуют некоторые компоненты или модули, необходимые для выполнения этой команды. Возможные причины включают:
-
Различия в версиях ffmpeg: Версии ffmpeg могут иметь разные наборы поддерживаемых фильтров. Возможно, версия ffmpeg, установленная на вашей VM, устарела или собрана без поддержки некоторых фильтров.
-
Отсутствие поддержки шрифтов: Текстовые фильтры, такие как
drawtext
, требуют правильной установки и наличия шрифтов. На вашей локальной системе могут быть установлены все необходимые шрифты, которые отсутствуют на VM. -
Конфигурации окружения: Путь к файлам и доступные ресурсы могут отличаться между локальной машиной и VM. Например, директория
/app/public/image/
должна существовать и быть доступной на VM так же, как и на локальной машине.
Применение (решения):
Теперь, когда мы имеем теоретическую основу и некоторые примеры того, что может быть причиной проблемы, давайте рассмотрим возможные шаги для исправления ситуации:
-
Обновите ffmpeg на VM: Убедитесь, что на вашей VM установлена последняя версия ffmpeg. Вы можете это сделать, обновив репозитории вашего дистрибутива и установив последнюю версию через пакетный менеджер (например,
sudo apt update && sudo apt install ffmpeg
для Ubuntu). -
Убедитесь в наличии всех зависимостей: Проверьте, установлены ли на VM все шрифты, необходимые для работы
drawtext
. Попробуйте установить пакет шрифтов, например,sudo apt-get install ttf-mscorefonts-installer
и перепроверьте наличие Arial. Также стоит проверить, установлены ли все другие библиотеки, которые могут быть необходимы ffmpeg. -
Проверка командной строки для специальных символов и пробелов: Убедитесь, что вся команда корректна и не содержит ненужных пробелов или специальных символов, особенно в фильтрах. Попробуйте увеличить читаемость команды, разбив её на несколько строк для лучшего понимания.
-
Логи и отладка: Используйте логи ffmpeg, чтобы получить больше информации о возникающих ошибках. Для этого, выполните команду с увеличенным уровнем логирования, например, добавьте флаг
-loglevel debug
перед вашей командой ffmpeg, чтобы получить больше информации о процессе выполнения и возможных ошибках. -
Путь к ресурсам: Проверьте, что пути к изображениям и аудиофайлам корректны. Убедитесь в доступности всех файлов на VM, используя команды вроде
ls
илиfile
.
Таким образом, следуя вышеуказанным шагам, вы сможете выявить точную причину проблемы и найти решение для корректной работы сложного фильтра ffmpeg в развернутой на VM среде. Это потребует немного времени на диагностику и устранение неполадок, но позволит избежать подобных проблем в будущем и обеспечит стабильно работающий код в любой среде.