2019-03-04

ffmpegoff - Video2GiF

Você já quis transformar um trecho de vídeo em gif? No windows? Usando o ffmpeg? Sem precisar instalar nada!?!! Seus problemas COMEÇARAM!!!!

Acabei de terminar um código que não sei ainda se é alpha ou se é beta, pois release eu tenho certeza que não é, que só deve ser utilizado pelas pessoas mais sem juízo da internet.

Se quiser testar, o código não é nem aberto, é completamente visível, tá na cara e no melhor estilo: 100% por sua conta e risco.

Ele não deveria precisar instalar nada. Ele faz download usando programas nativos do windows do ffmpeg e do 7zip, descompacta e reorganiza as ferramentas. Aparentemente o download através de programas nativos do windows é mais demorado do que o tempo normalmente gasto em download através de navegadores, porém, não deve passar de 10 minutos. Será que tem coragem de executar um script que pede para o usuário aguardar mais de 10 minutos para download de ferramentas??

Se tem coragem, o programa é seu!

Dica de uso: (a) faça download do script, salve-o dentro de uma nova pasta, vazia, e exclusiva para ele. Se tudo der certo ele produzirá as pastas necessárias. (b) coloque dentro da pasta "video" criada pelo script na primeira execução o vídeo que quiser transformar trecho dele em gif. coloque apenas 1 vídeo por vez. (c) siga as instruções da tela e se tudo der certo, dentro da pasta "gif" produzida pelo script estará lá sua obra de arte.

Atenção: Este script é completamente experimental. E não me responsabilizo nunca por nenhum script que você baixe da internet e execute em sua máquina. Isso aqui é para quem tem coragem!

video2gif.cmd - colorido pelo hilite.me, batchfile, emacs

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
@echo off
  echo.
  echo. Verificando Diretorios
  call :starting
  echo. Verificando Ferramentas
  call :download
  echo. Descompactando Ferramentas
  call :unsevenzipping
  if %ERRORLEVEL% NEQ 0 (
    echo.
    echo.  Leia o arquivo: video2gif.log
    echo.  - algum erro foi encontrado -
    echo.  - parando execucao -
    echo.
    timeout /NOBREAK /T 20
    exit /B
  )
  echo. Verificando todos arquivos
  call :onlycheck
  if %ERRORLEVEL% NEQ 0 (
    echo.
    echo.  Leia o arquivo: video2gif.log
    echo.  - algum erro foi encontrado -
    echo.  - parando execucao, em onlycheck -
    echo.
    timeout /NOBREAK /T 20
    exit /B
  )
  echo. Video2GiF
  call :mainvideo2gif
  explorer gif
  echo.
