Estou tentando analisar linhas FFmpeg de arquivos de saída. Estou tentando criar um var que leia a linha uma por uma, mas toda vez que faço isso me dá o seguinte "[NULL @ 0x7fa9cb000000] Não é possível encontrar um formato de saída adequado para '': argumento inválido"
#!/bin/bash
origfolderdirectory=${PWD} # This is the original folder directory path.
origfoldername=${PWD##*/} # This is the original folder name.
# This creates a temp folder where all the temporary files will stay.
mkdir -p Temp
# This grabs a list of all .mp4 files and puts the output into files.txt
find . -name "*.mp4" >> ./Temp/files.txt
cd Temp
# This removes the dots from the start of every line in files.txt and outputs fileswithoutdot.txt
cat files.txt | sed 's/^..//' > fileswithoutdot.txt
# This adds the original folder name to the start of each line in fileswithoutdot.txt and outputs to prefixfiles.txt
cat fileswithoutdot.txt | sed -e "s#^#$origfolderdirectory#g" > prefixfiles.txt
# This adds ../Encoded. to the start of every line in prefixfiles.txt and outputs to prefixedfiles.txt
cat prefixfiles.txt | sed -e "s#$origfoldername#Encoded./$origfoldername./#" > prefixedfiles.txt
# Reads out prefixedfiles.txt for FFMPEG.
OUTPUT="$(cat prefixedfiles.txt)"
# Backs out of Temp folder
cd ../
# Copies folder structure of $origfoldername to ../Encoded.
find . -type d -exec mkdir -p -- ../Encoded./$origfoldername{} \;
# Removes temp folder from ../Encoded
rm -r ../Encoded./$origfoldername./Temp
# Do Encode
find . -name *.mp4 -exec ffmpeg -i {} -vcodec libx264 -acodec copy -threads 10 -crf 18 "${OUTPUT}" \;
Exemplo para prefixedfiles.txt
Test/test.mp4
Test/More Testing/test2.mp4
Ambos estão usando o mesmo comando, parece que eles produzem o mesmo. Assim como o que eu espero com o FFmpeg, eu também esperaria que ele usasse o arquivo de texto linha por linha para cada operação.
—
Ninsto 19/04
Eu deixei de fora o restante do script porque achava irrelevante, mas o script repete a operação para cada arquivo.
—
Ninsto 19/04
Nesse caso, inclua o restante. Como é o seu script, realmente não faz sentido. Ao executar o ffmpeg dentro do loop, faria um pouco de sentido, mas você substituiria o mesmo arquivo repetidamente. se você olhar para a documentação, poderá estar na direção certa, mas espero que você não possa ter uma quebra de linha no argumento de saída.
—
Seth
Acabei de adicionar o script inteiro.
—
Ninsto 19/04
find
encontrar mais de dois arquivos? Até onde eu sei,find
poderia fornecer os resultados em ordem aleatória. Como você esperaria saber qual arquivo de origem é recodificado em qual arquivo de destino?OUTPUT
deve ser apenas o conteúdo do arquivo de texto (você provavelmente pode apenas executarcat prefixedfiles.txt
). O que você espera que o ffmpeg faça com essa entrada?