Quiero agregar una marca de tiempo del tiempo de reproducción actual a un video, así que uso esto:
ffmpeg -i video.mkv -filter_complex "drawtext=fontfile=/Library/Fonts/Arial.ttf:
text='timestamp: %{pts \: hms}': x=5: y=5: fontsize=16:
fontcolor=yellow@0.9: box=1: boxcolor=blue@0.6" -c:a copy -c:v libx264 -map 0 output.mkv
Esto resulta que la marca de tiempo estaba en formato hh:mm:ss:mm, pero yo la quiero en formato hh:mm:ss. Entonces, ¿cómo puedo lograr este objetivo?
Utilizar
text='timestamp \: %{pts\:gmtime\:0\:%H\\\:%M\\\:%S}'
Para dibujar Timestamp: 01:25.
, debe especificar este para (alimentar) ffmpeg
:
drawtext = text = 'Timestamp\: %{pts\:gmtime\:0\:%M\\\:%S}.'
Si especificas este para (feed) ffmpeg
:
drawtext = text = '%{pts\:gmtime\:0\:%M\\:%S}'
, da Unterminated %{} near '{pts:gmtime:0:%M\'
error.
bash
Pero si está usando bash
-como shell y una comilla débil "......"
, para alimentarlo,
\\
se escapa a \
, y
\:
no se escapa pero permanece sin cambios porque \:
no es una secuencia de escape.
Entonces debería ser:
-filter_complex "drawtext = text = '%{pts\:gmtime\:0\:%M\\\\\:%S}'"
es decir bash
, 's "\\\\\:"
por ffmpeg
's para mostrar \\\:
un solo carácter .:
Si solo desea aplicar uno o más filtros a una transmisión de video (por ejemplo, drawtext
), puede usar -vf
en lugar de usar --filter_complex
. Este último está reservado para aplicar filtros en múltiples flujos.
Wayne Chen
[Parsed_drawtext_0 @ 0x7fe6e840fd40] Could not load font "%M\": cannot open resource
y[AVFilterGraph @ 0x7fe6e8708020] Error initializing filter 'drawtext' with args 'fontfile ***'
gian
Wayne Chen
text='timestamp \: %{pts\:gmtime\:0\:%H %M %S}'
Parece que\:
entre HM y S no está permitido. Entonces el ":" no se ha escapado. Me pregunto cómo escapar de ":". ¡Muchas gracias!psis
"...:text=%{pts\\\:hms}"
como ejemplo para escapar de los parámetros. Ya tuve que escapar del carácter de comilla simple usando esto:set fileE (echo "$file" | sed 's|\'|\\\\\\\\\\\\\\\'|')
, por lo que diría que siga agregando barras con cuidado hasta que funcione interpretado como un literal y no como un filtro o parámetro de función/separador de argumentos.