proste operacje na zdjęciach i filmikach z konsoli

Linux jako system PC i Embedded
Regulamin forum
Aby łatwiej poruszać się w zagadnieniach to prosimy aby w temacie, na samym początku, w nawiasach prostokątnych umieszczać hasło wiodące dla opisywanego problemu np. [Debian], [System embedded], [Linux Mint] itp.
Awatar użytkownika
tasza
Geek
Geek
Posty: 1082
Rejestracja: czwartek 12 sty 2017, 10:24
Kontaktowanie:

proste operacje na zdjęciach i filmikach z konsoli

Postautor: tasza » poniedziałek 11 wrz 2017, 23:06

#slowanawiatr

Ja już przyzwyczajona do noszenia aparatu w plecaczku na wszelkie wyprawy, a jak wiadomo cyfrowy aparat gromadzi masę materiału, który na szybko trudno czasem obrobić. Zatem poniżej garść moich małych przydasiow, które ciągle przywołuje z historii bash-a, takie zupełnie podstawowe operacje na fotkach czy klipach. Oszczędzają sporo czasu w porównaniu z Kdenlive czy Gwenview, oczywiście fontanienek i wiatraczków nie ma, ale do przygotowania np. fotek na forum - jak znalazł.

W użyciu poniżej są programiki avconv, mogrify oraz exiv2, jak którego brakuje to zapraszam do synaptic lub apt-get

usuwanie wpisów EXIF
Skrót od 'exchangeable image file format', większość cyfrowych aparatów (i kamerek w trybie photo) dodaje takie tagi do zdjęć, a nie zawsze przecież chcemy się afiszować w sieci z modelem sprzętu, który posiadamy albo z informacjami o dacie i czasie wykonania kolejnego łazienkowego selfie z dziubkiem. Tak więc dla zachowania odrobiny prywatności polecam:

Kod: Zaznacz cały

find . -type f -iname '*.*' | xargs exiv2 rm

co ciekawe, niektóre portale typu Facebook automatycznie usuwają tagi exif podczas ładowania materiału, a inne (G+) skrzętnie je chomikują

masowa zmiana rozmiaru obrazków - resize
Mój staroświecki Canon w trybie Large produkuje fotki zwymiarowane na 3264x2448 o wadze 3.7MB co nie zawsze nadaje się do wgrania na forum czy fejsika czy gdziekolwiek w ogóle. Załadowanie materiału to jedno, no ale czasem warto pomyśleć o tych co potem będą te zdjęcia oglądać i czekać na pobranie. Masowy resize materiału w bieżącym katalogu (do którego przechodzimy cd-kami) wygląda na przykład tak:

Kod: Zaznacz cały

mogrify -resize 1024 *.JPG


Tu uwaga - polecenie przetworzy bieżące pliki czyli automatycznie tracimy oryginały, dobrze mieć kopię gdzieś na boku, jakby co.
Do forumowych poglądowych prezentacji czy zdobyczy z Olimpii - 800...900px lub max. 1024 to jest akurat, ale warto samodzielnie poeksperymentować gdzie jest optimum i kompromis pomiędzy wymiarami, wagą i czytelnością naszych zdjęć.

przycinanie filmików na zadaną długość
Czasem coś się nam zapodzieje na początku, a czasem niezręcznie zakończy - z poziomu konsoli taki 'crop' filmu można wykonać tak:

Kod: Zaznacz cały

avconv -i oryginalny.AVI -ss 00:00:03 -t 22:55:55 -codec copy wynikowy.AVI

po -ss podajemy punkt startowy na osi czasu, od którego wycinamy klatki w formacie hh:mm:ss
po -t długość, na którą chcemy przyciąć filmik, jak odcinamy od początku i ma być do końca samego - podajemy czas od czapki (jak w przykładzie)

