O que tenho é um filme MP4 com fluxo de vídeo e áudio.
O que quero na saída é um arquivo MP4 contendo:
- o mesmo fluxo de vídeo
- o mesmo fluxo de áudio
- o mesmo fluxo de vídeo com uma taxa de bits mais baixa
Alguém pode me dizer o comando ffmpeg apropriado?
Responder1
Em princípio, é feito assim. Codifique para diminuir a taxa de bits sem áudio. Claro, isso pressupõe que você tenha vídeo H.264. Verifica aguia de codificaçãopara mais informações.
ffmpeg -i input.mp4 -c:v libx264 -b:v 700k -an lower.mp4
Em seguida, mescle seus arquivos:
ffmpeg -i input.mp4 -i lower.mp4 -c copy -map 0:v -map 0:a -map 1:v output.mp4
Isso pegará os primeiros fluxos de vídeo e áudio do primeiro arquivo e o primeiro fluxo de vídeo do segundo arquivo e os copiará para o contêiner de saída.
Então, novamente, como menciona @trikly, não há nenhuma vantagem real em fazer isso. Especialmente porque você marcou sua pergunta com "streaming de vídeo", observe que ao adicionar outro stream dentro de um contêiner, você aumenta o tamanho do arquivo que o cliente deve baixar, em vez de oferecer apenas uma representação menor, que é o que você normalmente deseja fazer em ambientes com largura de banda restrita.
A verdadeira solução seria fazer algum tipo destreaming adaptativo, com MPEG-DASH ou HLS*. ffmpeg pode criar arquivos segmentados que podem ser usados para streaming DASH e HLS, mas você também precisa gerar os arquivos de metainformações, etc. E você precisa de um cliente que seja compatível com DASH ou HLS.
Se isso for muito difícil de configurar, você deve simplesmente oferecer o vídeo em dois formatos diferentes, cada um com seu próprio link.
*Codificação de vídeo escaláveltambém foi projetado com um objetivo semelhante, mas não é usado por ninguém atualmente.