ビデオファイルから画像を抽出する方法は?

ビデオファイルから画像を抽出する方法は?

私は、ビデオから画像ファイル(スクリーンショットなど)を生成する方法です。

答え1

試してみてくださいffmpeg

ffmpeg -i inputfile.avi -r 1 -f image2 image-%3d.jpeg

文書を読むことができます。ここ

  • -i inputfile.aviビデオ入力ファイルはinputfile.aviです。
  • -r 1画像から毎秒1つの画像を抽出します。その数を1秒あたりに取得したい画像の数に置き換えてください。
  • -f image2画像出力形式を強制的に適用すると、プログラムはファイル拡張子から出力画像形式を選択しようとするため、このオプションを無視できます。
  • image-%3d.jpeg出力イメージの名前%3dは、生成された出力イメージに小数点3桁のシリアル番号があることを意味します。数字をゼロで埋めるには%03dを使用します。

答え2

Windows 32用のVLCの最新バージョンである2.1.2 Rincewindをダウンロードしたばかりです。

スピード:

1 - ツール>基本設定をクリックし、すべてラジオボタンをクリックします。

2 - 下にスクロールし、ムービーの横にある+記号をクリックして展開します。

3 - 下にスクロールして「シーンフィルタ」をクリックし、「ディレクトリパスプレフィックス」情報(フレームを保存する場所)を入力します。保存をクリックしないでください。

4 - 上にスクロールして、「フィルタ」の下にある「動画」の単語をクリックします。

5 - シーンビデオフィルタチェックボックスをクリックし、保存をクリックします。

6 - ビデオを開いて実行すると、.pngが保存されます。

7 - フレームの保存を中止するには、手順5に戻ってシーンビデオフィルタの選択を解除します。設定がどこにあるかを知ったら、本当に簡単です。

答え3

VLCでは、ビデオを右クリックしてスナップショットを撮ることができます。

答え4

役に立ったことを願って

#!/bin/bash
source_dir="."
output_dir="."
input_file_types=(avi wmv flv mkv mpg mp4)
output_file_type="jpg"

convert() {
        echo "" | ffmpeg -ss $ss -y -i "$in_file" -an -f image2 -vframes 1 "$output_dir/$out_file"
}

for input_file_types in "${input_file_types[@]}"
do

        find "$source_dir" -name "*.$input_file_types" -print0 | while IFS= read -r -d $'\0' in_file
        do
                echo "Processing…"
                echo ">Input  "$in_file
                # Replace the file type
                out_file=$(echo $in_file|sed "s/\(.*\.\)$input_file_types/\1$output_file_type/g")
            echo ">Output "$out_file

# get video duration
#    fulltime=`ffmpeg -i "$in_file" 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//`;
#    hour=`echo $fulltime | cut -d ':' -f 1`;
#    minute=`echo $fulltime | cut -d ':' -f 2`;
#    second=`echo $fulltime | cut -d ':' -f 3 | cut -d '.' -f 1`;

#    seconds=`expr 3600 \* $hour + 60 \* $minute + $second`;
#    ss=`expr $seconds / 2`; # from the middle of video



    ss=`expr 10`; # from the 10sec of video



    # Convert the file
                convert "$in_file" "$out_file"

                if [ $? != 0 ]
                then
                    echo "$in_file had problems" >> ffmpeg-errors.log
                fi

                echo ">Finished "$out_file "\n\n"
        done
done

関連情報