Ok, puisque je ne peux pas trouver grand-chose sur l' melt
utilisation de la ligne de commande, voici quelques notes .. (et après cela, voir cette réponse Utiliser la substitution de processus pour tromper les programmes qui attendent des fichiers, avec des extensions spécifiques comme argument? - Unix & Linux Stack Exchange pour un script exemple via bash
)
Pour commencer - il y a un paquet Ubuntu / Debian pour melt
(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 melt
fait partie (mais aussi openshot
et kdenlive
). 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 BuildScripts .
Pour l'instant, le plus gros (seul) problème que j'ai avec cela, c'est que je ne trouve pas un moyen d'exporter une composition vidéo non compressée (soit sous forme d' png
images, soit sous un format vidéo non compressé).
Tout d'abord, en ligne de commande, melt
vous pouvez contrôler la lecture à travers des images; par exemple, pour "créer" un blanc long de 15 images et le visualiser avec le melt
lecteur intégré, utilisez
melt -blank 15
Lorsque vous visualisez avec melt
, vous obtiendrez également une information de ligne de commande stderr
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 la melt
lecture terminée, il ne se fermera pas - vous devez donc taper q
pour le quitter.
Il convient de noter qu'il existe des soi-disant «producteurs» et «consommateurs» en melt
. 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 qui melt
s'affiche, nous devons 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 libdv
consommateur sortira directement des données au format DV stdout
, donc pour enregistrer la vidéo dans un .dv
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 libdv
(j'ai utilisé vlc
comme 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 d'un .flv
fichier, le fichier .dv résultant s'ouvre et joue vlc
, mais est corrompu ).
Maintenant pour la partie édition ; essentiellement, vous pouvez spécifier une série de strophes nom de fichier / entrée / sortie directement sur la ligne de commande; dites que vous avez un fichier, video.avi
- 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 que video.avi
de sa trame 30 à sa trame 79 sera joué; puis un flan de 15 images; puis la video.avi
séquence de l'image 30 à l'image 79 à nouveau.
Pour utiliser des images (disons .png
) 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 test.png
, le in=
paramètre n'a pas besoin d'être 0 - cependant, l'image sera affichée pendant out
- in
temps; dans ce cas, il serait plus simple de laisser tout simplement le in=0
paramètre complètement.
La bonne chose est que cette séquence d'édition peut être enregistrée - ou comme l' melt
appelle, sérialisée - dans un fichier; notez qu'il existe deux manières de procéder à 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 -serialise [filename]
commutateur à 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 file.melt
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 "commentant" - si j'essaye d'ajouter une # comment
ligne " ", il se melt
plaint de: " Impossible de charger" # commentaire " '(mais à part cela, il semble que une ligne est ignorée et la lecture continue quand même). " .melt
" semble être une extension qui melt
reconnaît comme un simple fichier sérialisé.
Maintenant, pour rejouer ce fichier sérialisé, nous pourrions en principe simplement appeler melt file.melt
- cependant, une ligne de commande plus complète serait:
melt melt_file:file.melt -consumer sdl
... ce qui signifierait: utiliser le melt_file
"producteur" pour ouvrir file.melt
et rendre ses cadres sur le "consommateur" sdl
(fenêtre).
Notez que j'ai l'expérience, que (disons) les .flv
vidéos sont lues sans problème sur la ligne de commande - cependant, provoquent une erreur de segmentation lorsqu'elles sont spécifiées dans le file.melt
fichier sérialisé! .dv
les vidéos produites par elles- melt
mêmes semblent bien fonctionner en file.melt
...
Le type XML de sérialisation peut être obtenu en utilisant le -consumer xml:
commutateur ( au lieu de-serialise
) - 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 "lire" le file.mlt
fichier XML nouvellement généré , on peut maintenant le faire directement melt file.mlt
- ou, une ligne de commande plus complète serait:
melt xml:file.mlt -consumer sdl
... ce qui signifierait: utiliser le xml
"producteur" ( notez, auparavant c'était un consommateur ) pour ouvrir file.mlt
, et rendre ses frames sur le "consommateur" sdl
(fenêtre).
Notez que dans ce cas, j'ai expérimenté que les mêmes .flv
vidéos qui ont causé 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 file.mlt
fichier XML résultant 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>