ffmpeg erro absoluto do caminho

0

Eu criei um programa que executa automaticamente a linha de código ffmpeg e funciona com todas as funções, exceto uma: se eu tentar desenhar overlay algumas legendas há um problema com o caminho absoluto, se eu usar o mesmo código em um shell aberto na área de trabalho ele funciona mas se eu escrever o caminho absoluto ele não funciona.

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

se eu alterar ffmpeg, input.mp4, subs.srt, output.mp4 com seu próprio caminho absoluto ("c: \ users \ home \ desktop \ input.mp4") ele não funciona!

Eu também tentei:

  • "c: \ usuários \ home \ desktop \ input.mp4"
  • "c: /users/home/desktop/input.mp4"
  • 'c: \ usuários \ home \ desktop \ input.mp4'
  • 'c: /users/home/desktop/input.mp4'

Erro:

    [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

O que posso fazer?

strategaD

(não consigo falar inglês muito bem, desculpe)

    
por strategaD 04.09.2017 / 12:04

1 resposta

0

De acordo com este relatório de erros , o erro que você está vendo é um problema específico do filtro de legendas.

No Windows, para o filtro de legendas funcionar com caminhos absolutos:

"each special character needs to be escaped [...] and then each escape needs to be re-escaped".

O que isso significa efetivamente é que você precisa de \ antes dos dois pontos : (ou seja, \: ) e \\ no lugar de barras invertidas únicas \ , por exemplo:

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

Para evitar problemas, também não deve haver espaços em seu caminho de legendas (as cotações não importam de uma forma ou de outra para caminhos sem espaços e, portanto, não são necessárias).

Se você perder uma única barra (por exemplo, \: vs. \: ou \ , \\ vs. \\ ) ou incluir espaços no caminho, você continuará tendo problemas.

Observe que essa solução é apenas para o filtro de legendas. Você pode especificar caminhos para seus arquivos de entrada e saída normalmente (por exemplo, c:\users\home\desktop\input.mp4 ).

Além disso, você não precisa apenas de cotações se o caminho contiver espaços, por exemplo,

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

vs.

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

Por fim, usar seu comando original e c:\users\home\desktop\ como um caminho absoluto renderia:

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
    
por 04.09.2017 / 14:19