0

ffmpegを使用して3つのビデオファイル(それぞれ16秒の長さ)を1つのファイルにマージしようとしています。それらはmpeg形式であるため、コマンドを使用して1つのファイルに連結しようとしていますcat。問題は、結果のファイル(video.mpg)を実行すると、最大16秒の長さであると報告されることです(最初の連結ビデオと同じ)。興味深いことに、VLCでファイルを再生すると、ビデオプログレスバーでも最大16秒しか報告されませんが、48秒のビデオ全体を見ることができます。

catコマンドを使用して追加の2つのビデオを追加した後、ファイルの「プロパティ」(たとえば、期間など)が更新されていないようです。

私がこれをどのように解決するかについての提案をいただければ幸いです。

以下は、私が作成したBASHスクリプトの関連セクションです。

mkfifo intermediate1.mpg
mkfifo intermediate2.mpg
mkfifo intermediate3.mpg
ffmpeg -i "./tmp/final01.mp4" -qscale 1 -y intermediate1.mpg < /dev/null &
ffmpeg -i "./tmp/final02.mp4" -qscale 1 -y intermediate2.mpg < /dev/null &
ffmpeg -i "./tmp/final03.mp4" -qscale 1 -y intermediate3.mpg < /dev/null &

echo "[audioforge] Stitching files "
cat intermediate1.mpg >> ./tmp/video.mpg
cat intermediate2.mpg >> ./tmp/video.mpg
cat intermediate3.mpg >> ./tmp/video.mpg

# Convert back to mp4 format.
ffmpeg -i "./tmp/video.mpg" -qscale 1 -y "./tmp/video.mp4"
4

1 に答える 1

2

すべての変換が完了するのを「待っていない」ようです。

3つのffmpeg行(バックグラウンドで実行されているこれらの行)の後にコマンドを使用してくださいwait。正確な構文はわかりませんが、従うのは非常に簡単です。

さらに、fifo のみを使用する必要がありますか? /tmp で単純なファイルを使用できます。それが本当に巨大なスペースを取らない限り。

編集: fifo の固有のブロッキング I/O の性質のため、待機コマンドは必要ない場合があります。ただし、このため、必要な 3 つのファイルを並行して変換する際に並列処理を実現できません。出力ファイルの最初の 4k (または fifo サイズ) を変換した後、データが fifo から読み取られるまで、2 つ (2 番目と 3 番目) の変換コマンドは停止します。

于 2012-11-13T12:18:29.440 に答える