質問: ffmpegを使用して数フレームのwebのプレビュービデオを生成するにはどうすればよいですか? ffmpegのみを使用して数フレームのwebのプレビュービデオを生成するにはどうすればよいですか?ビデオの上にマウスを移動すると、実際のビデオをロードする前にプレビュー用に数フレーム再生されますか?
回答: 以下のバッチスクリプトはそれを行います。 web用に最適化されており、元のビデオから取得した10枚の画像を含むプレビュービデオを生成します。各画像は1秒間表示されます。スクリプトはそれに応じて画像サンプルを取得するため、プレビュー画像はビデオ全体から取得されます。 ffmpegのみが必要です。 (およびffmpegパッケージの一部であるffprobe) 出力:mp4/h.264〜120kb(元のビデオサイズに関係なく)。 完全に構成可能。 最適化されたランチョスとシャープフィルター。 元のビデオを16:9(384x216)フレームに収めることで、元のビデオのアスペクト比を維持します(必要に応じて側面の黒いバーを塗りつぶします)。 一時ファイルは使用されていません。 (ffmpegからffmpegへのオンザフライパイプ) html5対応。 プレビュー専用の2つのgifの例を次に示します。 実際の出力はmp4/h.264です:16:9ビデオソース。出力: 4:3ビデオソース。出力: 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アニメーションを一時停止したりすることはできません。