Estou tentando remover um segmento (00:26:00 - 00:32:30) de um arquivo de vídeo input.mp4
.
Como não há como fazer isso diretamente usando o ffmpeg (até onde eu sei), eu estou cortando os segmentos que eu quero na saída e então concatenando-os.
Depois de pesquisar um pouco, descobri que existem duas maneiras de fazer isso:
Infelizmente, ambos os métodos estão falhando para mim.
Vou explicar os passos que realizei nos dois métodos:
1. Usando trim
:
EDIT: este método funciona agora; pule para o segundo método.
Comando usado:
ffmpeg -i input.mp4 -filter_complex \
"[0:v]trim=duration=00:26:00[a]; \
[0:v]trim=start=00:32:30,setpts=PTS-STARTPTS[b]; \
[a][b]concat[c]" -map [c] out.mp4
Saída de comando: Link
O arquivo de saída tem menos de 1 minuto de duração e é de apenas 6,8 MB, enquanto o arquivo de entrada foi de 900 MB.
2. Usando seek
Comando usado:
# Cut first wanted segment
ffmpeg -ss 00:00:00 -i input.mp4 -t 00:26:00 -c copy -avoid_negative_ts 1 first.mp4
# Cut second wanted segment
ffmpeg -ss 00:32:30 -i input.mp4 -c copy -avoid_negative_ts 1 second.mp4
# Combine all the wanted segments
ffmpeg -f concat -i input.txt -c copy output.mp4
onde input.txt
contém:
file first.mp4
file second.mp4
Saída de comando: Link (o erro é mencionado na linha 90: input.txt: Invalid argument
)
O arquivo de saída que recebo neste caso é de apenas cerca de 500 MB (o arquivo de entrada é 900 MB) e contém o primeiro vídeo + os primeiros minutos do segundo vídeo.
Detalhes do meu sistema:
-
Ubuntu 14.04
-
versão ffmpeg: Link
EDITAR:
O método 1 usando trim
agora está funcionando, graças ao comentário de @Multvya sobre escrever segundos como a unidade de tempo em vez da notação HH: MM: SS como é quebrado .
Novo comando:
ffmpeg -i input.mp4 -filter_complex \
"[0:v]trim=duration=1500[av]; \
[0:a]atrim=duration=1500[aa];\
[0:v]trim=start=1980,setpts=PTS-STARTPTS[bv]; \
[0:a]atrim=start=1980,asetpts=PTS-STARTPTS[ba];\
[av][bv]concat[outv]; [aa][ba]concat=v=0:a=1[outa]" \
-map [outv] -map [outa] out.mp4
Mas ainda quero saber o que há de errado com o segundo método.