2 votes

Concaténation d'une image avec une vidéo avec ffmpeg

J'ai une vidéo qui est téléchargée avec youtube-dl . Je veux créer une vidéo à partir d'une image et de la vidéo téléchargée, en utilisant ffmpeg et la fonction de boucle.

./ffmpeg -f concat -safe 0 -i list.txt -c copy merged.mp4

L'intérieur de mon fichier list.txt est

file word_img.jpg
file youtube_video.mp4

L'exécution de la commande en bas de page crée une nouvelle vidéo. C'est juste que c'est exactement la même chose que la vidéo Youtube. L'autre image n'est jamais ajoutée. Cela pourrait-il avoir un rapport avec l'encodage ?

J'ai également essayé une autre approche qui ressemblait à ceci.

./ffmpeg -t 125 -async 1 -i youtube_video.mp4\
   -t 5 -i word_img.jpg \
   -filter_complex "[0]loop=149:1:0[bgheld5]; \
                    [1]loop=149:1:0[fgheld5]; \
                    [bgheld5][fgheld5]overlay=eof_action=pass" out.mp4

Ça marche en quelque sorte. Il y a une image statique qui s'affiche pendant 5 secondes, puis la vidéo youtube de 30 secondes est diffusée. Le problème est que l'audio et la vidéo de la vidéo youtube sont désynchronisés d'environ 5 secondes.

Running ./ffmpeg -i img.jpg donne les résultats suivants

Input #0, image2, from 'img.jpg':
Duration: 00:00:00.04, start: 0.000000, bitrate: 1258 kb/s
Stream #0:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 640x356 [SAR 96:96 DAR 160:89], 25 tbr, 25 tbn, 25 tbc

Running ./ffmpeg -i video.mp4 donne les résultats suivants

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
Metadata:
major_brand     : isom
minor_version   : 512
compatible_brands: isomiso2avc1mp41
encoder         : Lavf58.26.101
Duration: 00:02:00.04, start: 0.000000, bitrate: 575 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x356 [SAR 1:1 DAR 160:89], 440 kb/s, 24.98 fps, 24.98 tbr, 25k tbn, 49.95 tbc (default)
Metadata:
  handler_name    : ISO Media file produced by Google Inc. Created on: 
10/28/2018.
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
  handler_name    : ISO Media file produced by Google Inc. Created on: 10/28/2018

3voto

slhck Points 209720

Je suppose que vous avez un fichier image statique et une vidéo que vous souhaitez concaténer. L'image doit être affichée pendant cinq secondes sans audio ; la vidéo doit suivre.

Vous pouvez tout exécuter en une seule commande avec :

ffmpeg \
  -loop 1 -framerate 24 -t 5 -i image.png \
  -f lavfi -t 1 -i anullsrc \
  -i video.mp4 \
  -filter_complex " \
    [2:v]scale=320:240,setsar=sar=1[video]; \
    [0:v][1:a][video][2:a]concat=n=2:v=1:a=1 \
  " output.mp4

Ce qu'il fait :

  • Spécifier l'image comme entrée 0 en le mettant en boucle jusqu'à une durée de 5 s à 24 fps.
  • Spécifier l'audio silencieux comme deuxième entrée 1 qui est nécessaire pour la concaténation
  • Spécifier la vidéo comme troisième entrée 2
  • Mettez la vidéo à la même taille que l'image (mais vous pouvez bien sûr aussi mettre l'image à l'échelle il suffit de permuter les identifiants d'entrée). 2:v a 1:v et renommer l'étiquette video )
  • Définissez le rapport d'aspect de l'échantillon à 1 (il s'agit d'une solution rapide pour les différents SAR ; vous devrez peut-être être plus explicite, comme indiqué ci-dessous). aquí )
  • Concaténation du logo + audio silencieux avec la vidéo.

Vous pouvez également utiliser le scale2ref filtre (autre exemple aquí ) pour adapter le logo à la vidéo :

-filter_complex " \
  [0:v][2:v]scale2ref[logo][video]; \
  [logo]setsar=sar=1[logo];  \
  [logo][1:a][video][2:a]concat=n=2:v=1:a=1 \
"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X