Skip to content

Instantly share code, notes, and snippets.

@suissa
Created July 14, 2026 18:51
Show Gist options
  • Select an option

  • Save suissa/6da4b8e4ef7a9dadfc6dc5b6cf766515 to your computer and use it in GitHub Desktop.

Select an option

Save suissa/6da4b8e4ef7a9dadfc6dc5b6cf766515 to your computer and use it in GitHub Desktop.
video-cutter
#!/bin/bash
# Verifica se o usuário passou pelo menos o nome do vídeo
if [ "$#" -lt 1 ]; then
echo "Uso: $0 <video.mp4> [arquivo_de_cortes.yml]"
echo "Exemplo: $0 meu_video.mp4 cut.yml"
exit 1
fi
VIDEO_FILE="$1"
# Se não passar o arquivo YAML, assume 'cut.yml' por padrão
YML_FILE="${2:-cut.yml}"
# Verifica se o vídeo existe
if [ ! -f "$VIDEO_FILE" ]; then
echo "Erro: Arquivo de vídeo '$VIDEO_FILE' não encontrado."
exit 1
fi
# Verifica se o arquivo YAML existe
if [ ! -f "$YML_FILE" ]; then
echo "Erro: Arquivo '$YML_FILE' não encontrado."
exit 1
fi
# Verifica se o FFmpeg está instalado
if ! command -v ffmpeg &> /dev/null; then
echo "Erro: 'ffmpeg' não está instalado."
echo "Instale com: sudo apt install ffmpeg (Ubuntu/Debian) ou brew install ffmpeg (Mac)"
exit 1
fi
# Extrai o nome do arquivo original e a extensão
BASENAME=$(basename "$VIDEO_FILE")
FILENAME="${BASENAME%.*}"
EXTENSION="${BASENAME##*.}"
echo "Lendo os cortes do arquivo: $YML_FILE"
# Faz o parse do YAML nativamente usando grep e sed (evita precisar instalar o 'yq')
# Procura linhas que comecem com '-', extraindo apenas a parte dos tempos
CUTS=$(grep -E '^[[:space:]]*-[[:space:]]*[0-9]+[.:][0-9]+.*-[0-9]+[.:][0-9]+' "$YML_FILE" | sed -E 's/^[[:space:]]*-[[:space:]]*//')
if [ -z "$CUTS" ]; then
echo "Erro: Nenhum corte válido encontrado no arquivo '$YML_FILE'."
exit 1
fi
INDEX=1
# Loop pelas linhas extraídas
for CUT in $CUTS; do
# Substitui '.' por ':' para lidar com casos como 05.35 no lugar de 05:35
CUT_CLEAN=$(echo "$CUT" | tr '.' ':')
# Separa o tempo de início e fim baseando-se no traço '-'
START_TIME=$(echo "$CUT_CLEAN" | cut -d'-' -f1)
END_TIME=$(echo "$CUT_CLEAN" | cut -d'-' -f2)
# Formata o sufixo para ter dois dígitos (01, 02, 03, etc)
SUFFIX=$(printf "%02d" $INDEX)
OUTPUT_FILE="${FILENAME}-${SUFFIX}.${EXTENSION}"
echo "---------------------------------------------------"
echo "Processando parte $INDEX: de $START_TIME até $END_TIME"
echo "Salvando como: $OUTPUT_FILE"
# Comando ffmpeg para cortar
# -i $VIDEO_FILE : Arquivo de entrada
# -ss $START_TIME : Pula até este tempo de início
# -to $END_TIME : Para de processar neste tempo
# -c copy : Copia o vídeo e áudio sem recodificar (muito mais rápido e não perde qualidade)
ffmpeg -i "$VIDEO_FILE" -ss "$START_TIME" -to "$END_TIME" -c copy "$OUTPUT_FILE" -v warning -y
if [ $? -eq 0 ]; then
echo "✅ Parte $INDEX cortada com sucesso!"
else
echo "❌ Erro ao cortar a parte $INDEX."
fi
INDEX=$((INDEX + 1))
done
echo "---------------------------------------------------"
echo "Todos os cortes foram finalizados com sucesso!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment