Como divido um vídeo longo em vários vídeos curtos com eficiência?

0

Usando o ffmpeg, posso especificar o horário de início e a duração de cada segmento. Por exemplo eu escrevi

ffmpeg -i "originalvideo.mp4" -ss 00:00 -t 2:34 -vcodec copy -acodec copy "smallervideo1.mp4"

Eu tenho uma planilha onde eu tenho 3 colunas; nome do vídeo menor, hora de início e hora de término. Eu poderia criar cada comando separadamente para cada vídeo, mas isso levaria algum tempo, pois estou dividindo os arquivos fontes em cerca de 100 vídeos menores.

Existe um método no qual eu possa passar os valores da planilha para o ffmpeg e enviar automaticamente cada vídeo com o nome apropriado?

    
por Michael Horwitz 11.07.2017 / 09:18

1 resposta

1

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 .

    
por 11.07.2017 / 14:59