combinando 1 imagem + 1 áudio usando o FFmpeg

0

Eu quero combinar um arquivo de áudio e um arquivo de imagem em um vídeo. A saída estará no formato .webm , por isso usarei libvpx . O vídeo deve ter um quadro com a melhor qualidade sem perdas.

Até agora eu tentei isso, mas recebi resultados ruins ou nenhum resultado:

1º comando:

ffmpeg -i image.jpg -i audio.ogg -c:v copy -c:a copy outputvideo.webm

Isso não está funcionando. Isso dá esse erro:

[webm @ 0000000002c7f8a0] Only VP8 or VP9 video and Vorbis or Opus audio and Web
VTT subtitles are supported for WebM.
...
Could not write header for output file #0 (incorrect codec parameters ?): Error
number -22 occurred

2º comando:

ffmpeg -i image.jpg -i audio.ogg -c:v libvpx -c:a copy outputvideo.webm

Isso produz má qualidade, não é aceitável para mim.

3º comando:

ffmpeg -i image.jpg -i audio.ogg -c:v libvpx -crf 4 -c:a copy outputvideo.webm

Então, adicionei o parâmetro -crf 4 . Eu esperava que produzisse um vídeo visualmente sem perdas. De fato, não tem efeito algum. -crf 4 e -crf 63 produzem os mesmos resultados.

Então tentei as configurações semelhantes com o codec libvpx-vp9 , mas sem sorte. Mesmo o parâmetro -lossless 1 não faz nada para melhorar a qualidade.

    
por destor 18.01.2015 / 01:07

3 respostas

0

1º comando: jpg não contém webm. link

Segundo comando: você pode usar -loop 1 na frente do inputfile e usar -shortest por trás do arquivo de entrada.

ffmpeg -loop 1 -i image.jpg -i audio.ogg -shortest -c:v libvpx -c:a copy outputvideo.webm

Se você quiser definir fps, use o filtro fps .

ffmpeg -loop 1 -i image.jpg -i audio.ogg -vf fps=10 -shortest -c:v libvpx -c:a copy outputvideo.webm

3º comando: você pode usar melhor a qualidade. link

ffmpeg -loop 1 -i image.jpg -i audio.ogg -shortest -c:v libvpx -quality best -c:a copy outputvideo.webm
    
por 18.01.2015 / 03:20
0

Não tenho certeza se é um bug, mas usar -qscale:v em vez de -crf funciona para libvpx. Qscale funciona do lado oposto ao CRF, maior é maior / melhor qualidade. Tente o segundo comando com -qscale:v 10 em vez da opção -crf .

    
por 21.01.2015 / 07:51
0

Você pode tentar obter qualidade definindo manualmente a taxa de bits de vídeo "-b: v 2000M"

Quanto ao FPS, parece que não afeta muito o tamanho. Experimentou um pouco com -b: v e framerates:

ffmpeg -loop 1 -i ./frames/0254.png -i camera-shutter-click-07.wav -r 10000 -pix_fmt yuv420p -shortest -vcodec libvpx -strict -2 -acodec vorbis  outputvideo6.webm

ffmpeg -loop 1 -i ./frames/0254.png -i camera-shutter-click-07.wav -pix_fmt yuv420p -shortest -vcodec libvpx -strict -2 -acodec vorbis  outputvideo5.webm

ffmpeg -loop 1 -i ./frames/0254.png -i camera-shutter-click-07.wav -r 10000 -pix_fmt yuv420p -shortest -b:v 2000M -vcodec libvpx -strict -2 -acodec vorbis  outputvideo7.webm

Os dois primeiros vídeos são 25fps e 10000fps, mas seus arquivos são quase iguais: 101,3 e 102,7kB Mas como na terceira taxa de bits é maior é o tamanho 339.7kB

ffmpeg -i outputvideo5.webm -i outputvideo6.webm -i outputvideo7.webm
ffmpeg version 2.5.git Copyright (c) 2000-2015 the FFmpeg developers
  built on Jan 11 2015 19:12:34 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
  configuration: --prefix=/home/alexandrov/ffmpeg_build --extra-cflags=-I/home/alexandrov/ffmpeg_build/include --extra-ldflags=-L/home/alexandrov/ffmpeg_build/lib --bindir=/home/alexandrov/bin --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab
  libavutil      54. 16.100 / 54. 16.100
  libavcodec     56. 20.100 / 56. 20.100
  libavformat    56. 18.100 / 56. 18.100
  libavdevice    56.  3.100 / 56.  3.100
  libavfilter     5.  7.100 /  5.  7.100
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, matroska,webm, from 'outputvideo5.webm':
  Metadata:
    encoder         : Lavf56.18.100
  Duration: 00:00:01.32, start: 0.000000, bitrate: 613 kb/s
    Stream #0:0: Video: vp8, yuv420p, 1280x720, SAR 1:1 DAR 16:9, 25 fps, 25 tbr, 1k tbn, 1k tbc (default)
    Stream #0:1: Audio: vorbis, 48000 Hz, stereo, fltp (default)
Input #1, matroska,webm, from 'outputvideo6.webm':
  Metadata:
    encoder         : Lavf56.18.100
  Duration: 00:00:01.30, start: 0.000000, bitrate: 631 kb/s
    Stream #1:0: Video: vp8, yuv420p, 1280x720, SAR 1:1 DAR 16:9, 10k fps, 25 tbr, 1k tbn, 1k tbc (default)
    Stream #1:1: Audio: vorbis, 48000 Hz, stereo, fltp (default)
Input #2, matroska,webm, from 'outputvideo7.webm':
  Metadata:
    encoder         : Lavf56.18.100
  Duration: 00:00:01.30, start: 0.000000, bitrate: 2088 kb/s
    Stream #2:0: Video: vp8, yuv420p, 1280x720, SAR 1:1 DAR 16:9, 10k fps, 25 tbr, 1k tbn, 1k tbc (default)
    Stream #2:1: Audio: vorbis, 48000 Hz, stereo, fltp (default)
    
por 22.01.2015 / 22:31