É possível gravar uma marca d'água de nome de arquivo no canto de uma apresentação de slides de imagem concatenada e alterá-la para cada imagem?

1

O que eu quero fazer : tenho uma pasta com um monte de imagens. Usando esses arquivos, quero criar um vídeo de apresentação de slides, enquanto quero que o nome de cada uma das imagens originais seja gravado no canto inferior direito.

Qual é o meu estado atual : criei um script para buscar todos os arquivos .jpg na pasta, criei uma lista ffmpeg-readable e sei como concatenar as imagens para uma apresentação de slides e tudo funciona como pretendido. Eu também descobri como usar o drawtext do FFmpeg para obter um belo selo de nome de arquivo.

Agora o problema : Atualmente o FFmpeg pega o último nome de arquivo da lista de arquivos (por exemplo, IMG_9935.jpg) e o grava em todo o vídeo. Mas o que eu quero que aconteça é que isso muda com cada imagem "nova" - assim como um timecode mudaria durante o curso do vídeo.

Tudo isso é possível?

Como uma nota secundária : "Por que você não queime o nome do arquivo de antemão?" Eu gostaria de mantê-lo o mais flexível possível. Então, se há outro caminho, eu gostaria de ir por esse caminho.

for i in *.jpg; do echo "file '$i'" >> files.txt; done

ffmpeg -r 1/3 -f concat -safe 0 -i files.txt -vf
"eq=text=$(echo $i | rev | cut -d / -f 1 | rev): fontcolor=0x808080:
fontsize=14: x=w-tw- 10:y=h-th-10" -c libx264 filename.mp4
    
por Max M. 05.07.2018 / 22:26

1 resposta

1

O demuxer de concat permite a configuração de entrada de metadados por arquivo, mas isso deve ser feito manualmente.

Você mudaria seu script para

for i in *.jpg; do echo "file '$i'" >> files.txt; echo "file_packet_metadata url=$i" >> files.txt; done

ffmpeg -r 1/3 -f concat -safe 0 -i files.txt -vf
"drawtext=text='%{metadata\:url}': fontcolor=0x808080:
fontsize=14: x=w-tw- 10:y=h-th-10" -r 12 -c:v libx264 filename.mp4
    
por 06.07.2018 / 12:22