Я создал программу, которая автоматически запускает строку кода ffmpeg, и она работает со всеми функциями, кроме одной: если я пытаюсь нарисовать наложение некоторых субтитров, возникает проблема с абсолютным путем, если я использую тот же код в оболочке, открытой на рабочем столе это работает, но если я напишу абсолютный путь, это не сработает.

ffmpeg -i input.mp4 -filter_complex "subtitles=subs.srt:force_style='OutlineColour=&H80000000,BorderStyle=4,Outline=1,Shadow=0,MarginV=20,Fontsize=10,PrimaryColour=&H0000ff&'" output.mp4

если я изменю ffmpeg, input.mp4, subs.srt, output.mp4 своим собственным абсолютным путем ("c:\users\home\desktop\input.mp4"), это не сработает!

Я пробовал также:

  • "C:\ Users \ главная \ рабочий стол \ input.mp4"
  • "C:/users/home/desktop/input.mp4"
  • 'C:\ Users \ главная \ рабочий стол \ input.mp4'
  • 'С:/users/home/desktop/input.mp4'

Ошибка:

    [subtitles @ 0000000002ab79c0] Unable to parse option value "UsersFamigliaDesktop569.srt" as image size
    Last message repeated 1 times
[subtitles @ 0000000002ab79c0] Error setting option original_size to value UsersFamigliaDesktop569.srt.
[Parsed_subtitles_0 @ 0000000002ab78e0] Error applying options to the filter.
[AVFilterGraph @ 0000000002edcd20] Error initializing filter 'subtitles' with args 'C:UsersFamigliaDesktop569.srt:force_style=OutlineColour=&H80000000,BorderStyle=4,Outline=1,Shadow=0,MarginV=20,Fontsize=15,PrimaryColour=&H000000&'
Error reinitializing filters!
Failed to inject frame into filter network: Invalid argument
Error while processing the decoded data for stream #0:0

Что я могу сделать?

strategaD

(Я не очень хорошо говорю по-английски, извините)

1 ответ1

1

Согласно этому отчету об ошибке, ошибка, которую вы видите, связана с фильтром субтитров.

В Windows, чтобы фильтр субтитров работал с абсолютными путями:

«каждый специальный символ должен быть экранирован [...], а затем каждый экранированный символ должен быть экранирован».

Это означает, что вам нужно \\ перед двоеточием : (т.е. \\::) и \\\\ вместо одиночных обратных косых черт \ например:

subtitles=C\\:\\\\users\\\\\\\\home\\\\desktop\\\\subs.srt

Во избежание проблем в пути к субтитрам также не должно быть пробелов (кавычки не имеют значения для путей без пробелов и поэтому не нужны).

Если вы пропустите одну косую черту (например, \: vs. \\: или \\ , \\\ против \\\\) или добавите пробелы в путь, у вас останутся проблемы.

Обратите внимание, что это решение предназначено только для фильтра субтитров - вы можете указать пути для ваших входных и выходных файлов, как правило (например, c:\users\home\desktop\input.mp4).

Также не то, что вам нужны только кавычки, если путь содержит пробелы, например

c:\users\home\desktop\input.mp4   # no space in path

против

"c:\users\home\desk top\input.mp4"   # space in path ("desk top")

Наконец, использование вашей исходной команды и c:\users\home\desktop\ в качестве абсолютного пути даст:

ffmpeg -i c:\users\home\desktop\input.mp4 -filter_complex "subtitles=c\\:\\\\users\\\\home\\\\desktop\\\\subs.srt:force_style='OutlineColour=&H80000000,BorderStyle=4,Outline=1,Shadow=0,MarginV=20,Fontsize=10,PrimaryColour=&H0000ff&'" c:\users\home\desktop\output.mp4

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .