Jak wyodrębnić obrazy z pliku wideo?

Odpowiedzi:

20

Spróbuj z ffmpeg

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

Możesz przeczytać dokumentację tutaj

  • -i inputfile.avi Plik wejściowy wideo to inputfile.avi
  • -r 1wyodrębnij 1 obraz wideo na sekundę. Zastąp tę liczbę liczbą zdjęć, które chcesz uzyskać na sekundę.
  • -f image2 wymuszając format wyjściowy obrazu, prawdopodobnie możesz to pominąć, ponieważ program próbuje wybrać format obrazów wyjściowych z rozszerzenia pliku.
  • image-%3d.jpeg Nazwa obrazów wyjściowych,% 3d wskazuje, że obrazy generowane wyjściowo będą miały tam numer sekwencji 3 miejsc po przecinku, jeśli chcesz, aby liczba była uzupełniona zerami, wystarczy użyć% 03d.
YoMismo
źródło
1
twój link wydaje się być zepsuty
Nolwennig
@Nolwennig. Naprawiono, nie tak szczegółowe jak poprzednia, ale przynajmniej jest to oficjalna dokumentacja i prawie nie do złamania.
YoMismo,
3
-r 1oznacza liczbę zdjęć na sekundę. Tak więc za 60ips lub 24, to jest -r 24. Aby ograniczyć wyciąg, to jest to -ss [start] -t [duration].
Sandburg
Dzięki,
działaj
3

Właśnie pobrałem najnowszą wersję VLC dla Windows 32 - 2.1.2 Rincewind i działa to dobrze.

Kroki:

1 - Kliknij Narzędzia> Preferencje i kliknij przycisk opcji Wszystkie

2 - Przewiń w dół i kliknij znak + obok pozycji Wideo, aby rozwinąć

3 - Przewiń w dół i kliknij Filtr scen i wpisz informacje o prefiksie Ścieżki katalogu (gdzie chcesz zapisać ramki). Nie klikaj Zapisz.

4 - Przewiń w górę i kliknij słowo Wideo w obszarze Filtry

5 - Kliknij pole wyboru Filtr wideo sceny i kliknij Zapisz.

6 - Otwórz i uruchom wideo, aby zapisać .png

7 - Aby zatrzymać zapisywanie ramek, wróć do kroku 5 i usuń zaznaczenie opcji Filtr wideo sceny. Łatwo naprawdę, gdy wiesz, gdzie znaleźć ustawienia.

Florence Taylor
źródło
0

Mam nadzieję, że to pomoże

#!/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
Tomek
źródło
0

W VLC możesz kliknąć prawym przyciskiem myszy, wideo, zrobić migawkę

użytkownik375835
źródło
Brzmi to trochę pracochłonnie, jeśli potrzebne byłyby obrazy np. Dla każdej klatki w scenie.
Kusalananda