Script Bash que gera imagem de vídeo com título específico em subdiretórios

1

Eu tenho o seguinte script bash gerando um arquivo jpg com o mesmo nome do arquivo de vídeo. Agora preciso alterar o script bash para gerar o arquivo jpg com o nome image.jpg em vez de com o mesmo nome do vídeo.

Eu tentei muitas maneiras diferentes de fazer isso, mas não sou muito bom no script do bash e tenho alguns problemas com o nome da base e os subdiretórios.

Você pode por favor me ajudar?

#!/bin/bash
for i in */*.mp4; do 
j='basename $i .mp4'; 
/usr/bin/ffmpeg -i "$i" -r 1 -f image2 -vframes 1 -s 640x360 -ss 0:0:30 $j.jpg;
done

Seguindo a árvore de diretórios

/
/a/video1.mp4
/b/video2.mp4
/c/video3.mp4

Após o resultado, preciso

/
/a/video1.mp4
/a/image.jpg
/b/video2.mp4
/b/image.jp4
/c/video3.mp4
/c/image.jpg

Muito obrigado!

    
por Tom 01.02.2013 / 11:12

3 respostas

1

Há um problema com for i in */*.mp4 : você não pode fazer o loop de arquivos em subdiretórios como este (experimente: for i in */*.mp4; do echo $i; done , isso só imprime */*.mp4 ).

Para um caso como este, não há maneira de contornar find .

Uma solução de liner com find :

find /your/base/directory -type f -iname "*.mp4" -execdir /usr/bin/ffmpeg -i "{}" -r 1 -f image2 -vframes 1 -s 640x360 -ss 0:0:30 image.jpg \;
    
por phoibos 01.02.2013 / 11:47
0

Basta definir j como o nome desejado

j=image

em vez de defini-lo como o nome de base do vídeo.

    
por choroba 01.02.2013 / 11:30
0

Altere o código do seu bash;)

#!/bin/bash
for i in */*.mp4; do 
DIR=$(dirname ${i})
/usr/bin/ffmpeg -i "$i" -r 1 -f image2 -vframes 1 -s 640x360 -ss 0:0:30 $DIR/image.jpg;
done

precisa de explicação: link

    
por Gurjinder Singh 01.02.2013 / 11:37