Junte Áudio e Imagem -> Saída como Vídeo usando FFmpeg

8

Eu tenho 1 imagem (jpg) e 1 arquivo de áudio (MP3) e gostaria de exibir isso como um arquivo de vídeo (por exemplo, AVI).

Alguém sabe como usar o FFMPEG para se juntar aos dois? Eu gostaria de mostrar a imagem pela duração do áudio.

Alguma idéia para alguém?

user41559
fonte
Qual sistema operacional que você está usando
subanki

Respostas:

6

Se você estiver no Windows, você também pode fazê-lo no Windows Movie Maker ... se precisar de instruções, deixe um comentário

Para o FFmpeg, use este

ffmpeg -loop_input -vframes 14490 -i imagine.jpg -i audio.mp3 -y -r 30 
    -b 2500k -acodec ac3 -ab 384k -vcodec mpeg4 result.mp4
  • vframes 14490 é o número de quadros que devem ser repetidos para obter uma imagem contínua para todo o arquivo audio.mp3

    Ex: por 8 minutos e 3 segundos ((8m x 60s + 3s) x 30fps = 14490 vf)

Recurso daqui

subanki
fonte
Oi Subanki - obrigado pelo seu comentário !! Mas não entendo isso. Preciso enviar um arquivo de vídeo a partir do áudio e da imagem. Como isso faz isso?
user41559
@nayrsllew Acabei de descobrir que o código não funciona, desculpe .. Bem, o básico é convertê-lo em vídeo usando ffmpeg -f imagem2 -i imagem% d.jpg video.mpg e depois juntar vídeo e áudio
subanki
atualizei a minha resposta, foi difícil, mas a minha uma hora google pesquisa encontrou-lo, eu sou feliz :)
subanki
A resposta está correta, por que o down -vote :(
subanki
Olá, não posso, você pode me ajudar aqui. O vídeo resultante é muito grande. Eu preciso do vídeo do mesmo tamanho do arquivo mp3. Meu arquivo de imagem é muito pequeno. Também preciso enviar este vídeo para o Youtube.
Parminder
7

Há uma maneira muito mais simples do que as sugeridas aqui, que não requer o cálculo do número de quadros ou a inserção do tamanho de arquivos individuais (especialmente melhor para o processamento em lote). Com uma versão recente do ffmpeg, você pode usar a -shortestopção, que interrompe a codificação quando o fluxo mais curto termina - nesse caso, input.mp3 (como a imagem será repetida para sempre, possui um comprimento infinito):

ffmpeg -i input.mp3 -f image2 -loop 1 -r 2 -i input.jpg \
-shortest -c:a copy -c:v libx264 -crf 23 -preset veryfast output.mp4

Isso usa 2 quadros por segundo para a imagem / vídeo, o que deve ser bom, mas você pode configurá-lo para um padrão mais 25, se desejar.

evilsoup
fonte
5

O subanki quase acertou. A linha de comando de trabalho é a seguinte;

ffmpeg -y -loop 1 -i image.jpg -i audio.mp3 -r 30 -b:v 2500k -vframes 14490 -acodec libvo_aacenc -ab 160k result.mp4
-y

sobrescrever arquivos de saída sem avisar

1

A opção '-loop_input' está obsoleta, use -loop 1. Consulte a documentação do ffmpeg .

-Eu

arquivo (s) de entrada

-r

Os quadros por segundo
também podem ser expressos como: -r 30000/1001, com um fps de 29.97nnn

-b: v

taxa de bits de vídeo; quanto maior o número, melhor a qualidade e maior o tamanho do arquivo.

-vframes

Como explicado acima; dedique o tempo total do seu arquivo de áudio em segundos (por exemplo, 00:02:41 (2 minutos e 41 segundos) é igual a 161 segundos no total (2 x 60) + 41). Em seguida, multiplique o total de segundos pelos quadros por segundo que você especificou com -r (por exemplo, 161 x 30 = 4830).

Os quadros -v podem ser substituídos por -t 161 (-t registro de duração ou transcodificação "duração" segundos de áudio / vídeo)

-acodec

Use o codec de áudio correto para o tipo de arquivo que você está criando. Para .mp4, deve ser um formato AAC. O codec libvo_aacenc era o codec de codificação correto para o meu sistema Windows 7.

-ab

Taxa de bits do áudio

result.mp4

Este é o nome do arquivo de saída. Pode ser qualquer nome de arquivo legal para o seu sistema. A extensão ajudará o ffmpeg a determinar o codec de vídeo adequado se você não especificar um usando -vcodec.

Jon Hall
fonte
1

O script bash / cygwin simples que codifica automaticamente todos os arquivos da extensão $ AUDIO no diretório para arquivo de vídeo mp4 de 10FPS no diretório com a imagem folder.jpg incorporada,

útil para uploads do youtube;)

AUDIO=m4a; 
$'\n'; for a in `ls -1 *.$AUDIO `; do ffmpeg -i $a &2> $a.info ; done;
cat '' > do.sh
IFS=$'\n'; 
for a in `ls -1 *.$AUDIO`; do D=`grep Duration $a.info | cut -d',' -f1 | cut -d' ' -f4 | cut -d'.' -f1 | head -n1 `; S=$(( $( echo $D | cut -d':' -f2 ) * 60 + 1 + ` echo $D | cut -d':' -f3  ` )) ; echo ffmpeg -loop_input -vframes $(( $S * 10 )) -i folder.jpg -i \"$a\" -y  -r 10 -b 2500k -ab 384k -vcodec mpeg4 \"$a.mp4\" >> do.sh;  done;
split -l5 do.sh
xa* &
user113368
fonte
0

Faça o download do VirtualDub e faça o seguinte:

  1. Abra a imagem como se fosse um arquivo de vídeo normal.

  2. Calcule a duração do áudio em segundos e arredonde-o para o segundo inteiro mais próximo (por exemplo, 78,34 s se torna 79 segundos). Esse valor é chamado x a partir de agora.

  3. Vá para "vídeo> taxa de quadros", selecione "alterar para taxa de quadros (fps)" e digite "1 / x" como valor. Além disso, se você quiser ter uma taxa de quadros normal no arquivo resultante, como 25 qps, selecione "Converter em qps" e insira a taxa de quadros desejada.

  4. Selecione "vídeo> compactação" e escolha seu sabor favorito. Pode ser que você precise ajustar o tamanho da imagem com o filtro de redimensionamento.

  5. Vá para "áudio> áudio de outro arquivo" e selecione seu áudio lá. Se necessário, selecione uma compactação para o áudio.

  6. Salve o arquivo.

Fonte: stephanV

Urso mal-humorado
fonte
Graças StephanV .. Eu preciso usar FFMpeg mas esta é uma boa sugestão .. obrigado
user41559