ตกลงตั้งแต่ฉันไม่สามารถหามากเกี่ยวกับmelt
การใช้บรรทัดคำสั่งต่อไปนี้เป็นบันทึกบาง .. (และหลังจากนี้ให้ดูคำตอบนี้ใช้ทดแทนกระบวนการโปรแกรมเคล็ดลับคาดหวังว่าไฟล์ที่มีนามสกุลที่เฉพาะเจาะจงเป็นอาร์กิวเมนต์? - Unix และ Linux Stack แลกเปลี่ยนสำหรับสคริปต์ ตัวอย่างผ่านbash
)
เริ่มต้นด้วย - มีแพ็คเกจ Ubuntu / Debian สำหรับmelt
(ฉันมี Ubuntu 11.04 กับ MLT ละลาย 0.6.2); ลิงก์ที่ได้รับจาก@Ieltonสำหรับ "Media Lovin 'Toolkit" (MLT) Wiki ซึ่ง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
ใน หากไม่มีการระบุอะไรเลยค่าเริ่มต้น "consumer" คือหน้าต่าง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
แต่เสียหาย )
ตอนนี้สำหรับส่วนการแก้ไข โดยพื้นฐานแล้วคุณสามารถระบุชุดของชื่อไฟล์ / เข้า / ออกโดยตรงในบรรทัดคำสั่ง; บอกว่าคุณมีไฟล์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
และแสดงเฟรมของมันบน "consumer" 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 ที่ได้มีการตั้งค่ามากขึ้นเช่นความละเอียด, อัตราเฟรม, ข้อมูลตัวแปลงสัญญาณ ฯลฯ - แต่มันก็ทำงานได้ยากขึ้นใน text editor โดยตรง:
<?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>