kadrowanie filmików
A czasem w kadrze podczas filmowania zapodzieje nam się coś, czego zwyczajnie nie potrzebujemy pokazywać, albo chcemy zrobić miejsce na napisy etc. Można z kadru wyciąć strumień klatek o zadanym wymiarze i zaczepiony na oryginale w zadanym punkcie. Przykład poniżej wycina z filmiku górne 700px, aby zrobić miejsce na napisy no i ukryć podszybie auta (materiał był z kamerki podczas jazdy)

Kod: Zaznacz cały

avconv -i oryginalny.avi -vf crop=1280:700:0:0 -codec:v libx264 -preset slow -crf 20 -codec:a copy wynikowy.avi


usuwanie ścieżki audio
Zdarza się, że materiał powstaje w otoczeniu, którego odgłosy nic nowego nie wnoszą, a czasem wręcz przeszkadzają. Zdarza się też, że w tle zapodzieją się jakieś niedyplomatyczne pomruki, które ze względów np. natury obyczajowej raczej należałoby wyciszyć. Cały strumień audio z materiału można usunąć poleceniem jak poniżej, sztuka w parametrze -an

Kod: Zaznacz cały

avconv -i oryginal.avi -vcodec copy -an wynikowy.avi


--edit--

filmik do góry nogami
No właśnie, czasem filmując kamerką w breloczku albo gopro z ręki lub z uchwytu, ale w wodoodpornym futerale, zdarza się trzymać urządzenie do góry nogami, no może i to śmieszne, ale taką sytuację miałam kilka razy, film wtenczas jest odwrócony i trzeba go jakoś przetworzyć przed wrzuceniem na YT, bo inaczej oglądać go będą tylko nietoperze.

Kod: Zaznacz cały

avconv -i oryginalny.AVI -vf "hflip,vflip" -codec:v libx264 -preset slow -crf 20 -codec:a copy wynikowy.AVI


