Isso pode ser feito com um simples shell script, neste caso, um script Bash. Se você tiver um arquivo delimitado por espaço em branco como entrada, que contém o nome do arquivo de saída, o registro de data e hora de início e o registro de data e hora final, por exemplo:
$ cat cuts.txt
foo.mp4 00:00:00 00:00:01
bar.mp4 00:01:20 00:02:00
Em seguida, leia isto com um simples loop e construa seu comando ffmpeg:
while read -r filename start end; do
ffmpeg -i "input.mp4" -ss "$start" -to "$end" -c copy "$filename"
done < cuts.txt
Isso apenas corta o fluxo de bits sem codificar - -c copy
é uma abreviação de -vcodec copy -acodec copy
(e também copia legendas). Você pode especificar um codificador de vídeo (por exemplo, -c:v libx264
) e um codificador de áudio (por exemplo, -c:a aac -b:a 192k
) para recodificar o vídeo.
Uma versão mais portátil, mas básica, com o Python 3:
#!/usr/bin/env python3
import subprocess
with open("cuts.txt") as f:
for line in f.readlines():
filename, start, end = line.strip().split(' ')
cmd = ["ffmpeg", "-i", "input.mp4", "-ss", start, "-to", end, "-c", "copy", filename]
subprocess.run(cmd, stderr=subprocess.STDOUT)
Nota: Se você executar isto no Windows, você deve adicionar ffmpeg ao seu PATH ou especificar seu caminho completo como C:/Program Files/ffmpeg/bin/ffmpeg.exe
.