Comment insérer une image d'arrière-plan sur un effet audio de spectre à l'aide de ffmpeg?

1

Sur la base de cette belle réponse, en utilisant ffmpeg, je génère un ahistogramme à partir d’un fichier audio avec cette ligne de commande:

ffmpeg -i input.flac -filter_complex \
"[0:a]ahistogram,format=yuv420p[v]" \
-map "[v]" -map 0:a output.mp4

ahistogramme

J'ai beaucoup cherché sur Internet, mais je ne le trouve pas. Est-il possible de définir une image en arrière-plan pour cet effet de spectre?

METTRE À JOUR

J'ai essayé cette commande:

ffmpeg -i /var/www/html/bg.jpg -i input.mp3 -filter_complex \
"[1:a]ahistogram=s=640x360:slide=scroll,colorkey=color=black:similarity=0.2[fg]; \
 [0:v][fg]overlay=shortest=1, format=yuv420p,scale=1280:-2[v]" \
-map "[v]" -map 1:a -c:a copy -shortest output.mp4

Mais la vitesse de conversion est ridicule lente.

Vérifiez le journal complet ici:

ffmpeg version git-2017-01-22-f1214ad Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
  configuration: --extra-libs=-ldl --prefix=/opt/ffmpeg --mandir=/usr/share/man --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-decoder=amrwb --enable-libpulse --enable-libfreetype --enable-gnutls --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libvorbis --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr --enable-libxvid --enable-libvidstab --enable-libwavpack --enable-nvenc
  libavutil      55. 44.100 / 55. 44.100
  libavcodec     57. 75.100 / 57. 75.100
  libavformat    57. 63.100 / 57. 63.100
  libavdevice    57.  2.100 / 57.  2.100
  libavfilter     6. 69.100 /  6. 69.100
  libavresample   3.  2.  0 /  3.  2.  0
  libswscale      4.  3.101 /  4.  3.101
  libswresample   2.  4.100 /  2.  4.100
  libpostproc    54.  2.100 / 54.  2.100
Input #0, image2, from 'bg.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 8257 kb/s
    Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 700x457 [SAR 1:1 DAR 700:457], 25 tbr, 25 tbn, 25 tbc
Input #1, mp3, from 'output2.mp3':
  Metadata:
    encoder         : Lavf57.46.100
  Duration: 00:00:21.84, start: 0.050113, bitrate: 32 kb/s
    Stream #1:0: Audio: mp3, 22050 Hz, mono, s16p, 32 kb/s
File 'output.mp4' already exists. Overwrite ? [y/N] y
[swscaler @ 0x3ae8e60] deprecated pixel format used, make sure you did set range correctly
[libx264 @ 0x3a5f7a0] using SAR=2438/2437
[libx264 @ 0x3a5f7a0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 0x3a5f7a0] profile High, level 3.2
[libx264 @ 0x3a5f7a0] 264 - core 148 r2762 90a61ec - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=1 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'output.mp4':
  Metadata:
    encoder         : Lavf57.63.100
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 1280x836 [SAR 7315:7312 DAR 700:457], q=-1--1, 25 fps, 12800 tbn, 25 tbc (default)
    Metadata:
      encoder         : Lavc57.75.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
    Stream #0:1: Audio: mp3 (i[0][0][0] / 0x0069), 22050 Hz, mono, s16p, 32 kb/s
Stream mapping:
  Stream #0:0 (mjpeg) -> overlay:main
  Stream #1:0 (mp3) -> ahistogram
  scale -> Stream #0:0 (libx264)
  Stream #1:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=    1 fps=0.1 q=28.0 Lsize=      18kB time=00:00:00.08 bitrate=1841.1kbits/s speed=0.0112x
NineCattoRules
la source
1
Utilisez cette réponse avec votre filtre.
Gyan
@Mulvya je l'ai déjà essayé ... mais comment? Cela ne fonctionne passudo ffmpeg -r 1 -loop 1 -i bg.jpg -i input.mp3 -filter_complex "[0:a]showwaves=s=1920x1080:mode=line,format=yuv420p[v]" -map "[v]" -map 0:a -c:v libx264 -c:a copy output.mp4
NineCattoRules
@Mulvya question mise à jour
NineCattoRules

Réponses:

2

La sortie de l’ anistogramme contient un canal alpha, mais elle n’affecte que la partie supérieure. Par conséquent, si vous souhaitez également supprimer le noir du sonagramme, vous devez utiliser un filtre de codage tel que colorkey :

entrez la description de l'image ici

ffmpeg -loop 1 -i background.jpg -i audio.mp3 -filter_complex \
"[1:a]ahistogram=s=700x458:slide=scroll,colorkey=color=black:similarity=0.2[fg]; \
 [0:v]scale=iw:-2[bg]; \
 [bg][fg]overlay,format=yuv420p[v]" \
-map "[v]" -map 1:a -shortest output.mp4

Votre entrée est 700x457, mais chaque dimension doit être régulière. Un filtre d'échelle est ajouté pour la rendre 700x458. ahistogram est également défini pour correspondre à cette taille, mais il peut s'agir d'une taille quelconque.

llogan
la source
J'ai un problème, height not divisible by 2 (700x457)... J'ai essayé de le modifier à la fin -shortest scale=1280:-2 output.mp4sans succès
NineCattoRules
1
Terminez le filter_complex comme ceci:format=yuv420p,scale=1280:-2[v]
Gyan
@Mulvya j'ai essayé mais ... ça commence et ne fait rien, la vitesse est inférieure à la vitesse = 0.0197x et j'obtiens cecideprecated pixel format used, make sure you did set range correctly
NineCattoRules
1
Affiche la commande complète et la sortie de la console.
Gyan
1
@NineCattoRules J'ai ajusté la réponse en fonction de vos entrées.
llogan