Хорошо, так как я не могу найти много информации об использовании командной строки melt
, вот некоторые заметки ... (и после этого посмотрите этот ответ. Использование подстановки процессов для обмана программ, ожидающих файлы с конкретными расширениями в качестве аргумента? - Unix & Linux Stack Exchange для пример скрипта через bash
)
Для начала - есть пакет Ubuntu/Debian для melt
(у меня Ubuntu 11.04 с MLT melt 0.6.2); ссылка, предоставленная @Ielton, предназначена для вики MediaLovin 'Toolkit (MLT), частью которого является melt
(но также openshot
и kdenlive
). Вот ссылка на текстовые файлы документации из их git: mltframework.org/mlt.git/tree - docs/ ; обратите внимание, что в вики есть страница о BuildScripts.
На данный момент самая большая (единственная) проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти способ экспортировать несжатую композицию видео (либо в виде png
кадров, либо в некоторый несжатый видеоформат).
Во-первых, в командной строке melt
вы можете управлять воспроизведением через кадры; например, чтобы "создать" длинную белую заготовку в 15 кадров и просмотреть ее с помощью встроенного проигрывателя melt
, используйте
melt -blank 15
Когда вы просматриваете с melt
, вы также получите информацию о командной строке для stderr
для встроенного проигрывателя:
$ 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
После того, как melt
сделано воспроизведение, это не выход - так что вы должны ввести q
, чтобы выйти из нее.
Следует отметить, что в melt
присутствуют так называемые "производители" и "потребители". Если ничего не указано, то "потребителем" по умолчанию является окно SDL (Simple DirectMedia Layer), воспроизводящее видео; поэтому приведенная выше команда такая же как:
melt -blank 15 -consumer sdl
Таким образом, если мы хотим сохранить то, что отображает melt
, мы должны изменить потребителя на что-то, что будет поддерживать формат файла. Чтобы получить список потребителей:
$ melt -query "consumers"
---
consumers:
- sdl
- sdl_audio
- sdl_preview
- sdl_still
- gtk2_preview
- avformat
- libdv
- xml
- decklink
- null
...
Потребитель libdv
будет выводить данные в формате DV непосредственно в stdout
, поэтому для сохранения видео в файл .dv
вы должны сделать следующее:
melt -blank 15 -consumer libdv > test.dv
Обратите внимание, что из перечисленных потребителей единственным форматом, который я пробовал, который также можно открыть в другом приложении, является libdv
(я использовал vlc
качестве другого приложения); однако это может не работать для транскодирования другого типа (например, если вместо пустого я пытаюсь преобразовать фрагмент из файла .flv
, полученный файл .dv открывается и воспроизводится в vlc
, но поврежден).
Теперь для редактирования части; по сути, вы можете указать ряд разделов file-name/in/out прямо в командной строке; скажем, у вас есть файл video.avi
- тогда вы можете сделать:
melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79
или чуть лучше отформатирован:
melt \
video.avi in=30 out=79 \
-blank 15 \
video.avi in=30 out=79
Это означает, что video.avi
от его кадра 30 до его кадра 79 будет воспроизводиться; затем 15-кадровый бланк; и затем последовательность video.avi
от кадра 30 до кадра 79 снова.
Чтобы использовать изображения (скажем, .png
) в композиции для редактирования видео:
melt \
video.avi in=30 out=79 \
test.png in=0 out=15 \
video.avi in=30 out=79 \
-blank 15
Обратите внимание , что для test.png
in=
параметр не должен быть 0 - однако, изображение будет отображаться для out
- in
время; в этом случае проще всего вообще не указывать параметр in=0
.
Хорошо, что эту последовательность редактирования можно сохранить - или, как ее называет melt
, сериализовать - в файл; Обратите внимание, что существует два способа такой сериализации: "простой" или XML. Например, чтобы сохранить указанную выше команду как "простой" сериализованный файл, мы можем просто добавить в команду -serialise [filename]
:
$ melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -serialise file.melt
Project saved as file.melt.
Теперь file.melt
содержит:
video.avi
in=30
out=79
-blank
15
video.avi
in=30
out=79
По-видимому, этот "простой" сериализованный формат файла не содержит символа "комментирования" - если я пытаюсь добавить строку « # comment
», melt
жалуется: « Не удалось загрузить« # comment » » (но кроме этого, кажется, что такая строка игнорируется, и воспроизведение продолжается в любом случае). « .melt
» - это расширение, которое melt
распознает как простой сериализованный файл.
Теперь, чтобы повторно воспроизвести этот сериализованный файл, мы могли бы в принципе просто вызвать melt file.melt
- однако, более полная командная строка была бы:
melt melt_file:file.melt -consumer sdl
... что означало бы: используйте melt_file
"продюсер", чтобы открыть file.melt
, и визуализировать его фреймы в "потребительском" sdl
(окне).
Обратите внимание, что у меня есть опыт, что (скажем) .flv
видео воспроизводятся без проблем в командной строке - однако, вызывают ошибку сегментации, когда они указаны в сериализованном файле file.melt
! .dv
видео, созданные самим melt
, похоже, отлично работают в file.melt
...
XML-тип сериализации может быть достигнут с помощью параметра -consumer xml:
(вместо -serialise
), поэтому приведенный выше пример теперь будет выглядеть так:
melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -consumer xml:file.mlt
Чтобы "воспроизвести" только что созданный XML-файл file.mlt
, теперь можно напрямую melt file.mlt
- или более полная командная строка будет выглядеть так:
melt xml:file.mlt -consumer sdl
... что означало бы: используйте xml
"продюсер" (заметьте, ранее он был потребителем), чтобы открыть file.mlt
и отобразить его фреймы в "потребительском" sdl
(окне).
Обратите внимание, что в этом случае я обнаружил, что те же самые видео .flv
которые вызвали segfault с простым файлом сериализации - прекрасно работают с файлом сериализации XML!
В этом случае полученный XML-файл file.mlt
имеет гораздо больше настроек, таких как разрешение, частота кадров, информация о кодеках и т.д., Но с ним также сложнее работать напрямую в текстовом редакторе:
<?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>