Preg_match_all e, em seguida, substitua por uma string de input

Basicamente, eu quero analisar alguns conteúdos de input que têm alguma syntax, em seguida, converter em códigos html.

por exemplo

$input="Please watch video 1 [{video('https://stackoverflow.com/questions/26112544/preg-match-all-and-then-replace-for-an-input-string/whats-new/chain_reaction-vid1.jpg')} width="580" height="326" alt="" video="Zb36h4K2IKQ"] and video 2 [{video('whats-new/chain_reaction- vid2.jpg')} width="580" height="326" alt="" video="Zb36h4K2IDY"] . Enjoy."; 

Atualmente, existe uma maneira de extraar todos os atributos para o uso de vídeo,

 $pattern="/video\('\K[^']*|(?:width|height|alt|video)=\"\K[^\"]*/"; preg_match_all($pattern, $input, $matches); print_r($matches); 

Embora eu consiga obter os $matches , parece difícil de replace.

[{video('https://stackoverflow.com/questions/26112544/preg-match-all-and-then-replace-for-an-input-string/whats-new/chain_reaction-vid1.jpg')} width="580" height="326" alt="" video="Zb36h4K2IKQ"]

com algumas funções de retorno de chamada para converter esta parte em html apropriado, como

Alguma sugestão.