GNU/Linux >> Linux の 問題 >  >> Linux

Linux でのコマンドライン ビデオ編集 (カット、結合、プレビュー)

melt についてはあまり見つけられないので、わかりました コマンドラインの使用法、ここにいくつかの注意事項があります..(そしてこの後、この回答を参照してください Using process replacement to trick programs Expecting files, with specific extensions as argument? - Unix &Linux Stack Exchange for a script example via bash )

まず、melt 用の Ubuntu/Debian パッケージがあります。 (私は MLT メルト 0.6.2 を搭載した Ubuntu 11.04 を持っています); @Ielton によって提供されたリンクは、"Media Lovin' Toolkit" (MLT) Wiki 用です。melt の一部です (ただし、openshot の一部でもあります) および kdenlive )。 git からのドキュメント テキスト ファイルへのリンクは次のとおりです:mltframework.org/mlt.git/tree - docs/; Wiki に 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 として 呼び出し、シリアル化 - ファイルへ。 2あることに注意してください そのようなシリアル化の方法:「シンプル」または 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 次のエラーが表示されます:「「# コメント」を読み込めませんでした ' (ただし、それ以外は、そのような行は無視され、再生は続行されるようです)。 ".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>

はいあります。 「メルト」というアプリを使ってみてください。こちらのドキュメントを参照してください。

Debian 派生ディストリビューションを使用している場合:

apt-get install melt

この問題に対する ffmpeg の解決策は次のようになります:

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

名前付きパイプを使用するため、ディスク上に一時ファイルを作成する必要がなく、ビデオ クリップのチャンクを切り取り、画像を追加できます。

この例では、最初の入力の時間 30 ~ 60 を使用し、次に 2 番目の入力の最初の 1 分を追加し、画像ファイルを挿入してから、3 番目のビデオ全体を挿入します。

から持ち上げられたコード:

ffmpeg 連結ページ:https://trac.ffmpeg.org/wiki/Concatenate

スーパーユーザーページ ffmpeg を使用してビデオを切り出す

スーパーユーザーページ https://video.stackexchange.com/questions/12105/add-an-image-in-front-of-video-using-ffmpeg


Linux
  1. Cut / Grep And Df -h?

  2. Linuxのコマンドライン履歴

  3. VidCutter –ビデオクリップをすばやくトリミングして結合

  1. Linux用のオープンソースビデオコンバーター[GUIおよびCLI]

  2. 4LinuxでのCutコマンドの基本的かつ実用的な使用法

  3. Linux用の10の最高のメディア編集アプリケーション

  1. Flowbladeを使用したLinuxでのクイックビデオ編集

  2. Linux用の最高の無料ビデオ編集ソフトウェア

  3. Cinelerra GG Infinity –Linux用の無料ビデオ編集ソフトウェア