Texto para filme da linha de comando

5

Eu preciso de um script chamado myslide , que faz o seguinte:

myslide -f 15 -t 20 "Hello World"

produz um arquivo de filme (a ser reproduzido pelo mplayer), que exibe apenas "Hello World" no centro da tela no tamanho da fonte 15 por 20 segundos.

Existe uma maneira fácil de fazer isso?

    
por student 06.02.2012 / 16:24

1 resposta

5

Existem duas possibilidades aqui apresentadas, usando.

EDIT: Ambos os scripts foram condensados e modificados para reproduzir apenas um quadro único durante a duração de quantos segundos foram especificados. mplayer pode lidar com FPS muito baixo (por exemplo, 0,008547009 e 0,003154574 FPS funcionou bem, ou seja, 117 e 317 segundos de tempo de reprodução).

NOTA: Na máquina Ubuntu 10.04. mplayer não reproduz o primeiro quadro, por isso precisei incluir dois quadros para atingir o tempo especificado. Portanto, esteja ciente de que outro jogador pode jogar os dois quadros e assim dobrar o tempo de jogo.

AviSynth é um servidor de quadros versátil / potente. Não há GUI. É uma linguagem de script para edição / criação / filtragem de áudio e vídeo não linear. Sendo um servidor de quadros, não precisa criar um vídeo no disco. Ele pode servir o vídeo / áudio diretamente, quadro a quadro, para qualquer ferramenta aviSynth ciente, seja um media player ou codificador ...

AviSynth é Software Livre e de Código Aberto escrito para Windows (perdi você? :) ... Tentativas foram feitas, mas não foi portado com sucesso para * nix (eu acredito que os desenvolvedores tentaram, mas ele se atolou como O design original foi strongmente enganchado no material do Windows.

funciona bem em wine . A versão vinho de mplayer e Avidemux pode processar scripts .avs (há outros; por exemplo, VirtualDub e AvsPmod que é um mini- "IDE" GUI para Avisynth).

Aqui está um script do AviSynth para fazer o que você quiser.

myslide  15 20 "Hello from AviSynth"
#!/bin/bash
fontSize=$1; sec=$2; text="$3"
>>test.avs printf 'Blankclip( 2 ,width=640 ,height=480 ,fps=1/float(%s), color=$000000)\n' "$sec"
>>test.avs printf ' \ .Subtitle("%s", font="Arial", size=%s, text_color=$ff0000, align=5)\n' "$text" "$fontSize" 
wine avs2yuv.exe  test.avs -  2>/dev/null |
ffmpeg -b 100 -i - "test.mp4" 2>/dev/null

mplayer test.mp4

avs2yuv é um programa de linha de comando, destinado ao uso sob o Wine, para fazer interface entre / em> e ferramentas de vídeo baseadas em Linux.
avs2yuv lê apenas um fluxo de vídeo, mas o AviSynth pode transmitir áudio e vídeo para Avidemux via AvsProxy (que acompanha o Avidemux) ...

---

Aqui está outra maneira, usando convert do pacote imagemagick . Este método cria uma série de imagens .jpg.

myslide  15 20 "Hello from convert"
#!/bin/bash
fontSize=$1; sec=$2; text="$3"
FPS=$(awk 'END{print 1/'$2'}' /dev/null)
convert -background lightblue -fill blue -pointsize $fontSize -gravity center -size 640x480 caption:"$text" "test$$0.jpg"
cp test$$0.jpg "test$$1.jpg" # Add 1 extra; mplayer doesn't play ist frame (on test system)
ffmpeg -y -r $FPS -b 100 -i test$$%d.jpg test.mp4
rm  test$$*.jpg # remove temp images

mplayer test.mp4
    
por 06.02.2012 / 18:42