GNU/Linux >> Tutoriels Linux >  >> Linux

Montage vidéo en ligne de commande sous Linux (couper, joindre et prévisualiser)

Ok, puisque je ne trouve pas grand-chose sur 05 utilisation de la ligne de commande, voici quelques notes. code> )

Pour commencer - il existe un paquet Ubuntu/Debian pour 23 (J'ai Ubuntu 11.04 avec MLT melt 0.6.2); le lien donné par @Ielton est pour le wiki "Media Lovin' Toolkit" (MLT), qui 38 fait partie de (mais aussi 45 et 55 ). Voici le lien vers les fichiers texte de documentation de leur git :mltframework.org/mlt.git/tree - docs/; notez que le wiki a une page sur les BuildScripts.

Pour l'instant, le plus gros (seul) problème que j'ai avec, c'est que je n'arrive pas à trouver un moyen d'exporter une composition vidéo non compressée (soit en 64 images, ou un format vidéo non compressé).

Tout d'abord, en ligne de commande 77 vous pouvez contrôler la lecture à travers les images ; par exemple, pour "créer" un blanc blanc de 15 images de long et l'afficher avec le 87 intégré lecteur, utilisez

melt -blank 15

Lorsque vous affichez avec 91 , vous obtiendrez également une information de ligne de commande à 105 pour le lecteur intégré :

$ melt -blank 15 
+-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+
|1=-10| |2= -5| |3= -2| |4= -1| |5=  0| |6=  1| |7=  2| |8=  5| |9= 10|
+-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+
+---------------------------------------------------------------------+
|               H = back 1 minute,  L = forward 1 minute              |
|                 h = previous frame,  l = next frame                 |
|           g = start of clip, j = next clip, k = previous clip       |
|                0 = restart, q = quit, space = play                  |
+---------------------------------------------------------------------+
Current Position:         15

Une fois 110 est terminé, il ne se fermera pas - vous devez donc taper 121 pour en sortir.

Il convient de noter qu'il existe des "producteurs" et des "consommateurs" dans 130 . Si rien n'est spécifié, le "consommateur" par défaut est une fenêtre SDL (Simple DirectMedia Layer) lisant la vidéo ; donc la commande ci-dessus est la même que :

melt -blank 15 -consumer sdl

Ainsi, si nous voulons enregistrer ce que 143 affiche, nous devrions changer le consommateur en quelque chose qui prendra en charge un format de fichier. Pour obtenir une liste de consommateurs :

$ melt -query "consumers"
---
consumers:
  - sdl
  - sdl_audio
  - sdl_preview
  - sdl_still
  - gtk2_preview
  - avformat
  - libdv
  - xml
  - decklink
  - null
...

Le 153 le consommateur sortira les données au format DV directement vers 166 , donc pour enregistrer la vidéo dans un 170 fichier que vous feriez :

melt -blank 15 -consumer libdv > test.dv

Notez que parmi les consommateurs répertoriés, le seul format que j'ai essayé, qui peut également être ouvert dans une autre application est 181 (J'ai utilisé 192 comme une autre application); cependant, cela peut échouer pour un autre type de transcodage (par exemple, si au lieu d'un blanc, j'essaie de convertir un extrait à partir d'un 204 fichier, le fichier .dv résultant s'ouvre et joue en 213 , mais est corrompu ).

Passons maintenant au montage partie; essentiellement, vous pouvez spécifier une série de file-name /in/out strophes directement sur la ligne de commande ; disons que vous avez un fichier, 229 - alors vous pourriez faire :

melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79

ou légèrement mieux formaté :

melt \ 
video.avi in=30 out=79 \ 
-blank 15 \
video.avi in=30 out=79

Cela signifie 232 de son cadre 30 à son cadre 79 sera joué ; puis un blanc de 15 images ; puis le 246 séquence de l'image 30 à l'image 79 à nouveau.

Pour utiliser des images (par exemple, 259 ) dans une composition de montage vidéo :

melt \
video.avi in=30 out=79 \
test.png in=0 out=15 \
video.avi in=30 out=79 \
-blank 15

Notez que pour 263 , 272 le paramètre n'a pas besoin d'être 0 - cependant, l'image sera affichée pendant 280 -296 temps; dans ce cas, le plus simple serait de simplement laisser le 308 paramètre complètement.

La bonne chose est que cette séquence d'édition peut être enregistrée - ou en tant que 318 l'appelle, sérialisé - à un dossier; notez qu'il y en a deux moyens d'une telle sérialisation :"simple" ou XML. Par exemple, pour enregistrer la commande ci-dessus en tant que fichier sérialisé "simple", nous pouvons simplement ajouter le 328 passer à la commande :

$ melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -serialise file.melt 
Project saved as file.melt.

Maintenant le 339 contient :

video.avi
in=30
out=79
-blank
15
video.avi
in=30
out=79

Apparemment, ce format de fichier sérialisé "simple" ne contient pas de caractère "commentaire" - si j'essaie d'ajouter un "346 " ligne, 354 se plaint avec :'Échec du chargement de "# commentaire" ' (mais à part cela, il semble qu'une telle ligne soit ignorée et la lecture continue quand même). "366 " semble être une extension qui 372 reconnaît comme simple fichier sérialisé.

Maintenant, pour rejouer ce fichier sérialisé, nous pourrions en principe simplement appeler 384 - cependant, une ligne de commande plus complète serait :

melt melt_file:file.melt -consumer sdl

... ce qui signifierait :utilisez le 394 "producteur" pour ouvrir 407 , et rend ses images sur le "consommateur" 418 (la fenêtre).

Notez que j'ai l'expérience, que (disons) 428 les vidéos se lisent sans problème sur la ligne de commande - provoquent cependant un défaut de segmentation lorsqu'elles sont spécifiées dans le 437 fichier sérialisé ! 441 vidéos produites par 454 lui-même, semble bien fonctionner en 463 ...

Le type de sérialisation XML peut être réalisé en utilisant le 470 switch (au lieu de 486 ) - donc l'exemple ci-dessus serait maintenant :

melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -consumer xml:file.mlt

Pour "rejouer" le 497 nouvellement généré Fichier XML, on peut maintenant faire directement 501 - ou, une ligne de commande plus complète serait :

melt xml:file.mlt -consumer sdl

... ce qui signifierait :utilisez le 516 "producteur" (remarque, c'était auparavant un consommateur ) pour ouvrir 527 , et rend ses images sur le "consommateur" 530 (la fenêtre).

Notez que dans ce cas, j'ai rencontré le même 542 vidéos qui ont provoqué une erreur de segmentation avec un simple fichier de sérialisation - fonctionnent très bien avec un fichier de sérialisation XML !

Dans ce cas, le résultat 556 Le fichier XML a beaucoup plus de paramètres, tels que la résolution, la fréquence d'images, les informations de codec, etc. - mais il est également plus difficile de travailler directement dans un éditeur de texte :

<?xml version="1.0" encoding="utf-8"?>
<mlt root="/path/to" title="video.avi">
  <profile description="automatic" width="320" height="240" progressive="1" sample_aspect_num="1" sample_aspect_den="1" display_aspect_num="320" display_aspect_den="240" frame_rate_num="25" frame_rate_den="1" colorspace="601"/>
  <producer id="producer0" in="30" out="79">
    <property name="mlt_type">producer</property>
    <property name="aspect_ratio">1.000000</property>
    <property name="length">125</property>
    <property name="eof">pause</property>
    <property name="resource">video.avi</property>
    <property name="meta.media.nb_streams">2</property>
    <property name="meta.media.0.stream.type">video</property>
    <property name="meta.media.0.stream.frame_rate">25.000000</property>
    <property name="meta.media.0.stream.sample_aspect_ratio">0.000000</property>
    <property name="meta.media.0.codec.frame_rate">25.000000</property>
    <property name="meta.media.0.codec.pix_fmt">yuv420p</property>
    <property name="meta.media.0.codec.sample_aspect_ratio">1.000000</property>
    <property name="meta.media.0.codec.colorspace">601</property>
    <property name="meta.media.0.codec.name">mpeg4</property>
    <property name="meta.media.0.codec.long_name">MPEG-4 part 2</property>
    <property name="meta.media.0.codec.bit_rate">0</property>
    <property name="meta.media.1.stream.type">audio</property>
    <property name="meta.media.1.codec.sample_fmt">s16</property>
    <property name="meta.media.1.codec.sample_rate">22050</property>
    <property name="meta.media.1.codec.channels">1</property>
    <property name="meta.media.1.codec.name">mp2</property>
    <property name="meta.media.1.codec.long_name">MP2 (MPEG audio layer 2)</property>
    <property name="meta.media.1.codec.bit_rate">64000</property>
    <property name="seekable">1</property>
    <property name="meta.media.sample_aspect_num">1</property>
    <property name="meta.media.sample_aspect_den">1</property>
    <property name="meta.attr.title.markup"></property>
    <property name="meta.attr.author.markup"></property>
    <property name="meta.attr.copyright.markup"></property>
    <property name="meta.attr.comment.markup"></property>
    <property name="meta.attr.album.markup"></property>
    <property name="audio_index">1</property>
    <property name="video_index">0</property>
    <property name="mlt_service">avformat</property>
  </producer>
  <producer id="producer1" in="30" out="79">
    <property name="mlt_type">producer</property>
    <property name="aspect_ratio">1.000000</property>
    <property name="length">125</property>
    <property name="eof">pause</property>
    <property name="resource">video.avi</property>
    <property name="meta.media.nb_streams">2</property>
    <property name="meta.media.0.stream.type">video</property>
    <property name="meta.media.0.stream.frame_rate">25.000000</property>
    <property name="meta.media.0.stream.sample_aspect_ratio">0.000000</property>
    <property name="meta.media.0.codec.frame_rate">25.000000</property>
    <property name="meta.media.0.codec.pix_fmt">yuv420p</property>
    <property name="meta.media.0.codec.sample_aspect_ratio">1.000000</property>
    <property name="meta.media.0.codec.colorspace">601</property>
    <property name="meta.media.0.codec.name">mpeg4</property>
    <property name="meta.media.0.codec.long_name">MPEG-4 part 2</property>
    <property name="meta.media.0.codec.bit_rate">0</property>
    <property name="meta.media.1.stream.type">audio</property>
    <property name="meta.media.1.codec.sample_fmt">s16</property>
    <property name="meta.media.1.codec.sample_rate">22050</property>
    <property name="meta.media.1.codec.channels">1</property>
    <property name="meta.media.1.codec.name">mp2</property>
    <property name="meta.media.1.codec.long_name">MP2 (MPEG audio layer 2)</property>
    <property name="meta.media.1.codec.bit_rate">64000</property>
    <property name="seekable">1</property>
    <property name="meta.media.sample_aspect_num">1</property>
    <property name="meta.media.sample_aspect_den">1</property>
    <property name="meta.attr.title.markup"></property>
    <property name="meta.attr.author.markup"></property>
    <property name="meta.attr.copyright.markup"></property>
    <property name="meta.attr.comment.markup"></property>
    <property name="meta.attr.album.markup"></property>
    <property name="audio_index">1</property>
    <property name="video_index">0</property>
    <property name="mlt_service">avformat</property>
  </producer>
  <playlist id="playlist0">
    <entry producer="producer0" in="0" out="49"/>
    <blank length="16"/>
    <entry producer="producer1" in="0" out="49"/>
  </playlist>
  <tractor id="tractor0" title="video.avi" global_feed="1" in="0" out="115">
    <track producer="playlist0"/>
  </tractor>
</mlt>

Oui il y a. Essayez d'utiliser l'application appelée "Melt". Voir la documentation ici.

Si vous utilisez une distribution dérivée de Debian :

apt-get install melt

La solution ffmpeg à ce problème ressemble à ceci :

mkfifo temp1 temp2 temp3
ffmpeg -i input.wmv -ss 30 -to 60 -c copy output.wmv temp1 2> /dev/null & \
ffmpeg -i input2.wmv -t 60 -c copy temp2 2> /dev/null & \
ffmpeg -i input3.wmv -i image.png -filter_complex "[0:v][1:v] \
overlay=25:25:enable='between(t,0,20)'" -pix_fmt yuv420p -c:a copy temp3 2> /dev/null & \
ffmpeg -f mpegts -i "concat:temp1|temp2|temp3" -c copy output.mp4

Il utilise des canaux nommés, il n'y a donc pas de création de fichiers temporaires sur le disque et vous permet de découper des morceaux de clips vidéo et d'ajouter des images.

Cet exemple utilise le temps 30-60 de la première entrée, puis ajoute la première minute de la deuxième entrée, puis insère un fichier image, puis la troisième vidéo entière.

Code extrait de :

Page de concaténation ffmpeg :https://trac.ffmpeg.org/wiki/Concatenate

page superutilisateur Utilisation de ffmpeg pour découper la vidéo

page super-utilisateur https://video.stackexchange.com/questions/12105/add-an-image-in-front-of-video-using-ffmpeg


Linux
  1. Convertisseurs vidéo open source pour Linux [GUI et CLI]

  2. Couper / Grep Et Df -h ?

  3. Historique de la ligne de commande sous Linux

  4. 4 Utilisation essentielle et pratique de la commande Cut sous Linux

  5. Cinelerra GG Infinity - Un logiciel de montage vidéo gratuit pour Linux

Meilleurs convertisseurs vidéo gratuits pour Linux [GUI, CLI et en ligne]

50 commandes de coupe Linux simples et utiles sous Unix avec des exemples

Les 20 meilleurs logiciels et outils de vidéoconférence Linux

OpenShot :un éditeur vidéo simple et puissant pour Linux

15 meilleurs logiciels de montage vidéo pour le système Linux

Quelles applications de montage vidéo sont disponibles sous Linux ?