2017-02-05 7 views
1

Я использую этот FFmpeg аргумент, чтобы получить черную рамку в файле:переформатировать выход в Bash

ffmpeg -i ${arrayDesFichiers[$i]} -vf "blackdetect=d=3:pix_th=0.00" -an -f null - 2>&1 | grep black_duration >> log.txt 

Сейчас я получаю это в моем log.txt:

[blackdetect @ 0x7fd9add06bc0] black_start:0 black_end:3.2 black_duration:3.2 

И я хотел бы переформатировать его примерно так:

black duration : 3.2 seconds 

Я уверен, что это возможно в Баше, но как?

+0

Я предлагаю использовать ** grep ** для выбора нужной строки и ** sed ** для обертывания двоеточия с пробелами ... Или использовать ** awk **. – Jdamian

+0

Я пытаюсь с sed, но о, у меня такое трудное время с регулярным выражением ... Могу ли я сказать «заменить все, что заканчивается на« black_duration »? – petaire

+0

Я не понимаю, почему вы приняли ответ @ codeforester. В тексте вопроса вы ** просите переформулировать ** 'black_duration: 3.2', что не может быть выполнено командой' grep'. – Jdamian

ответ

1

Вы можете сделать это:

ff_output=$(ffmpeg -i ${arrayDesFichiers[$i]} -vf "blackdetect=d=3:pix_th=0.00" -an -f null - 2>&1 | grep -oE "black_duration:[[:digit:]][.[:digit:]]*") 
printf "%s seconds\n" "$ff_output" >> log.txt 

grep -oE "black_duration:[[:digit:]]+[.[:digit:]]*

  • -o опция ограничивает grep вывод только соответствует части
  • -E выбирает расширенный регулярное выражение
  • [[:digit:]]+[.[:digit:]]* ищет одну или несколько цифр, необязательно с последующим периодом и одной или несколькими цифрами
+0

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