3

FPS と期間が同じような 2 つの .OGG ファイルがあります。私の目標は、FFMPEG を使用してそれらを並べて表示することです。この目的のために、次のコマンドを試しました:

ffmpeg -i subject.ogg -vf "[in]pad=3*iw:3*ih[left];movie=clinician.ogg[right];[left] [right]overlay=100:0[out]" 結合.ogg

結果のビデオは再生できないと言えば十分です。結合プロセス中に、FFMPEG は次のような多くのエラーを出力します。

[Parsed_overlay_2 @ 0x1eb7d3e0] バッファ キュー オーバーフロー、ドロップ

これは何を言っているのですか?

ノート:

  • 両方のソースファイルが再生可能
  • パラメータを理解するために、「出力」をかなり大きくなるようにパディングしました
  • 100:0 での 2 番目のビデオの配置は任意です。コマンドが機能するようになったら、出力内のより適切な場所に移動します。
  • 両方のビデオは、Web カメラから記録された .FLV として誕生しました。FFMPEG は 2 つの .FLV ファイルを結合したくなかったので、それらを .ogg に変換しました。これより良いルートがあれば教えてください。

それで、私のパラメータの何が問題なのですか?これらのFFMPEGエラーを引き起こすために私は何をしていますか?

編集:
ffmpeg -iclinician.ogg

入力 #0、ogg、「clinician.ogg」から:
期間: 00:05:20.98、開始: 0.001000、ビットレート: 2273 kb/s
ストリーム #0:0: ビデオ: theora、yuv420p、500x500 [SAR 1:1 DAR 1:1]、1k tbr、1k tbn、1k tbc
メタデータ:
SERVER : Red5 Server 1.0.0 RC1 $Rev: 4193 $
CANSEEKTOEND : true
ENCODER : Lavf54.31.100
ストリーム #0:1: オーディオ: vorbis、8000 Hz、ステレオ、s16
メタデータ:
SERVER : Red5 Server 1.0.0 RC1 $Rev: 4193 $
CANSEEKTOEND : true
ENCODER : Lavf54.31.100

ffmpeg -i subject.ogg

入力 #0、ogg、「subject.ogg」から:
期間: 00:05:17.60、開始: 0.001000、ビットレート: 1341 kb/s
ストリーム #0:0: ビデオ: theora、yuv420p、300x300 [SAR 1:1 DAR 1:1]、83.33 tbr、1k tbn、1k tbc
メタデータ:
SERVER : Red5 Server 1.0.0 RC1 $Rev: 4193 $
CANSEEKTOEND : true
ENCODER : Lavf54.31.100
ストリーム #0:1: オーディオ: vorbis、8000 Hz、ステレオ、s16
メタデータ:
SERVER : Red5 Server 1.0.0 RC1 $Rev: 4193 $
CANSEEKTOEND : true
ENCODER : Lavf54.31.100

4

2 に答える 2

2

x264 への変換は素晴らしい提案でした。それが流れを変えたようです。

後世のためのいくつかの注意事項を次に示します。

  • flv を x264 に変換し、オーディオ同期の問題を修正するには:

ffmpeg -y -i subject_s_2242_r_1658.flv -async 1 -ac 2 -strict -2 -acodec vorbis \
-c:v libx264 -preset slow -crf 22 subject.mkv

  • 2 つの x264 ファイルを 1 つのサイド バイ サイド ファイルにマージし、結果のファイルで 2 つのモノラル オーディオ トラックをステレオにします。

ffmpeg -y -iclinician.mkv -vf: "movie=subject.mkv[right];pad=iw*2:ih:0:0[left];[left][right]overlay=500:0" \
- filter_complex "amovie=clinician.mkv[l];movie=subject.mkv[r];[l][r] アマージ" final.mkv

AVISYNTH (CentOS 6.2 で実行) をインストールできませんでしたが、優れたソリューションのように見えます。

于 2012-11-28T19:34:36.627 に答える
0

Avisynthを使用してこれを行うのがおそらく最も簡単です。

次の input.avs ファイルを作成します。

a = AviSource("first.avi")
b = AviSource("second.avi")
StackHorizontal(a,b)

次に、ffmpeg -i input.avs output.avi ... と必要なその他のオプションを実行します。

EDIT:それを行う別の方法(高速ではありません)は、両方のファイルからフレームをpngにダンプし、それらをImageMagick(たとえばmontage)または同様の画像処理ツールと組み合わせることです。

#!/bin/bash
ffmpeg -i first.avi first_%05d.png
ffmpeg -i second.avi second_%05d.png
for file in first_*.png ; do montage ${file} ${file/first/second} ${file/first/output} ; done
ffmpeg -i output_%05d.png output.avi

これにより、実際には、横に並べるだけでなく、より多くの画像処理を実行できます。任意のスケール/オーバーレイ/背景などを実行できます。問題は、1 つのファイルの N 番目のフレームが、別のファイルの N 番目のフレームと正確に同じではない可能性があることです。可変フレーム レートの場合、これは AviSynth が完全に処理します。クリップが一定のフレーム レートであれば問題ありません。

このような両方を含む新しいクリップを作成してクリップを結合すると (avisynth を使用するかどうかに関係なく)、ビデオを再圧縮する必要があり、ビデオの品質が低下したり、ファイル サイズが大きくなります。

ogg ファイルを Avisynth に読み込む方法はわかりませんが、おそらく方法はあります。入力形式に関する FAQ を確認してください。

補足: theora/ogg の選択は奇妙です。ベター: mp4 コンテナー内の H.264。

于 2012-11-27T20:33:50.307 に答える