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


32

編集の必要性はかなり単純です。ビデオをいくつか切り取り、その間にPNGを挿入し、それらのビデオに参加する必要があります(トランジション、エフェクトなどは必要ありません)。基本的に、pitivi私が望むことをします-ただし、カメラから640x480 30 fps AVIを使用し、その種の素材を数分以上入れるとすぐpitiviにプレビューでフリーズを開始し、使用できなくなります。

そこで、Linux用のコマンドラインツールを探し始めました。私はffmpegコマンドライン-ffmpeg を使用してビデオをカットする-スーパーユーザー)とmplayerサム-linuxでmencoderでビデオファイルを編集する)のみがこれまでの候補であると思いますが、私が心に持っている使用例を見つけることはできません。

 

基本的に、エンコーダーとプレーヤーツール(ffmpegvs ffplay;やmencodervs mplayerなど)があると想像します-まず、コマンドラインで、できればフレーム解像度で編集シーケンスを直接指定できるように-擬似コードは次のようになります:

videnctool -compose --file=vid1.avi --start=00:00:30:12 --end=00:01:45:00 --file=vid2.avi --start=00:05:00:00 --end=00:07:12:25 --file=mypicture.png --duration=00:00:02:00 --file=vid3.avi --start=00:02:00:00 --end=00:02:45:10 --output=editedvid.avi

...または、次のような「プレイリスト」テキストファイルを持つことができます。

vid1.avi      00:00:30:12 00:01:45:00 
vid2.avi      00:05:00:00 00:07:12:25 
mypicture.png -           00:00:02:00
vid3.avi      00:02:00:00 00:02:45:10 

...で呼び出すことができます

videnctool -compose --playlist=playlist.txt --output=editedvid.avi

ここでのアイデアは、すべての動画が同じ形式であるということです-ツールがトランスコーディングを回避し、代わりに「生のコピー」を行うだけです(mencoder's copy codec: " -oac copy -ovc copy")-またはそれがない場合、圧縮されていないオーディオ/ビデオは問題ありません(ただし、少しスペースを消費します)。静止画像の場合、ツールはビデオファイルによって設定されたエンコーディングを使用します。

 

事は、私がこれまでのことを見ることができ、あるmencoderffmpeg個々のファイルを操作することができます。たとえば、単一のファイルから単一のセクションを切り取る、またはファイルを結合します(フレームの正確な切り取りを行うために使用できる編集決定リスト(EDL)mencoderもあります。複数の切り取り領域を定義できますが、再び単一のファイルに帰属します)。これは、最初に個々のファイルから断片を切り取り(それぞれがディスク上の独自の一時ファイルを必要とする)、次にそれらを最終的なビデオファイルに結合する必要があることを意味します。

次に、エンコードツールと同じコマンドラインオプション形式/プレイリストファイルを読み取ることができる対応するプレーヤーツールがあることを想像します。ただし、出力ファイルを生成せず、代わりにビデオを再生します。例:擬似コード:

vidplaytool --playlist=playlist.txt --start=00:01:14 --end=00:03:13

...そして、十分なメモリがある場合、RAMに低解像度のビデオプレビューを生成し、ウィンドウで再生しますが、一部の限られたインタラクション(再生、一時停止、巻き戻し、ステップフレームmplayerキーボードショートカットなど))。もちろん、開始時間と終了時間はプレイリスト全体を参照し、プレイリスト内のその領域で終わる可能性のあるファイルを含めると想像します。

したがって、このすべての最終結果は次のようになります。コマンドライン操作。編集中に一時ファイルはありません。また、最終出力をレンダリングするときに一時ファイル(またはトランスコーディング)もありません。

それで、私は上記のすべてが少し伸びるかもしれないと思いますが、上記のワークフローに近いものはありますか?


1
ビデオを分割/結合する必要がある場合にも、mkvmergeをよく使用します。
Vi。

