that_one_nigga_you_k

cima e baixo

Feb 12th, 2025
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 2.52 KB | None | 0 0
  1. import java.io.BufferedReader
  2. import java.io.InputStreamReader
  3.  
  4. fun main() {
  5.     val videoOriginal = "/home/narciso/Videos/moses.mp4"  // Vídeo original
  6.     val videoCortado = "/home/narciso/Videos/moses_cortado.mp4"  // Vídeo cortado
  7.     val videoBase = "/home/narciso/Videos/eu.mp4"  // Vídeo base
  8.     val videoFinal = "/home/narciso/Videos/video_certo.mp4"  // Resultado final
  9.  
  10.     // Comando 1: Cortar o vídeo original
  11.     val cutCommand = arrayOf(
  12.         "ffmpeg",
  13.         "-y", // Força a sobrescrição do arquivo de saída
  14.         "-i", videoOriginal,
  15.         "-ss", "36.43",  // Começa no tempo 36.43s
  16.         "-c", "copy",  // Copia sem recompressão
  17.         videoCortado
  18.     )
  19.  
  20.     println("Cortando o vídeo...")
  21.     executeCommand(cutCommand)
  22.  
  23.     // Comando 2: Empilhar os vídeos verticalmente (Instagram Layout)
  24.     val stackCommand = arrayOf(
  25.         "ffmpeg",
  26.         "-y", // Força a sobrescrição do arquivo de saída
  27.         "-i", videoCortado,  // Vídeo cortado
  28.         "-i", videoBase,  // Vídeo base
  29.         "-filter_complex",
  30.         "[0:v]scale=1080:960:force_original_aspect_ratio=decrease,pad=1080:960:(ow-iw)/2:(oh-ih)/2[v0];" +  // Scale and pad first video to 1080x960
  31.                 "[1:v]scale=1080:960:force_original_aspect_ratio=decrease,pad=1080:960:(ow-iw)/2:(oh-ih)/2[v1];" +  // Scale and pad second video to 1080x960
  32.                 "[v0][v1]vstack=inputs=2[v];" +  // Stack videos vertically (1080x1920)
  33.                 "[0:a][1:a]amerge=inputs=2[a]",  // Combine audio streams
  34.         "-map", "[v]",  // Usa o vídeo empilhado
  35.         "-map", "[a]",  // Usa o áudio combinado
  36.         "-ac", "2",  // Define áudio estéreo
  37.         "-b:v", "20M",  // Define a bitrate do vídeo para 1 Mbps
  38.         "-b:a", "256k",  // Define a bitrate do áudio para 128 kbps
  39.         "-r", "30",  // Define a taxa de frames para 30 fps
  40.         videoFinal
  41.     )
  42.  
  43.     println("Empilhando os vídeos...")
  44.     executeCommand(stackCommand)
  45.  
  46.     println("Processo concluído! Vídeo salvo em: $videoFinal")
  47. }
  48.  
  49. /**
  50.  * Executa um comando no terminal.
  51.  */
  52. fun executeCommand(command: Array<String>) {
  53.     try {
  54.         val process = ProcessBuilder(*command).start()
  55.         val reader = BufferedReader(InputStreamReader(process.errorStream))
  56.         var line: String?
  57.         while (reader.readLine().also { line = it } != null) {
  58.             println(line) // Exibe a saída do FFmpeg
  59.         }
  60.         process.waitFor()
  61.     } catch (e: Exception) {
  62.         e.printStackTrace()
  63.     }
  64. }
  65.  
Add Comment
Please, Sign In to add comment