exit /B  
  ::#######################::
  ::##    refinements    ##::
  ::#######################::
  
  :starting
  if not exist video mkdir video
  if not exist tools mkdir tools
  if not exist tools\tmp mkdir tools\tmp
  if not exist gif mkdir gif
  exit /B
  
  :download
  if not exist tools\tmp (
    echo.  A subpasta "tmp" nao foi criada em "tools"
    timeout /T 10 /NOBREAK
    exit /B
  )
  if not exist tools\tmp\ffmpeg.zip (
    echo.  Fazendo download do ffmpeg 4.1.1 x86
    echo.  por favor, aguarde...
    echo.  60MB, tempo esperado: ate 10 min. 
    echo.  relogio-antes.: %time%. 
    certutil.exe -urlcache -split -f "https://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-4.1.1-win32-static.zip" tools\tmp\ffmpeg.zip
    REM :: Clear CertUtil URLCache
    REM :: certutil -urlcache * delete
    echo.  relogio-depois: %time%.
  ) else (
    echo.  ffmpeg.zip encontrado!
  )
  if not exist tools\tmp\7zr.exe (
    echo.  Fazendo download do 7zr.exe
    echo.  por favor, aguarde...
    echo.  1MB, tempo esperado: ate 1 min. 
    echo.  relogio-antes.: %time%. 
    certutil.exe -urlcache -split -f "https://www.7-zip.org/a/7zr.exe" tools\tmp\7zr.exe
    echo.  relogio-depois: %time%. 
    REM :: source: https://sourceforge.net/p/sevenzip/discussion/45798/thread/b599cf02/
  ) else (
    echo.  7zr.exe encontrado!
  )
  if not exist tools\tmp\7z1604-extra.7z (
    echo.  Fazendo download do 7z1604-extra.7z
    echo.  por favor, aguarde...
    echo.  1MB, tempo esperado: ate 1 min. 
    echo.  relogio-antes.: %time%. 
    certutil.exe -urlcache -split -f "https://www.7-zip.org/a/7z1604-extra.7z" tools\tmp\7z1604-extra.7z
    echo.  relogio-depois: %time%. 
    REM :: source: https://www.7-zip.org/download.html
    REM :: alternatives:
    REM :: https://media.githubusercontent.com/media/develar/7zip-bin/master/win/ia32/7za.exe
    REM :: https://ufpr.dl.sourceforge.net/project/easyup/7z.exe
    REM :: http://stahlworks.com/dev/unzip.exe
    REM :: sources:
    REM :: https://github.com/develar/7zip-bin
    REM :: http://stahlworks.com/dev/index.php?tool=zipunzip
  )else (
    echo.  7z1604-extra.7z encontrado!
  )
  exit /B
  :unsevenzipping
  
  set /A "errorcontrol=0"
  if not exist tools\tmp\7zr.exe set /A "errorcontrol=%errorcontrol%+1"
  if not exist tools\tmp\7z1604-extra.7z set /A "errorcontrol=%errorcontrol%+2"
  if not exist tools\tmp\ffmpeg.zip set /A "errorcontrol=%errorcontrol%+4"
  if %errorcontrol% NEQ 0 (
    echo.
    echo.-Codigo de Erro: %errorcontrol%-
    echo.[%date%][%time%]-Codigo de Erro: %errorcontrol%->> video2gif.log
    echo.
    exit /B %errorcontrol%
  )
  if not exist tools\tmp\ZF (
    tools\tmp\7zr.exe x tools\tmp\7z1604-extra.7z -otools\tmp\ZF
  ) else (
    echo.  tools\tmp\ZF encontrado!
  )
  if not exist tools\7za.exe (
    if exist tools\tmp\ZF\7za.exe (
      copy tools\tmp\ZF\7za.exe tools\7za.exe
    ) else echo.-tools\tmp\ZF\7za.exe nao encontrado!-
  ) else (
    echo.  tools\7za.exe encontrado!
  )
  if not exist tools\ffmpeg.exe (
    if exist tools\tmp\ffmpeg.zip (
      tools\7za.exe x tools\tmp\ffmpeg.zip -otools\tmp\FF
      copy tools\tmp\FF\ffmpeg-4.1.1-win32-static\bin\ffmpeg.exe tools\ffmpeg.exe
      copy tools\tmp\FF\ffmpeg-4.1.1-win32-static\bin\ffplay.exe tools\ffplay.exe
      copy tools\tmp\FF\ffmpeg-4.1.1-win32-static\bin\ffprobe.exe tools\ffprobe.exe
    ) else echo.-tools\tmp\ffmpeg.zip nao encontrado!-
  ) else (
    echo.  tools\ffmpeg.exe encontrado!
  )
  REM tools\tmp\ZF\7zr.exe x tools\tmp\7z1604-extra.7z -otools\tmp\ZF
  REM echo. eu tou vivo, bichao
  REM echo. %errorcontrol%
  REM 7zr.exe x 7z1604-extra.7z -oZF
  REM copy 7za.exe
  REM Packing / unpacking: 7z, xz, ZIP, GZIP, BZIP2 and TAR
  REM 7za.exe x ffmpeg.zip -oFF
  exit /B
  
  :onlycheck
  set /A "errorcontrol=0"
  if not exist gif set /A "errorcontrol=%errorcontrol%+1"
  if not exist tools set /A "errorcontrol=%errorcontrol%+2"
  if not exist tools\7za.exe set /A "errorcontrol=%errorcontrol%+4"
  if not exist tools\ffmpeg.exe set /A "errorcontrol=%errorcontrol%+8"
  if not exist tools\ffplay.exe set /A "errorcontrol=%errorcontrol%+16"
  if not exist tools\ffprobe.exe set /A "errorcontrol=%errorcontrol%+32"
  if not exist video set /A "errorcontrol=%errorcontrol%+64"
  if %errorcontrol% NEQ 0 (
    echo.
    echo.-Codigo de Erro: %errorcontrol% em onlycheck-
    echo.[%date%][%time%]-Codigo de Erro: %errorcontrol% em onlycheck->> video2gif.log
    echo.
    exit /B %errorcontrol%
  ) else (
    echo.  video2gif completo!
  )
  exit /B
  
  :mainvideo2gif
  set SDL_AUDIODRIVER=directsound
  set "wait=10"
  :theloop
  cls
  echo.
  echo. Video2GiF
  echo.
  echo.   modo de usar:
  echo.    coloque apenas 1 video por vez dentro da pasta: "video"
  echo.    o resultado serah salvo na pasta: "gif"
  echo.
  echo.    quando o gif for produzido, aperte Q para sair
  echo.
  dir /b video\*.mp4 > video\lastvideo.txt 2> nul
  dir /b video\*.m4v >> video\lastvideo.txt 2> nul
  dir /b video\*.flv >> video\lastvideo.txt 2> nul
  dir /b video\*.mkv >> video\lastvideo.txt 2> nul
  dir /b video\*.webm >> video\lastvideo.txt 2> nul
  dir /b video\*.avi >> video\lastvideo.txt 2> nul
  dir /b video\*.mpg >> video\lastvideo.txt 2> nul
  dir /b video\*.mpeg >> video\lastvideo.txt 2> nul
  dir /b video\*.wmv >> video\lastvideo.txt 2> nul
  dir /b video\*.rm >> video\lastvideo.txt 2> nul
  dir /b video\*.rmvb >> video\lastvideo.txt 2> nul
  dir /b video\*.m4v >> video\lastvideo.txt 2> nul
  dir /b video\*.3gp >> video\lastvideo.txt 2> nul
  dir /b video\*.3g2 >> video\lastvideo.txt 2> nul
  set "thelastvideo=null"
  set "thenextgif=null"
  set /p thelastvideo=<video\lastvideo.txt
  echo. video2gif
  if %thelastvideo%==null (
    echo.   nenhum video foi encontrado!
    echo.   por favor, coloque um video na pasta,
    echo.   e aperte enter para continuar.
    echo.
    pause
    goto :theloop
  ) 
  set "thenextgif=gif\%thelastvideo:~0,-3%gif"
  set "thelastvideo=video\%thelastvideo%"
  tools\ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 %thelastvideo% > video\lastvideo.txt 2> nul
  set "videoduration=10"
  set /p videoduration=<video\lastvideo.txt
  set "videoduration=%videoduration:~0,6%"
  echo.   encontrado: %thelastvideo%    
  echo.   resultado.: %thenextgif% [futuro]
  echo.   video em s: %videoduration% [duracao completa do video em segundos]
  echo.
  echo. perguntas: [na duvida, nao digite nada!, apenas aperte enter]
  echo.
  echo."a qualidade retro possui baixa resolucao e baixa qualidade de cor"
  set "oldgif=0"
  set /p "oldgif=.qualidade retro? [0 ou 1, default: 0] " 
  echo.
  echo."informe em segundos o inicio do corte do video, na duvida, enter"
  set "startgif=0.0"
  set /p "startgif=.inicio do gif em s?    [default: 0.0] "
  set /A "mathstartgif=startgif"
  set /A "mathvideoduration=videoduration"
  if %mathstartgif% GTR %mathvideoduration% (
    set /A "startgif=mathvideoduration-7"
  )
  if %mathstartgif% LSS 0 (
    set "startgif=0.0"
  )
  echo.
  echo."informe em segundos a duracao do gif, na duvida, enter"
  set "lengthgif=7.0"
  set /p "lengthgif=.duracao do gif em s?   [default: 7.0] " 
  set /A "mathlengthgif=lengthgif"
  if %mathlengthgif% GTR %mathvideoduration% (
    set "lengthgif=%videoduration%"
  )
  if %mathlengthgif% LSS 0 (
    set "lengthgif=7.0"
  )
  if "%oldgif%"=="1" (
    echo.
    echo.
    echo.   aguarde, seu video retro sera processado.
    echo.   algumas janelas piscarao, para fechar a janela do gif,
    echo.   clique no gif, e aperte a tecla "Q" para sair
    echo.
    echo.
    timeout /NOBREAK /T %wait% > nul
    start "" /WAIT tools\ffmpeg.exe -hide_banner -ss %startgif% -t %lengthgif% -i %thelastvideo% -r 20 -vf scale=-2:224 -y %thenextgif%
    start "" /WAIT tools\ffplay.exe -hide_banner -loop 0 %thenextgif%
    exit /B
  )
  echo.
  set "framerate=25"
  echo."informe um framerate nao maior que 30, na duvida, enter"
  set /p "framerate=.framerate?[12;15;20;25;30default: 25] " 
  set /A "framerate=framerate"
  if %framerate% GTR 30 (
    REM :: soh um individuo teria a audacia de escolher
    REM :: um framerate maior que 30: Fal4KGamer.
    REM :: Deixa disso Fal4K@60Gamer.
    set "framerate=30"
  )
  if %framerate% LSS 12 (
    set "framerate=12"
  )
  echo.
  echo."informe um resolucao nao maior que 480, na duvida, enter"
  echo."sugestoes: 144, 160, 180, 224, 240, 300, 320, 360, 480 "
  set "resolucao=300"
  set /p "resolucao=.resolucao?[144;240;320, default: 300] " 
  set /A "resolucao=resolucao"
  if %resolucao% GTR 480 (
    REM :: soh um individuo teria o desejo de escolher
    REM :: uma resolucao maior que 480: Fal4KGamer.
    REM :: Deixa disso Fal4K@60:51mpbsGamer.
    set "resolucao=480"
  )
  if %resolucao% LSS 144 (
    set "resolucao=144"
  )
  echo.
  echo.
  echo.   aguarde, algumas janelas piscarao, clique no gif,
  echo.   e aperte a tecla "Q" para sair
  echo.
  echo.
  timeout /NOBREAK /T %wait% > nul
  REM echo tools\ffmpeg.exe -hide_banner -ss %startgif% -t %lengthgif% -i %thelastvideo% -vf fps=%framerate%,scale=-2:%resolucao%:flags=lanczos,palettegen -y video\palette.png
  start "" /WAIT tools\ffmpeg.exe -hide_banner -ss %startgif% -t %lengthgif% -i %thelastvideo% -vf fps=%framerate%,scale=-2:%resolucao%:flags=lanczos,palettegen -y video\palette.png
  start "" /WAIT tools\ffmpeg.exe -hide_banner -ss %startgif% -t %lengthgif% -i %thelastvideo% -i video\palette.png -filter_complex "fps=%framerate%,scale=-2:%resolucao%:flags=lanczos[x];[x][1:v]paletteuse" -y %thenextgif%
  start "" /WAIT tools\ffplay.exe -hide_banner -loop 0 %thenextgif%
  echo.
  echo.
  echo.
  echo.
  exit /B
   
  REM see: https://trac.ffmpeg.org/wiki/Scaling
  exit /B
  ::#######################::
  ::##   without  use    ##::
  ::#######################::
  exit /B
  
  for /L %%p IN (0,1,5) DO (
    call :dontkilltheworld %counter% %%p
    echo.4:%%p - %counter%
  )
  exit /B
  :dontkilltheworld
  set "abc=6"
  set "abc=%~1"
  set "def=7"
  set "def=%~2"
  echo.3:%def% - %abc%
  exit /B

  REM :: bitsadmin needs to run as ADMIN to download
  bitsadmin /CREATE dlffmpeg
  bitsadmin /TRANSFER dlffmpeg /DOWNLOAD /PRIORITY normal https://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-4.1.1-win32-static.zip %temp%\ffmpegoff.zip
  bitsadmin /LIST /ALLUSERS
  bitsadmin /INFO dlffmpeg
  bitsadmin /CANCEL dlffmpeg
  exit /B

senha: vaidormirgoogle
download: https://drive.google.com/open?id=1VmogHwfqkKDh7njJVBtnF5f4gHT5GRym
virustotal: 4/55  [kkkkkkkkkkkkkkkkk 4/55???]
https://www.virustotal.com/en/file/a85fae2aebc89d17bcab271899a94109404fe557cd8d971f0a7af9dbef90fda3/analysis/1551695689/

a google bloqueou o zip sem senha... por supor que seria "código protegido", "warez", "pirataria".

Cuidado!!!

[nao tem como um script "vir" com virus, apesar dele poder ser "malicioso", e dentro das maldades fazer download de ferramentas perigosas. e é o caso? certo? só execute código que você consiga escrever!]

* devo ficar sem internet durante todo o carnaval, eventualmente, eu acesso o 3G, mas devo passar o maior tempo desconectado. por favor, faça uso dos comentários para relatar os problemas, e as surpresas, caso ele funcione.

cheers!

Nenhum comentário:

Postar um comentário