Estou tentando gravar legendas baseadas em texto em um vídeo usando ffmpeg, por meio da opção de linha de comando -vf
seguida de subtitles=
( filename ) :si=
( subtitle index ). Preciso que isso funcione tanto para Windows quanto para macOS.
No Windows, só consegui fazer isso funcionar se filename for um arquivo no diretório de trabalho atual, sem caracteres especiais, como espaços ou apóstrofos. A menos que o nome do arquivo seja tão simples, recebo o erro:
"Não é possível analisar o valor da opção nome de arquivo distorcido como tamanho da imagem"
Tive mais sorte com o macOS, mas ainda não consigo contornar o nome do arquivo que contém um apóstrofo. Por exemplo:
ffmpeg -y -i "Doesn't work.mkv" -vf "subtitles='Doesn'\''t work.mkv':si=0" -c:v vp9 -row-mt 1 -crf 24 -c:a:0 libvorbis foo.webm
...ou...
ffmpeg -y -i "Doesn't work.mkv" -vf "subtitles='Doesn'\\\''t work.mkv':si=0" -c:v vp9 -row-mt 1 -crf 24 -c:a:0 libvorbis foo.webm
... ambos resultam no erro:
Não é possível abrir Não funciona.mkv
Tentei seguir os conselhos destes dois threads do Stack Overflow:
- https://stackoverflow.com/questions/71597897/unable-to-parse-option-value-xxx-srt-as-image-size-in-ffmpeg
- https://stackoverflow.com/questions/45916331/escape-special-characters-in-ffmpeg-subtitle-filename
... e documentação geral sobre como escapar do ffmpeg, mas nada disso ajuda. Você pode ver no segundo tópico do Stack Overflow acima que alguém desistiu, dizendo "A única solução que encontrei foi usar um arquivo sem caracteres especiais locais em seu diretório de trabalho".
Isso foi em 2017. O primeiro tópico é mais recente (2022), mas o conselho dado ali simplesmente não está funcionando para mim.
Alguém conhece uma solução melhor para isso? Estou começando a me perguntar se a única solução é a ridícula etapa extra de extrair quaisquer legendas baseadas em texto necessárias para um novo arquivo de nome simples no diretório de trabalho atual.
(A propósito, legendas baseadas em imagens são muito mais fáceis de manusear.)
Atualização : com base na resposta fornecida por @Rotem abaixo, eu queria mostrar como é a solução em um exemplo mais próximo do Windows da vida real (e, caramba, é feio):
ffmpeg -y -i 'V:\Show Title\Season 1\Show Title - S01E01 - Somebody''s Something.mkv' -vf "subtitles='V\'\:\\\\Show Title\\\\Season 1\\\\Show Title- S01E01 - Somebody\\\'s Something.mkv':si=0" -c:v vp9 -row-mt 1 -crf 24 -ss 00:00:00 -t 480 -c:a libvorbis foo.webm
Supondo que o nome do arquivo de legendas seja
Doesn't work.mkv
, podemos usar a seguinte sintaxe:De acordo com a documentação do FFmpeg Utilities , parece que
"subtitles='Doesn\''t work.mkv':si=0"
deveria funcionar.Talvez o outro
\
seja necessário devido à linha de comando do shell do Windows (realmente não sei).