13

FFMpeg でビデオをエンコードするとき、最初のビデオ フレームの前に jpg 画像を配置したいと思います。これは、「video」html5 タグを使用して Web ページにビデオを埋め込むと、最初の画像がスプラッシュ画像として表示されるためです。または、画像を 1 フレームのビデオにエンコードし、それをエンコードしたビデオに連結したいと考えています。「video」html5 要素の「poster」プロパティを使用したくありません。

4

2 に答える 2

26

concat フィルターを使用してそれを行うことができます。正確なコマンドは、スプラッシュ スクリーンの長さによって異なります。ビデオにもよりますが、約 1/25 から 1/30 秒の 1 フレームのスプラッシュ スクリーンは必要ないでしょう ;)

答え

まず、ビデオのフレーム レートを取得する必要があります。ffmpeg -i INPUT値を見つけてみてくださいtbr。例えば

$ ffmpeg -i a.mkv
ffmpeg version N-62860-g9173602 Copyright (c) 2000-2014 the FFmpeg developers
  built on Apr 30 2014 21:42:15 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
[...]
Input #0, matroska,webm, from 'a.mkv':
  Metadata:
    ENCODER         : Lavf55.37.101
  Duration: 00:00:10.08, start: 0.080000, bitrate: 23 kb/s
    Stream #0:0: Video: h264 (High 4:4:4 Predictive), yuv444p, 320x240 [SAR 1:1 DAR 4:3], 25 fps, 25 tbr, 1k tbn, 50 tbc (default)
At least one output file must be specified

上記の例では、 を示しています25 tbr。この番号を覚えておいてください。

次に、画像とビデオを連結する必要があります。このコマンドを試してください:

ffmpeg -loop 1 -framerate FPS -t SECONDS -i IMAGE \
       -t SECONDS -f lavfi -i aevalsrc=0 \
       -i INPUTVIDEO \
       -filter_complex '[0:0] [1:0] [2:0] [2:1] concat=n=2:v=1:a=1' \
       [OPTIONS] OUTPUT

動画に音声がない場合は、次の方法を試してください。

ffmpeg -loop 1 -framerate FPS -t SECONDS -i IMAGE \
       -i INPUTVIDEO \
       -filter_complex '[0:0] [1:0] concat=n=2:v=1:a=0' \
       [OPTIONS] OUTPUT

FPS =tbrステップ 1 で取得した値

SECONDS= 画像を表示する期間。

IMAGE = イメージ名

INPUTVIDEO= 元のビデオ名

[OPTIONS]= オプションのエンコーディング パラメータ (-vcodec libx264または など-b:a 160k)

OUTPUT= 出力動画ファイル名

これはどのように作動しますか?

私が使用したコマンドラインを分割しましょう:

-loop 1 -framerate FPS -t SECONDS -i IMAGE: これは基本的に次のことを意味します: 画像を開き、それをループして、 1 秒あたりのフレーム数で数SECONDS秒のビデオを作成します。FPS入力ビデオと同じ FPS にする必要があるのは、concat後で使用するフィルターに制限があるためです。

-t SECONDS -f lavfi -i aevalsrc=0: これは、SECONDS の間無音を生成することを意味します (0 は無音を意味します)。スプラッシュ画像の時間を埋めるには、沈黙が必要です。元の動画に音声がない場合、これは必要ありません。

-i INPUTVIDEO: ビデオ自体を開きます。

-filter_complex '[0:0] [1:0] [2:0] [2:1] concat=n=2:v=1:a=1':ここが一番の醍醐味です。ファイル 0 ストリーム 0 (画像ビデオ)、ファイル 1 ストリーム 0 (無音オーディオ)、ファイル 2 ストリーム 0 および 1 (実際の入力オーディオおよびビデオ) を開き、concatそれらを一緒にエネートします。オプションnv、およびaは、2 つのセグメント、1 つの出力ビデオ、および 1 つの出力オーディオがあることを意味します。

[OPTIONS] OUTPUT: これは、ビデオを出力ファイル名にエンコードすることを意味します。-c:v libx264 -crf 23 -c:a libfdk_aac (or -c:a libfaac) -b:a 128kHTML5 ストリーミングを使用している場合、おそらくH.264 ビデオと AAC オーディオに使用したいと思うでしょう。

さらに詳しい情報

于 2014-06-08T22:21:01.003 に答える