ffmpeg trunca caminhos na saída quando há pontos envolvidos quando executado no bash

1

Se eu tiver um caminho com pontos no caminho, por exemplo:

/home/user/Documents/hello/test.testing_23-24.123/test.testing_23-24.124

ffmpeg pode localizar o arquivo se você passar o caminho do arquivo como um argumento, mas irá truncar o nome do caminho para o primeiro ponto que encontrar no caminho do arquivo quando ele gerar o arquivo.

Por exemplo, eu tenho isso:

#!/bin/sh
src_folder='pwd'

for filename in "${src_folder}"/*.MP4
  do
    ffmpeg -threads 0 -probesize 100M -analyzeduration 100M -i "${filename}" \
      -c:v libx265 -preset medium -pass 1 -tune grain -x265-params "crf=28:pmode=yes" \
      -c:a libmp3lame -q:a 9 -strict experimental "${filename%%.*}"_1stpass.mkv
  done

Os estados de saída:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/user/Documents/hello/test.testing_23-24.123/test.testing_23-24.124/GOPR2103.MP4':

[..]

Output #0, matroska, to '/home/user/Documents/hello/test_hevc.mkv':

Nós vemos o caminho da pasta do arquivo de saída abaixo:

 /home/user/Documents/hello/test.testing_23-24.123/test.testing_23-24.124

Fica truncado após ffmpeg encontrar o primeiro ponto no caminho de saída. Isso só acontece com o nome do arquivo da saída. Também usa o caminho truncado como o nome do arquivo.

Alguém que poderia me apontar na direção certa sobre como resolver isso?

PS: Estou ciente de que uma solução ruim deve evitar pastas com pontos:]

    
por sternumbeef 27.07.2018 / 22:12

1 resposta

1

Como Gyan apontado em um comentário , você (não intencionalmente?) disse ao shell para remover tantos caracteres quanto possível do final do caminho do arquivo até encontrar o primeiro ponto / período; esse é o significado de %% seguido por .* . Você pode ter pretendido retirar a "extensão" do nome do arquivo (como MP4 ), caso em que você deseja usar um único % , que diz para corresponder ao menor número de caracteres.

Como você sabe que está captando arquivos MP4, é possível simplificar ainda mais a expansão % e simplesmente solicitar diretamente a remoção desses 4 caracteres.

Também é um pouco inútil expandir pwd quando a única coisa que você precisa é reunir nomes de arquivos no diretório atual.

Use algo mais como isto:

for filename in ./*.MP4
  do
    ffmpeg -threads 0 -probesize 100M -analyzeduration 100M \
      -i "${filename}" \
      -c:v libx265 -preset medium -pass 1 -tune grain -x265-params \
      "crf=28:pmode=yes" -c:a libmp3lame -q:a 9 -strict experimental \
      "${filename%.MP4}"_1stpass.mkv
  done
    
por 28.07.2018 / 02:36