ffmpeg mp3 + jpg = mp4 como tornar o vídeo menor

4

Oi eu estou usando o ffmpeg para adicionar a.jpg ao an.mp3 para fazer um.mp4

Como há apenas uma imagem adicionada ao vídeo. Eu estou querendo saber se existe uma maneira de reduzir o tamanho do vídeo, por exemplo, taxa de bits de força / segundo = 1 em vez de 28?

Como é uma imagem estática, não há necessidade de alteração. apenas fique parado.

Atualizado:

a.jpg = 26.7K (image not so clear)
a.mp3 = 64.6M (54 minutes)
a.mp4 = 80.6M (video result is not so clear, music still good)

E aqui está a linha do cmd:

$ ffmpeg -loop 1 -i a.jpg -i a.mp3 -shortest -acodec copy a.mp4

E fiz outro teste com tamanho razoável de imagem de qualidade de vídeo aceitável:

a.jpg = 151K
a.mp3 = 5.1M (5 minutes)
a.mp4 = 9.2M

E aqui está o resultado da saída:

É um tamanho razoável para o mp4? O tamanho da imagem é muito importante? Devo redimensionar jpg para 1080 * 720, e fazer configurações adicionais no ffmpeg para a saída como 720p (o que é a configuração do ffmpeg então :)?

    
por SIDU 05.01.2017 / 11:14

2 respostas

7

Para fazer o upload para o YouTube

ffmpeg -loop 1 -framerate 1 -i image.jpg -i music.mp3 \
-c:v libx264 -preset veryslow -crf 0 -c:a copy -shortest output.mkv
  • O YouTube aceita praticamente qualquer coisa, por isso esse comando usa alguns truques para tornar a codificação mais rápida, diminuir o tamanho do arquivo e manter a qualidade alta, porque o YouTube recodificará tudo o que você der.

  • Neste exemplo, é utilizada uma baixa taxa de quadros que deve codificar muito mais rapidamente. Seu player pode não gostar, mas o YouTube deve ser capaz de lidar com isso.

  • Você poderia usar a libx265 para libx264, mas ela será codificada mais lentamente para pouca ou nenhuma diferença de tamanho de arquivo e sem diferença de qualidade, pois o modo sem perda está sendo usado neste comando ( -crf 0 ).

Maior compatibilidade para qualquer jogador

ffmpeg -loop 1 -i image.png -i music.mp3 -vf "scale='min(1280,iw)':-2,format=yuv420p" \
-c:v libx264 -preset veryslow -profile:v main -c:a aac -shortest -movflags +faststart output.mp4
  • Isso deve ser reproduzido em praticamente qualquer coisa, exceto em dispositivos muito antigos (altere -profile:v main para -profile:v baseline , se for o caso).

  • O tempo de codificação será maior e o tamanho do arquivo será maior que o do YouTube acima.

por LordNeckbeard 06.01.2017 / 20:04
2

Com apenas as informações fornecidas, o que posso pensar.

Vamos por peças:

  

Como há apenas uma imagem adicionada ao vídeo. Eu estou querendo saber se existe uma maneira de reduzir o tamanho do vídeo, por exemplo, taxa de bits de força / segundo = 1 em vez de 28?

     

Como é uma imagem estática, não há necessidade de alteração. apenas fique parado.

Do que você está falando, frames por segundo (fps) não é bitrate. E você está certo no conceito. Beign apenas uma imagem estática 1 fps não seria um problema.

  

É um tamanho razoável para o mp4? O tamanho da imagem é muito importante?

Neste caso, o tamanho da imagem não teria um peso significativo, porque estamos lidando com apenas uma imagem estática. Se fosse um vídeo de alta qualidade, então é um problema diferente.

  

Devo redimensionar jpg para 1080 * 720 e fazer configurações adicionais no ffmpeg para gerar uma saída de 720p (qual é a configuração do ffmpeg, então :)?

A resolução que você está dizendo é 1280x720.

Eu não vejo o ponto na opção -loop 1 aqui, isso só irá retardar o processo. Você usou -shortest porque o arquivo tem mais de 1 fluxo de entrada? Se não, então não há razão para usá-lo. Já que você usou -acodec copy , eu devo presumir que você não quer recodificá-lo.

Para uma saída de 720p 1fps sem recodificar e não tocar na taxa de bits:

ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -s 1280x720 output.mp4

Assegure-se de que tenha mais de um fluxo de entrada e deseje que o ffmpeg termine a codificação no fluxo mais curto e, em seguida:

ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -s 1280x720 -shortest output.mp4

Agora, se você tiver que alterar a taxa de bits (digamos 1024k como exemplo);

ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -b:v 1024k -bufsize 1024k -s 1280x720 output.mp4

Veja: Limite a taxa de bits de saída

  

-c: uma cópia = Copie o fluxo de áudio de entrada para não recodificá-lo.

     

-b: v = A taxa de bits especificada para ser (não precisamente) constante.

     

-bufsize = É o intervalo em que calcula a taxa de bits média. Significando a mais baixa qualidade de perda de imagem, mas mais precisa   bitrates de acordo com o especificado em -b: v .

     

-s = O tamanho real da saída de vídeo.

     

-framerate = A taxa de quadros de entrada que queremos que a saída use.

Note que se você ainda quiser um vídeo de tamanho menor em um ponto, terá que sacrificar a qualidade para conseguir isso. E outras maneiras de fazer isso envolvem recodificação com compactação com perdas.

Do que você diz, das informações que você fornece e do que você está tentando fazer, acho que parece que o seu objetivo é incorporar o álbum-arte ao mp3. Se esse é o seu objetivo, isso se ajustaria melhor às suas necessidades:

ffmpeg -i input.mp3 -i cover.jpg -map_metadata 0 -map 0 -map 1 output.mp3

  

-map_metadata = O especificador de metadados ffmpeg para o arquivo de saída do infile. Neste caso ( zero ) os metadados globais.

     

-map 0 = Fluxo de entrada 1 (áudio).

     

-map 1 = Fluxo de entrada 2 (imagem).

Se nada aqui atender às suas solicitações, forneça mais informações.

    
por Fenrir 06.01.2017 / 06:50