@wintreist

Почему происходит ошибка ffmpeg?

Добрый день, пожалуйста, очень нужна помощь.
Накладываю на видео водяной знак:
with (
    tempfile.TemporaryFile("wb", delete=False, suffix=".png") as watermark_file,
    tempfile.TemporaryFile("wb", delete=False, suffix=".webm") as video_file):
    watermark_file.write(buff.read())

В временной папке создаю файл в который записываю водяной знак из io.BytesIO и файл куда ffmpeg должен записать результат
(
    ffmpeg
    .input(str(path))
    .output(
        video_file.name,
        vf=f"movie='{watermark_file.name}' [watermark]; [in][watermark] overlay='{overlay}' [out]"
    )
    .global_args('-copyts')
    .run()
)

с помощью библиотеки ffmpeg-python работаю не на прямую с консолью.
Проблема в том, что при запуске .run() к консоль выводит следующее:
[Parsed_movie_0 @ 00000196cbe1fd40] Failed to avformat_open_input 'C'
[AVFilterGraph @ 00000196cd660c80] Error initializing filters
[vost#0:0/libvpx-vp9 @ 00000196cbe1f800] Error initializing a simple filtergraph
Error opening output file C:\Users\smeta\AppData\Local\Temp\tmp_a4zid9y.webm.
Error opening output files: No such file or directory

Но если я скопирую из temp файл с водяным знаком и закину в рабочую область:
vf=f"movie='{'test.png'}' [watermark]; [in][watermark] overlay='{overlay}' [out]"

то все работает как надо. Т.е. по видимому проблема с путем к водяному знаку, и я не понимаю что мне делать.
Прошу помощи
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
@wintreist Автор вопроса
Ответ: : является управляющим символом в фильтрах ffmpeg, поэтому вам нужно экранировать его в путях. Также используйте / вместо \\ в путях.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы