Я хочу добавить временную метку текущего времени воспроизведения к видео, поэтому я использую это:
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
Получается, что метка времени была в формате чч: мм: сс: мм, но я хочу, чтобы она была в формате чч: мм: сс. Итак, как я могу достичь этой цели?
Использовать
text='timestamp \: %{pts\:gmtime\:0\:%H\\\:%M\\\:%S}'
Чтобы нарисовать Timestamp: 01:25.
, вы должны указать это в (feed) ffmpeg
:
drawtext = text = 'Timestamp\: %{pts\:gmtime\:0\:%M\\\:%S}.'
Если вы укажете это для (feed) ffmpeg
:
drawtext = text = '%{pts\:gmtime\:0\:%M\\:%S}'
, выдает Unterminated %{} near '{pts:gmtime:0:%M\'
ошибку.
bash
Но если вы используете bash
оболочку -like и слабую кавычку "......"
, чтобы передать ее,
\\
сбежал в \
, и
\:
не экранируется, но остается без каких-либо изменений, поскольку \:
не является escape-последовательностью.
Так должно быть:
-filter_complex "drawtext = text = '%{pts\:gmtime\:0\:%M\\\\\:%S}'"
т.е. bash
для "\\\\\:"
отображения одного ffmpeg
символа .\\\:
:
Если вы хотите применить только один или несколько фильтров к одному видеопотоку (например, drawtext
), вы можете использовать -vf
вместо использования --filter_complex
. Последний зарезервирован для применения фильтров к нескольким потокам.
Уэйн Чен
[Parsed_drawtext_0 @ 0x7fe6e840fd40] Could not load font "%M\": cannot open resource
и[AVFilterGraph @ 0x7fe6e8708020] Error initializing filter 'drawtext' with args 'fontfile ***'
Гьян
Уэйн Чен
text='timestamp \: %{pts\:gmtime\:0\:%H %M %S}'
Кажется, что\:
между HM и S не допускается. Таким образом, ":" не исчез. Мне интересно, как избежать ":". Большое спасибо!Писис
"...:text=%{pts\\\:hms}"
в качестве примера экранирования параметров. Мне уже приходилось экранировать символ одинарной кавычки, используя это:set fileE (echo "$file" | sed 's|\'|\\\\\\\\\\\\\\\'|')
, поэтому я бы сказал, продолжайте осторожно добавлять косые черты, пока он не будет интерпретироваться как литерал, а не как фильтр или разделитель параметра/аргумента функции.