FFMPEG Dividindo MP4 com a mesma qualidade

51

Eu tenho um arquivo MP4 grande. Estou tentando dividi-lo em arquivos menores.

ffmpeg -i largefile.mp4 -sameq -ss 00:00:00 -t 00:50:00 smallfile.mp4

Eu pensei que usando -sameq manteria as mesmas configurações de qualidade. No entanto, não devo entender o que isso faz.

Eu estou procurando manter a mesma qualidade (áudio / vídeo) e compactação com os arquivos divididos. No entanto, essa configuração torna os arquivos divididos muito maiores.

Quais sinalizadores precisam ser definidos para manter a mesma qualidade e atributos nos arquivos divididos, mantendo a mesma proporção qualidade / tamanho?

Por exemplo, se meu arquivo original tiver cerca de 12 GB e 1920x1080 com uma taxa de bits de 10617kbps e uma taxa de quadros de 23 quadros / s e áudio de 6 canais com 317kbps, eu gostaria que os arquivos divididos fossem iguais, apenas um terço desse tamanho ( se eu dividi-lo em três pedaços).

Chris Weber
fonte
3
Para quem está lendo isso: Não use -sameq, isso não significa "mesma qualidade" .
Zaz

Respostas:

81

Se você deseja apenas dividir o vídeo sem reecodificá-lo, use o copycodec para áudio e vídeo. Tente o seguinte:

ffmpeg -ss 00:00:00 -t 00:50:00 -i largefile.mp4 -acodec copy \
-vcodec copy smallfile.mp4

Observe que isso cria apenas a primeira divisão. O próximo pode ser feito com um comando começando com ffmpeg -ss 00:50:00.

Isso pode ser feito com um único comando:

ffmpeg -i largefile.mp4 -t 00:50:00 -c copy smallfile1.mp4 -ss 00:50:00 -c copy smallfile2.mp4

Isso criará smallfile1.mp4, terminando em 50 minutos no vídeo de largefile.mp4, e smallfile2.mp4, iniciando em 50 minutos e terminando no final de largefile.mp4.

fideli
fonte
2
Usando esse método em um arquivo mp4, recebo os dois primeiros segundos de cada arquivo criado como um quadro congelado (o áudio é reproduzido normalmente). Alguma razão conhecida para isso?
Ron Harlev
Parece um bug. Atualize para o ffmpeg mais recente.
Robert
@ Robert Eu atualizei muitas vezes desde 2010. Obrigado.
Fideli
@RonHarlev Esse é o comportamento atualmente esperado. Sem recodificar, você só pode cortar vídeos em "quadros-chave". Os quadros entre os quadros principais não carregam informações suficientes por si só para criar uma imagem completa. Veja: trac.ffmpeg.org/wiki/Seeking#Seekingwhiledoingacodeccopy
Philip Thrasher
3

Uma maneira alternativa de fazer isso é:

// create a 2-min clip
ffmpeg -i input.mp4 -ss 00:10:00 -to 00:12:00 -c copy output.mp4

/**
* -i  input file
* -ss start time in seconds or in hh:mm:ss
* -to end time in seconds or in hh:mm:ss
* -c codec to use 
*/

A qualidade do arquivo permanece a mesma porque usamos -c copypara copiar os fluxos de áudio + vídeo originais para a saída.

Referência, lista de comandos FFmpeg comumente usados: DigitalFortress

Niket Pathak
fonte