Você está usando aspas simples em torno de $file
, o que significa que a variável não está expandida:
$ var="foo"
$ echo "$var"
foo
$ echo '$var'
$var
Então, o comando que você está procurando é (com mais algumas melhorias):
while read -r file; do
ffmpeg -i "$file" -c:v libx265 -x265-params crf=23 -preset medium -c:a copy -c:s copy "${file%.mkv}_new.mkv"
done < mkv-analysis.csv
Observe que não há necessidade de cat
e absolutamente nenhum sentido em executar o comando como uma substituição de comando ( $(command)
). Isso é necessário apenas quando você deseja capturar a saída de um comando em uma variável.