it-swarm-ja.com

ffmpegを使用して数フレームのWebのプレビュービデオを生成するにはどうすればよいですか?

Ffmpegのみを使用して数フレームのWebのプレビュービデオを生成するにはどうすればよいですか?ビデオの上にマウスを移動すると、実際のビデオをロードする前にプレビュー用に数フレーム再生されますか?

2
Azevedo

以下のバッチスクリプトはそれを行います。 Web用に最適化されており、元のビデオから取得した10枚の画像を含むプレビュービデオを生成します。各画像は1秒間表示されます。スクリプトはそれに応じて画像サンプルを取得するため、プレビュー画像はビデオ全体から取得されます。

  • Ffmpegのみが必要です。 (およびffmpegパッケージの一部であるffprobe)

  • 出力:mp4/h.264〜120Kb(元のビデオサイズに関係なく)

  • 完全に構成可能。

  • 最適化されたランチョスとシャープフィルター。

  • 元のビデオを16:9(384x216)フレームに収めることで、元のビデオのアスペクト比を維持します(必要に応じて側面の黒いバーを塗りつぶします)。

  • 一時ファイルは使用されていません。 (ffmpegからffmpegへのオンザフライパイプ)

  • HTML5対応。

プレビュー専用の2つのgifの例を次に示します。 実際の出力はmp4/h.264です:

16:9ビデオソース。出力:

16:9 widescreen

4:3ビデオソース。出力:

4:3 sd

Windowsで実行しますが、bashスクリプト(Linux)に簡単に変換できます。

スクリプトはフォルダを作成します./preview生成されたすべてのプレビューを保存する場所:

/My videos
    movie1.mp4 ~ any size
    movie2.mp4 ~ any size
    /preview
        movie1.mp4 ~ 120Kb
        movie2.mp4 ~ 120Kb 

個々のファイルで実行するように調整できます。

previewGenerator.cmd:

REM ----------------------------------------------
set folder=C:\My videos
set vframes=10
set width=384
set height=216
    rem w = h*16/9
set filetypes=*.mp4
REM ----------------------------------------------
setlocal EnableDelayedExpansion

pushd "%folder%"
if not exist preview md preview
for /f "usebackq delims=" %%f in (`dir /b %filetypes%`) do (
    if not exist "preview\%%~nf.mp4" (  
        for /f %%i in ('ffprobe -v error -show_entries format^=duration "%%f" -of default^=noprint_wrappers^=1:nokey^=1') do set length=%%i
        set /a length=!length!+0
        set /a fps=!length!/%vframes%
        ffmpeg -threads 2 -i "%%f" -an -qscale:v 1 -vf "fps=1/!fps!, scale=iw*min(%width%/iw\,%height%/ih):ih*min(%width%/iw\,%height%/ih):flags=lanczos, pad=%width%:%height%:(%width%-iw*min(%width%/iw\,%height%/ih))/2:(%height%-ih*min(%width%/iw\,%height%/ih))/2, unsharp=5:5:0.5:5:5:0.5" -vframes %vframes% -f image2pipe -vcodec ppm - ^
        | ffmpeg -y -threads 2 -framerate 1 -i pipe:0 -c:v libx264 -profile:v baseline -level 3.0 -tune stillimage -r 30 -pix_fmt yuv420p "preview\%%~nf.mp4"
    )
cls
)

更新:HTML5で再生速度を簡単に制御できます<video>示されているように ここ

代わりにgifを使用してみませんか?

  • .gif形式の品質が最も悪い(ピクセルカラー/最大256色)

  • .gifファイルサイズは少なくとも2倍大きくなります。

  • ビルド後に再生速度を制御したり、gifアニメーションを一時停止したりすることはできません。

3
Azevedo