@Viに感謝します。-今まで聞いたことがないmkvmerge、私はそれをチェックアウトすることを確認します。
sdaau

回答:



23

私があまり見つけることができないので、[OK]をmeltここでは、コマンドラインの使用いくつかのノートは...です(この後、この回答を参照してください引数として特定の拡張子を持つ、ファイルを期待トリックプログラムにプロセス置換を使用して- ?のUnixとLinuxスタック交換スクリプトの経由の例bash

まず、Ubuntu / Debianパッケージがありますmelt(私はUbuntu 11.04とMLT melt 0.6.2を使用しています)。与えられたリンク@Ieltonは、「メディア・ラヴィンツールキット」(MLT)のWiki、のためであるmelt(が、またの一部であるopenshotkdenlive)。gitのドキュメントテキストファイルへのリンクは次のとおりです。mltframework.org/mlt.git/tree-docs / ; WikiにはBuildScriptsに関するページがあります。

今のところ、私が持っている最大の(唯一の)問題は、非圧縮ビデオコンポジションを(pngフレームまたは非圧縮ビデオフォーマットとして)エクスポートする方法が見つからないことです。

 

まず、コマンドラインでmeltフレームを介して再生を制御できます。たとえば、15フレーム長の白い空白を「作成」し、組み込みmeltプレーヤーで表示するには、次を使用します。

melt -blank 15

で表示するとmeltstderr組み込みプレーヤーのコマンドライン情報も取得できます。

$ 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破損しています)。

 

次に、編集部分について説明します。基本的に、コマンドラインで一連のファイル名 / 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.pngin=しかし、画像がために表示されます-パラメータが0である必要はありませんout- in時間。この場合、in=0パラメーターを完全に省略するのが最も簡単です。

 

良いことは、この編集シーケンスをファイルに保存できるmeltこと、またはそれを呼び出してシリアル化できることです。このようなシリアル化には、「単純」またはXMLの2つの方法があることに注意してください。たとえば、上記のコマンドを「単純な」シリアル化ファイルとして保存する-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.mltXMLファイルを「再生」するには、直接行うことができますmelt file.mlt-または、より完全なコマンドラインは次のようになります。

melt xml:file.mlt -consumer sdl

...つまり、xml「プロデューサー」(以前はコンシューマーでした)を使用して開きfile.mlt、「コンシューマー」sdl(ウィンドウ)でフレームをレンダリングします。

この場合、.flv単純なシリアル化ファイルでセグメンテーション違反を引き起こしたのとまったく同じビデオを経験したことに注意してください-XMLシリアル化ファイルでも問題なく動作します!

この場合、結果のfile.mltXMLファイルには、解像度、フレームレート、コーデック情報など、さらに多くの設定がありますが、テキストエディターで直接作業することも困難です。

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


7

この問題の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番目の入力の最初の分を追加し、画像ファイルを挿入してから、3番目のビデオ全体を挿入します。

コードのリフティング:

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

スーパーユーザーページffmpegを使用してビデオをカットする

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


そのためのおかげで、私も最近知ったのffmpeg-CONCAT(および必要なJavaScriptで書かれている、npm私はそれを言及しようと思いましたので、それをインストールする)
sdaau

4

私もそのようなツールを探していましたが、メルトが仕事のツールであるように見えますが、ドキュメントを理解することはほとんど不可能です。編集のほとんどすべての組み合わせを行うことができます。「アクションカム」の映像がいくつかありましたが、音は使えませんでした。(h264)ビデオを結合し、60フレームのフェードを追加し、以下を使用してサウンドをサウンドトラックに置き換えました。

% melt -video-track vid1.avi vid2.avi -mix 60 -mixer luma vid3.avi \
   -mix 60 -mixer luma -audio-track vorbis:track1.ogg vorbis:track2.ogg \
   -consumer avformat:OUT.avi acodec=libmp3lame vcodec=libx264

詳細については、こちらをご覧ください。メインのウェブサイトはこちらです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.