W przykładzie mamy vertical flip wespół z horizontal flip - czyli obrót o 180`, strumień audio jest kopiowany bez zmian.
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)

SuperGość
Uber Geek
Uber Geek
Posty: 2346
Rejestracja: piątek 04 wrz 2015, 09:03

Re: proste operacje na zdjęciach i filmikach z konsoli

Postautor: SuperGość » wtorek 12 wrz 2017, 08:32

o operacje na filmikach mnie interesują hmm ale nie pod linuksem - ja to noga jestem z obróbki filmów

Awatar użytkownika
tasza
Geek
Geek
Posty: 1082
Rejestracja: czwartek 12 sty 2017, 10:24
Kontaktowanie:

Re: proste operacje na zdjęciach i filmikach z konsoli

Postautor: tasza » wtorek 12 wrz 2017, 10:23

rezasurmar pisze:Pytanko szybkie, czy tylko AVI? czy np. mp4, mkv? x264? da się tak 'obsłużyć'

mp4 na pewno tak, mkv - nie wiem, nie korzystałam, ale zakładam że podobnie, te aplikacje pracują z większością współczesnych formatów
wojtek pisze:... ale nie pod linuksem - ja to noga jestem z obróbki filmów

no to jak ja z windowsa...ale ok, coś się udało na szybko, trzeba by tak:
ze strony http://ffmpeg.zeranoe.com/builds/ pobrać paczkę z ffmpeg, najlepiej ze statycznie dolinkowanymi wszelkimi bibliotekami, ja ten test zrobiła na ffmpeg-20170910-8e17cd2-win32-static.zip i teraz po kolei przykładziki, zapakowane w jeden skrypcik np. test.cmd
test.cmd pisze:

Kod: Zaznacz cały

ffmpeg -i %1 -ss 00:00:10 -t 00:00:05 -codec copy cut_%1
ffmpeg -i %1 -vf crop=320:240:160:120 -codec:v libx264 -preset slow -crf 20 -codec:a copy kadr_%1
ffmpeg -i %1 -vcodec copy -an silent_%1
ffmpeg -i %1 -vf "hflip,vflip" -codec:v libx264 -preset slow -crf 20 -codec:a copy oborot_%1


Kod: Zaznacz cały

test Hangar646_MVI_1615.AVI

powstaną:
cut_Hangar646_MVI_1615.AVI - 5 sekund długości, od 10-tej sekundy począwszy
kadr_Hangar646_MVI_1615.AVI - wycentrowane 320x240 z oryginalnego 640x480
silent_Hangar646_MVI_1615.AVI - nieme kino
oborot_Hangar646_MVI_1615.AVI - do góry nogami

jak widać parametry wywołania ffmpeg i avconv są bliźniacze, ponieważ avconv jest forkiem tego pierwszego
w rzeczonej paczce są też skompilowane ffprobe oraz ffplay, bardzo przydatne gdy chcemy z youtube wsadowo zgrywać muzykę w mp3 programikiem youtube-dl, lub zwyczajnie określić parametry techniczne materiału (fps, rodzaj kodowania a/v, etc)
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)

Awatar użytkownika
phill2k
User
User
Posty: 272
Rejestracja: niedziela 18 paź 2015, 00:12

Re: proste operacje na zdjęciach i filmikach z konsoli

Postautor: phill2k » wtorek 12 wrz 2017, 10:38

Co do samych konwerterów to dla zwolenników klikania i okienek, polecam konwertery z tej stronki http://www.pazera-software.pl, też są oparte na ffmpeg tyle że opakowane w fajne GUI - używam ich od kilku ładnych lat, przede wszystkim do konwersji mp4 do avi i m4a do mp3.

Awatar użytkownika
tasza
Geek
Geek
Posty: 1082
Rejestracja: czwartek 12 sty 2017, 10:24
Kontaktowanie:

Re: proste operacje na zdjęciach i filmikach z konsoli

Postautor: tasza » środa 18 paź 2017, 19:36

wczorajsze charakterystykowanie i praca z WaveForms zaowocowała całą furą zrzutów ekranu, z których postanowiłam poskładać jakiś ciekawszy materiał; ze zrzutek ekranu robionych w KDE typowym Print-Scrn należało po pierwsze wyłuskać merytoryczną zawartość - czyli siatkę pomiarową, podziałki i przebieg; z tak pozyskanych obrazków poskładać charakterystyki dla kolejnych zakresów pomiarowych.
oczywiście można robić operacje na piechotę w GIMP czy KolourPaint, ale to jest dobre dla kilku grafik a nie dla całego ich wora, wtedy ja przynajmniej uważam, że potrzeba odrobinę automatyzacji.

najpierw masowe wycinanie obszaru grafiki, czyli kadrowanie, crop

konsola pisze:

Kod: Zaznacz cały

for img in `ls *.png`; do convert $img -crop 1420x770+250+209 crop_$img; done;

w tym przypadku wycinany jest fragment o wymiarach 1420x770, a położenie górnego, lewego rogu to 250,209, pliki wynikowe lądują obok oryginalnych mając w nazwie prefiks `crop_`;

no a skąd wiadomo, że takie właśnie liczby należy podać? metody są tu co najmniej dwie:
* otwieramy jeden obrazek w np. KolourPaint i zaznaczając obszar odczytujemy sobie rozmiar prostokąta i jego położenie z linii statusu programu do rysowania
* mając okno np. WaveForms na desktopie ustawiamy się w lewym górnym rogu kursorem myszy, poczym alt-tab wracamy do terminala i wołamy (nie ruszając myszą!)

konsola pisze:

Kod: Zaznacz cały

xdotool getmouselocation --shell

na konsoli zostanie wypisane na przykład:
konsola pisze:

Kod: Zaznacz cały

otoja@icequeen:~/PROJECTS/eq > xdotool getmouselocation --shell
X=599
Y=728
SCREEN=0
WINDOW=33565133
otoja@icequeen:~/PROJECTS/eq >

a X i Y to interesujące nas koordynaty kursora myszy w wartościach bezwzględnych w rozumieniu X-Windows, względem lewego górnego narożnika.
ustawiamy mysz na prawym dolnym krańcu obszaru i ponownie wołamy to polecenie, z różnic X,Y dostaniemy szerokości i wysokość potrzebnego nam obszaru.

mając tak wykadrowane obrazki, pozbawione ramek, guzików etc możemy zabrać się za ich składanie;

superpozycja grafik w gustowny stosik

do wyrysowania rodziny charakterystyk potrzeba w tym przypadku trzech obrazków, dla maksymalnej, neutralnej oraz minimalnej pozycji suwaka; zanim zmontujemy grafiki może zastanówmy się jak by to zrobić analogowo - bierzemy pierwszy obrazek na kartce, nakładamy drugi, ale wydrukowany na folii (czyli transparenty) i kładziemy na pierwszym, potem na to w formie kanapki kładziemy trzecią folię z wykresem - i tak właśnie mamy gotowy obrazek, będący jakby superpozycją trzech składowych

pisanie kolejnych poleceń do konwersji na transparenty obrazek i potem ich sklejania jest deko upierdliwe, zatem całość warto ubrać w prosty skrypt, o na przykład taki:

merge.sh pisze:

Kod: Zaznacz cały

#!/bin/bash
convert $2 -transparent white a.png
convert $3 -transparent white b.png
convert -gravity center $1 a.png -composite b.png -composite $4
rm a.png
rm b.png


pierwsze dwie linijki tworzą tymczasowe graficzki z transparentnym tłem w miejsce koloru białego (a.png, b.png), trzecia linia na obrazek z białym tłem centralnie nakłada pierwszy, a potem drugi transparentny, całość ląduje w pliku wynikowym; przykładowe wywołanie będzie zatem takie:

konsola pisze:

Kod: Zaznacz cały

./merge.sh flat-neutral.png 8kHz-max.png 8kHz-min.png 8kHz-all.png


8kHz-all.png to finalny obrazek powstały z trzech składowych charakterystyk.

taka sklejanka jak powyżej może i nie robi jakiegoś powalającego wrażenia, ale wyobraźmy sobie, że każą nam wyrysować rodzinę charakterystyk dla każdej oznaczonej pozycji suwaka potencjometru (pięć w górę, zero i pięć w dół), wtenczas do sklejenia na sobie byłoby 11 obrazków dla jednej częstotliwości, na piechotę w okienkowym programie - ja osobiście słabo to widzę...
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)

Awatar użytkownika
tasza
Geek
Geek
Posty: 1082
Rejestracja: czwartek 12 sty 2017, 10:24
Kontaktowanie:

Re: proste operacje na zdjęciach i filmikach z konsoli

Postautor: tasza » niedziela 01 kwie 2018, 18:47

I jeszcze jedna sympatyczna operacja do kompletu, gdy chcemy zmontować mozaikę z posiadanych obrazków - polecenie montage

Mamy przykładowo sześć plików IMG_*.JPG (to te górne)
zrzut ekranu1.png


chcemy poskładać puzzla dwa rowki po trzy kolumny:
puzzle3x2.jpg

Kod: Zaznacz cały

montage IMG_1240.JPG  IMG_1241.JPG  IMG_1242.JPG  IMG_1243.JPG  IMG_1244.JPG  IMG_1246.JPG -tile 3x2 -geometry +1+1 puzzle3x2.jpg



lub trzy rowki po dwie kolumny:
puzzle2x3.jpg

Kod: Zaznacz cały

montage IMG_1240.JPG  IMG_1241.JPG  IMG_1242.JPG  IMG_1243.JPG  IMG_1244.JPG  IMG_1246.JPG -tile 2x3 -geometry +1+1 puzzle2x3.jpg


Parametr geometry z wartością podaną w pikselach zapewnia odstęp pomiędzy elementami układanki.
Oczywiście zamiast podawać nazwy plików z osobna można wykorzystać maskę *.JPG lub wyjście innego skryptu, ale wtenczas trochę trudniej określić gdzie jaki obrazek wyląduje w wynikowej grafice.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)


Wróć do „GNU/Linux”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 7 gości