GNU/Linux >> Belajar Linux >  >> Linux

Pengeditan video baris perintah di Linux (potong, gabung, dan pratinjau)

Oke, karena saya tidak dapat menemukan banyak tentang melt penggunaan baris perintah, berikut adalah beberapa catatan.. (dan setelah ini, lihat jawaban ini Menggunakan substitusi proses untuk mengelabui program yang mengharapkan file, dengan ekstensi tertentu sebagai argumen? - Unix &Linux Stack Exchange untuk contoh skrip melalui bash )

Sebagai permulaan - ada paket Ubuntu/Debian untuk melt (Saya memiliki Ubuntu 11.04 dengan MLT melt 0.6.2); tautan yang diberikan oleh @Ielton adalah untuk Wiki "Media Lovin' Toolkit" (MLT), yang melt adalah bagian dari (tetapi juga openshot dan kdenlive ). Berikut tautan ke file teks dokumentasi dari git mereka:mltframework.org/mlt.git/tree - docs/; perhatikan wiki memiliki halaman tentang BuildScripts.

Untuk saat ini, masalah (satu-satunya) terbesar yang saya miliki dengannya, adalah saya tidak dapat menemukan cara untuk mengekspor komposisi video yang tidak terkompresi (baik sebagai png frame, atau beberapa format video yang tidak dikompresi).

Pertama, di baris perintah melt Anda dapat mengontrol pemutaran melalui bingkai; misalnya, untuk "membuat" kosong putih panjang 15 bingkai, dan melihatnya dengan melt bawaan pemain, gunakan

melt -blank 15

Saat Anda melihat dengan melt , Anda juga akan mendapatkan info baris perintah ke stderr untuk pemutar bawaan:

$ 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

Sekali melt selesai diputar, itu tidak akan keluar - jadi Anda harus mengetikkan q untuk keluar.

Kita harus mencatat ada yang disebut "produsen" dan "konsumen" di melt . Jika tidak ada yang ditentukan, maka "konsumen" default adalah jendela SDL (Simple DirectMedia Layer) yang memutar video; jadi perintah di atas sama dengan:

melt -blank 15 -consumer sdl

Jadi, jika kita ingin menyimpan apa melt menampilkan, kita harus mengubah konsumen untuk sesuatu yang akan mendukung format file. Untuk mendapatkan daftar konsumen:

$ melt -query "consumers"
---
consumers:
  - sdl
  - sdl_audio
  - sdl_preview
  - sdl_still
  - gtk2_preview
  - avformat
  - libdv
  - xml
  - decklink
  - null
...

libdv konsumen akan menampilkan data berformat DV langsung ke stdout , jadi untuk menyimpan video ke .dv file yang akan Anda lakukan:

melt -blank 15 -consumer libdv > test.dv

Perhatikan bahwa dari konsumen yang terdaftar, satu-satunya format yang saya coba, yang juga dapat dibuka di aplikasi lain adalah libdv (Saya menggunakan vlc sebagai aplikasi lain); namun, ini mungkin gagal untuk jenis transcoding yang berbeda (mis. jika alih-alih kosong, saya mencoba mengonversi cuplikan dari .flv file, file .dv yang dihasilkan terbuka dan diputar di vlc , tetapi rusak ).

Sekarang untuk pengeditan bagian; intinya, Anda dapat menentukan serangkaian nama-berkas / masuk / keluar bait langsung di baris perintah; katakanlah Anda memiliki file, video.avi - maka Anda dapat melakukan:

melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79

atau diformat sedikit lebih baik:

melt \ 
video.avi in=30 out=79 \ 
-blank 15 \
video.avi in=30 out=79

Ini berarti video.avi dari frame 30 ke frame 79 akan dimainkan; lalu kosong 15 bingkai; lalu video.avi urutan dari frame 30 ke frame 79 lagi.

Untuk memanfaatkan gambar (misalnya, .png ) dalam komposisi edit video:

melt \
video.avi in=30 out=79 \
test.png in=0 out=15 \
video.avi in=30 out=79 \
-blank 15

Perhatikan bahwa untuk test.png , in= parameter tidak harus 0 - namun, gambar akan ditampilkan untuk out -in waktu; dalam hal ini, paling mudah meninggalkan in=0 parameter keluar sama sekali.

Hal baiknya adalah urutan pengeditan ini dapat disimpan - atau sebagai melt menyebutnya, serial - ke file; perhatikan ada dua cara serialisasi seperti:"sederhana" atau XML. Misalnya, untuk menyimpan perintah di atas sebagai file berseri "sederhana", kita cukup menambahkan -serialise [filename] beralih ke perintah:

$ melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -serialise file.melt 
Project saved as file.melt.

Sekarang file.melt berisi:

video.avi
in=30
out=79
-blank
15
video.avi
in=30
out=79

Tampaknya, format file berseri "sederhana" ini tidak mengandung karakter "berkomentar" - jika saya mencoba menambahkan "# comment " baris, melt mengeluh dengan:'Gagal memuat "# komentar" ' (tapi selain itu, sepertinya garis seperti itu diabaikan, dan pemutaran tetap berlanjut). ".melt " tampaknya merupakan ekstensi yang melt mengenali sebagai file serial sederhana.

Sekarang, untuk memutar ulang file berseri ini, pada prinsipnya kita cukup memanggil melt file.melt - namun, baris perintah yang lebih lengkap adalah:

melt melt_file:file.melt -consumer sdl

... yang artinya:gunakan melt_file "produser" untuk membuka file.melt , dan merender bingkainya pada sdl "konsumen". (jendela).

Perhatikan bahwa saya memiliki pengalaman, yaitu (katakanlah) .flv video diputar tanpa masalah pada baris perintah - namun, menyebabkan kesalahan segmentasi saat ditentukan dalam file.melt file serial! .dv video yang diproduksi oleh melt sendiri, tampaknya berfungsi dengan baik di file.melt ...

Jenis serialisasi XML dapat dicapai dengan menggunakan -consumer xml: beralih (bukannya -serialise ) - jadi contoh di atas sekarang menjadi:

melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -consumer xml:file.mlt

Untuk "memutar ulang" file.mlt yang baru dibuat file XML, sekarang dapat dilakukan langsung melt file.mlt - atau, baris perintah yang lebih lengkap adalah:

melt xml:file.mlt -consumer sdl

... yang berarti:gunakan xml "produsen" (perhatikan, sebelumnya adalah konsumen ) untuk membuka file.mlt , dan merender bingkainya pada sdl "konsumen". (jendela).

Perhatikan bahwa dalam kasus ini, saya pernah mengalami .flv yang sama video yang menyebabkan segfault dengan file serialisasi sederhana - berfungsi dengan baik dengan file serialisasi XML!

Dalam hal ini, file.mlt yang dihasilkan File XML memiliki lebih banyak pengaturan, seperti resolusi, frekuensi gambar, informasi codec, dll - tetapi juga lebih sulit untuk bekerja dengan editor teks secara langsung:

<?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>

Ya ada. Coba gunakan aplikasi bernama "Melt". Lihat dokumentasinya di sini.

Jika Anda menggunakan distro turunan Debian:

apt-get install melt

Solusi ffmpeg untuk masalah ini terlihat seperti ini:

mkfifo temp1 temp2 temp3
ffmpeg -i input.wmv -ss 30 -to 60 -c copy output.wmv temp1 2> /dev/null & \
ffmpeg -i input2.wmv -t 60 -c copy temp2 2> /dev/null & \
ffmpeg -i input3.wmv -i image.png -filter_complex "[0:v][1:v] \
overlay=25:25:enable='between(t,0,20)'" -pix_fmt yuv420p -c:a copy temp3 2> /dev/null & \
ffmpeg -f mpegts -i "concat:temp1|temp2|temp3" -c copy output.mp4

Ini menggunakan pipa bernama, jadi tidak perlu membuat file temp pada disk, dan memungkinkan Anda untuk memotong potongan klip video, dan menambahkan gambar.

Contoh ini menggunakan waktu 30-60 dari input pertama, lalu menambahkan menit pertama dari input kedua, lalu menyisipkan file gambar, lalu seluruh video ketiga.

Kode diangkat dari:

halaman gabungan ffmpeg:https://trac.ffmpeg.org/wiki/Concatenate

halaman pengguna super Menggunakan ffmpeg untuk memotong video

halaman pengguna super https://video.stackexchange.com/questions/12105/add-an-image-in-front-of-video-using-ffmpeg


Linux
  1. Pengonversi Video Sumber Terbuka untuk Linux [GUI dan CLI]

  2. VidCutter – Potong dan Gabung Klip Video dengan Cepat

  3. 10 Aplikasi Pengeditan Media Terbaik untuk Linux

  1. Potong / Grep Dan Df -h?

  2. Sejarah baris perintah di Linux

  3. Cinelerra GG Infinity – Perangkat Lunak Pengeditan Video Gratis untuk Linux

  1. Pengeditan video cepat di Linux dengan Flowblade

  2. Perangkat Lunak Pengeditan Video Gratis Terbaik untuk Linux

  3. 4 Penggunaan Cut Command yang Esensial dan Praktis di Linux