Ok, vì tôi không thể tìm thấy nhiều về melt
sử dụng dòng lệnh, đây là một số lưu ý .. (và sau này, hãy xem câu trả lời này Sử dụng thay thế quy trình để lừa các chương trình mong đợi các tệp, với các phần mở rộng cụ thể làm đối số? - Unix & amp; Trao đổi ngăn xếp Linux cho một ví dụ về kịch bản thông qua bash
)
Để bắt đầu - có gói Ubuntu / Debian cho melt
(Tôi có Ubuntu 11.04 với MLT tan chảy 0.6.2); liên kết được đưa ra bởi @Ielton dành cho Wiki "Media Lovin 'Toolkit" (MLT), trong đó melt
là một phần của (nhưng cũng openshot
và kdenlive
). Đây là liên kết đến các tệp văn bản tài liệu từ git của họ: mltframework.org/mlt.git/tree - docs / ; lưu ý wiki có một trang về BuildScripts .
Hiện tại, vấn đề lớn nhất (duy nhất) mà tôi gặp phải với nó là tôi không thể tìm ra cách xuất một bố cục video không nén (như là png
khung hoặc một số định dạng video không nén).
Đầu tiên, trong dòng lệnh melt
bạn có thể điều khiển phát lại thông qua các khung; chẳng hạn, để "tạo" một khoảng trắng dài 15 khung và xem nó với tích hợp melt
người chơi, sử dụng
melt -blank 15
Khi bạn xem với melt
, bạn cũng sẽ nhận được thông tin dòng lệnh để stderr
cho người chơi tích hợp:
$ 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
Một lần melt
đã phát xong, nó sẽ không thoát - vì vậy bạn nên gõ q
để thoát khỏi nó
Chúng ta nên lưu ý có cái gọi là "nhà sản xuất" và "người tiêu dùng" trong melt
. Nếu không có gì được chỉ định, thì "người tiêu dùng" mặc định là một SDL (Lớp DirectMedia đơn giản) cửa sổ phát lại video; vì vậy lệnh trên giống như:
melt -blank 15 -consumer sdl
Vì vậy, nếu chúng ta muốn tiết kiệm những gì melt
hiển thị, chúng ta nên thay đổi người tiêu dùng thành một cái gì đó sẽ hỗ trợ định dạng tệp. Để có được danh sách người tiêu dùng:
$ melt -query "consumers"
---
consumers:
- sdl
- sdl_audio
- sdl_preview
- sdl_still
- gtk2_preview
- avformat
- libdv
- xml
- decklink
- null
...
Các libdv
người tiêu dùng sẽ xuất dữ liệu định dạng DV trực tiếp sang stdout
, để lưu video vào .dv
tập tin bạn làm:
melt -blank 15 -consumer libdv > test.dv
Lưu ý rằng từ những người tiêu dùng được liệt kê, định dạng duy nhất tôi đã thử, cũng có thể được mở trong một ứng dụng khác là libdv
(Tôi đã sử dụng vlc
như một ứng dụng khác); tuy nhiên, điều này có thể thất bại đối với một loại chuyển mã khác ( ví dụ. nếu thay vì để trống, tôi cố gắng chuyển đổi một đoạn từ một .flv
tệp, tệp .dv kết quả sẽ mở và phát trong vlc
, nhưng bị hỏng ).
Bây giờ cho chỉnh sửa phần; về cơ bản, bạn có thể chỉ định một loạt tên tập tin / in / out stanzas trực tiếp trên dòng lệnh; nói rằng bạn có một tập tin, video.avi
- sau đó bạn có thể làm:
melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79
hoặc định dạng tốt hơn một chút:
melt \
video.avi in=30 out=79 \
-blank 15 \
video.avi in=30 out=79
Điều này có nghĩa là video.avi
từ khung 30 đến khung 79 sẽ được phát; sau đó trống 15 khung; và sau đó video.avi
trình tự từ khung 30 đến khung 79 một lần nữa.
Để sử dụng hình ảnh (giả sử, .png
) trong một thành phần chỉnh sửa video:
melt \
video.avi in=30 out=79 \
test.png in=0 out=15 \
video.avi in=30 out=79 \
-blank 15
Lưu ý rằng cho test.png
, in=
tham số không cần bằng 0 - tuy nhiên, hình ảnh sẽ được hiển thị cho out
- in
thời gian; trong trường hợp này, đơn giản là để lại in=0
tham số ra hoàn toàn.
Điều tốt là trình tự chỉnh sửa này có thể được lưu - hoặc như melt
gọi nó là nối tiếp - vào một tập tin; lưu ý có hai các cách tuần tự hóa như vậy: "đơn giản" hoặc XML. Ví dụ, để lưu lệnh trên dưới dạng tệp tuần tự "đơn giản", chúng ta chỉ cần thêm -serialise [filename]
chuyển sang lệnh:
$ melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -serialise file.melt
Project saved as file.melt.
Bây giờ file.melt
chứa đựng:
video.avi
in=30
out=79
-blank
15
video.avi
in=30
out=79
Dường như, định dạng tệp tuần tự "đơn giản" này không chứa ký tự "nhận xét" - nếu tôi cố thêm # comment
" hàng, melt
phàn nàn với: ' Không thể tải "# bình luận" '(nhưng ngoài ra, dường như một dòng như vậy bị bỏ qua và phát lại vẫn tiếp tục). " .melt
"dường như là một phần mở rộng melt
công nhận là tập tin tuần tự đơn giản.
Bây giờ, để phát lại tập tin tuần tự này, về nguyên tắc chúng ta có thể gọi melt file.melt
- tuy nhiên, một dòng lệnh đầy đủ hơn sẽ là:
melt melt_file:file.melt -consumer sdl
... có nghĩa là: sử dụng melt_file
"nhà sản xuất" để mở file.melt
và hiển thị các khung của nó trên "người tiêu dùng" sdl
(cửa sổ).
Lưu ý rằng tôi có kinh nghiệm, rằng (nói) .flv
video phát không có vấn đề trên dòng lệnh - tuy nhiên, gây ra lỗi phân đoạn khi chúng được chỉ định trong file.melt
tập tin nối tiếp! .dv
video được sản xuất bởi melt
chính nó, dường như làm việc tốt trong file.melt
...
Kiểu tuần tự hóa XML có thể đạt được bằng cách sử dụng -consumer xml:
công tắc điện ( thay vì -serialise
) - vì vậy ví dụ trên bây giờ sẽ là:
melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -consumer xml:file.mlt
Để "phát lại" cái mới được tạo file.mlt
Tệp XML, bây giờ có thể làm trực tiếp melt file.mlt
- hoặc, một dòng lệnh đầy đủ hơn sẽ là:
melt xml:file.mlt -consumer sdl
... có nghĩa là: sử dụng xml
"nhà sản xuất" ( lưu ý, trước đây nó là một người tiêu dùng ) mở file.mlt
và hiển thị các khung của nó trên "người tiêu dùng" sdl
(cửa sổ).
Lưu ý rằng trong trường hợp này, tôi đã trải nghiệm điều đó rất giống nhau .flv
các video gây ra segfault với một tệp tuần tự hóa đơn giản - chỉ hoạt động tốt với tệp tuần tự hóa XML!
Trong trường hợp này, kết quả file.mlt
Tệp XML có nhiều cài đặt hơn, chẳng hạn như độ phân giải, tốc độ khung hình, thông tin codec, v.v. - nhưng cũng khó thực hiện hơn trong trình soạn thảo văn bản:
<?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>