Questo può essere fatto con un semplice script shell, in questo caso uno script Bash. Se si dispone di un file delimitato da spazi bianchi come input, che contiene il nome del file di output, il timestamp di inizio e il timestamp di fine, ad esempio:
$ cat cuts.txt
foo.mp4 00:00:00 00:00:01
bar.mp4 00:01:20 00:02:00
Quindi leggi questo con un semplice ciclo e costruisci il tuo comando ffmpeg:
while read -r filename start end; do
ffmpeg -i "input.mp4" -ss "$start" -to "$end" -c copy "$filename"
done < cuts.txt
Questo taglia semplicemente il flusso di bit senza codifica - -c copy
è una scorciatoia per -vcodec copy -acodec copy
(e copia anche i sottotitoli). È possibile specificare un codificatore video (ad es. -c:v libx264
) E un codificatore audio (ad es. -c:a aac -b:a 192k
) Per ricodificare il video.
Una versione più portatile, ma di base con 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 lo esegui su Windows, dovresti aggiungere ffmpeg al tuo PERCORSO o specificare il suo percorso completo come C:/Program Files/ffmpeg/bin/ffmpeg.exe
.