Хорошо, так как я не могу найти много информации об melt
использовании командной строки, вот некоторые примечания .. (и после этого посмотрите этот ответ. Использование подстановки процессов для обмана программ, ожидающих файлы, с конкретными расширениями в качестве аргумента? - Unix & Linux Stack Exchange для скрипта пример через bash
)
Для начала - есть пакет Ubuntu / Debian для melt
(у меня Ubuntu 11.04 с MLT melt 0.6.2); ссылка, предоставленная @Ielton, предназначена для «Media Lovin '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
Чтобы «воспроизвести» недавно сгенерированный file.mlt
XML-файл, теперь можно сделать напрямую melt file.mlt
- или, более полная командная строка будет:
melt xml:file.mlt -consumer sdl
... что означало бы: использовать xml
«продюсер» ( обратите внимание, ранее он был потребителем ), чтобы открыть file.mlt
, и отобразить его фреймы в «потребителе» sdl
(окне).
Обратите внимание, что в этом случае я наблюдал, что те же самые .flv
видео, которые вызвали segfault с простым файлом сериализации - прекрасно работают с файлом XML сериализации!
В этом случае полученный file.mlt
XML-файл имеет намного больше настроек, таких как разрешение, частота кадров, информация о кодеках и т. Д., Но с ним также сложнее работать напрямую в текстовом редакторе:
<?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>