Conversão de lote via filelist.csv

2

Eu preciso converter em lote alguns arquivos de vídeo de H264 para H265. Eu sei que a minha linha de comando ffmpeg, eu tenho um csv de nomes de arquivos com um caminho relativo (eu preciso da lista de arquivos para dirigi-lo como alguns arquivos no local já estão convertidos). A única coisa com a qual estou tendo problemas agora é impulsionar a conversão da lista de arquivos.

Minha linha de comando:

cat mkv-analysis.csv | while read 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;

E uma amostra de dados:

Folder.A/file.A.mkv
Folder.B/file_b.mkv
Folder_C/file.C.mkv

Então, alguém pode me dizer o que estou fazendo de errado, pois recebo mensagens "$ file: No such file or directory"?

    
por AndyPC 02.02.2017 / 09:26

2 respostas

2

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.

    
por 02.02.2017 / 12:12
0

Eu acho que você precisa de algo como:

$ cat mkv-analysis.csv | xargs -I % ffmpeg ...

% é o argumento, um caminho de arquivo no seu caso.

assumindo que mkv-analysis.csv tenha o formato:

file-path1
file-path2
...

Se o formato for diferente, você terá que prepará-lo com awk : Por exemplo:

$ awk '...awk script...' mkv-analysis.csv | xargs ffmpeg ...

O principal é que xargs alimenta ffmpeg com arquivos e, neste estágio, ffmpeg deve conseguir encontrar o arquivo.

    
por 02.02.2017 / 10:37