ffmpeg: ajoutez 3 secondes de noir à la tête et à la queue de la vidéo

11

Disons que j'ai une vidéo, qui peut avoir n'importe quelle dimension ou codec (par exemple mp4), et je veux ajouter 3 secondes d'images noires à sa tête.

J'ai vu d'autres variantes à cette question qui se rapportent à l'ajout d'une seule image, et aussi des réponses qui spécifient la largeur et la hauteur de la vidéo. Cependant, la vidéo peut avoir n'importe quelle largeur et hauteur et je ne veux pas modifier ces valeurs. Ajoutez simplement le noir. Dans une commande distincte, j'aimerais également ajouter les secondes de noir à la queue.

Il ne doit pas y avoir d'audio dans la section noire - le noir doit simplement être concaténé à l'avant et à l'extrémité. Aussi, j'aimerais éviter de ré-encoder la vidéo si possible, et copier le résultat dans un nouveau fichier.

Toute aide serait appréciée.

batmannutjob
la source
Le son est-il présent? Et voulez-vous ignorer le ré-encodage de la vidéo principale?
Gyan
@Mulvya merci pour votre contribution. J'ai mis à jour ma question.
Matt C
@MattC Vous pouvez supprimer le commentaire ci-dessus maintenant. Cela nécessitera plusieurs commandes, à moins que vous ne recodiez. Est-ce que ça va?
Gyan
@Mulvya oui, plusieurs commandes sont bonnes. Merci encore.
Matt C

Réponses:

12

La méthode de base pour joindre des vidéos sans ré-encodage est d'utiliser le démultiplexeur concat. Cet appareil nécessite que les fichiers joints partagent certaines propriétés, comme le codec, la fréquence d'images, les dimensions vidéo, la base de temps .. etc.

La première étape consiste à créer le segment vierge, qui peut être utilisé à la fois à la tête et à la queue.

ffmpeg -i fullvideo.mp4 -vf trim=0:3,geq=0:128:128 -af atrim=0:3,volume=0 -video_track_timescale 600 3sec.mp4

Vous devez effectuer une étape de comptabilité pour la vidéo complète. Sinon, la vidéo combinée s'exécutera probablement à la mauvaise vitesse.

ffmpeg -i fullvideo.mp4 -c copy -video_track_timescale 600 full600.mp4

Ensuite, créez un fichier texte.

file 3sec.mp4
file full600.mp4
file 3sec.mp4

Ensuite, exécutez

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

Ma première étape suppose que le flux vidéo a le format de pixel le plus courant yuv420p. Ce qui devrait être bien car c'est le seul format de pixel pris en charge par les lecteurs Web et les caméras de smartphones, les caméscopes grand public, etc. Si ce n'est pas le cas, le geqfiltre peut échouer.

Je suppose également, tacitement, que la vidéo complète n'utilise pas plus d'images de référence que celles produites par le préréglage mediumde x264. C'est une hypothèse sûre pour 95% des vidéos.

Enfin, je suppose que la vidéo complète a AAC-LC comme codec audio. Devrait être vrai pour la plupart des vidéos sur téléphone / cam / web.

Gyan
la source