025 FFmpeg – Modificare immagini.

31 Maggio, 2020 (20:27) | ffmpeg, Fotografia digitale, Linux | By: sargonsei

Ffmpeg funziona molto bene sia per elaborare files video, sia per elaborare immagini; in questa guida, spiego come usarlo per:
1) conoscere le caratteristiche di un file multimediale
2) estrarre un’immagine da un filmato
3) ruotare un’immagine di 90 gradi e/o specchiarla
4) ruotare un’immagine di pochi gradi
5) estrarre una porzione di immagine
6) modificare la risoluzione di un’immagine.

Questa guida è impostata supponendo di dover estrarre un’immagine in formato .png da un video in formato .mp4 e compiere le operazioni suddette nella sequenza di cui sopra, ma è valida anche per chi intende compiere solo alcune delle operazioni suddette.

1) ffmpeg -i videoIN.mp4 -hide_banner # Elenca caratteristiche del file multimediale videoIN.mp4 [01]

2) ffmpeg -i videoIN.mp4 -r 30 -ss 00:02:05.00 -t 00:00:01.00 images%05d.png # estrae 30 immagini; la prima è quella che si trova a 2m.30s. dall’inizio, l’ultima è quella che compare 1 secondo dopo la prima [02]
2B) Rinominare img001.png l’immagine che si vuole elaborare, e cancellare le immagini appena ottenute che si ritiene inutili.

3) ffmpeg -i img001.png -vf “transpose=1” -y img002.png # Ruota di 90 gradi in senso orario l’immagine img001.png [03]
3a) ffmpeg -i img001.png -vf “transpose=2” -y img002-2.png # Ruota di 90 gradi in senso antiorario l’immagine img001.png [03]
3b) ffmpeg -i img001.png -vf hflip -y img002-h.png # Specchia orizzontalmente (destra <=> sinistra) l’immagine img001.png [03]
3c) ffmpeg -i img001.png -vf vflip -y img002-v.png # Specchia verticalmente (sotto <=> sopra) l’immagine img001.png [03]
3d) ffmpeg -i img001.png -vf “transpose=3” -y img002-3.png # Specchia e ruota di 90 gradi in senso orario l’immagine img001.png [03]
3e) ffmpeg -i img001.png -vf “transpose=0” -y img002-0.png # Specchia e ruota di 90 gradi in senso antiorario l’immagine img001.png [03]

4)
ffmpeg -i img002.png -vf rotate=5*(PI/180) img003.png # Ruota di 5 gradi in senso orario l’immagine img002.png [04]
4a) ffmpeg -i img002.png -vf rotate=-5*(PI/180) img003a.png # Ruota di 5 gradi in senso antiorario l’immagine img002.png [04]

5) ffmpeg -i img003.png -vf “crop=w:h:x:y” img004.png # Estrae da img003.png un’immagine larga W pixels ed alta H pixels di cui il pixel in alto a sinistra dista x pixels dal bordo sinistro ed Y pixels dal bordo superiore dell’immagine img003.png [05]
ovvero
ffmpeg -i img003.png -vf “crop=600:338:20:620” img004.png # Estrae da img003.png un’immagine larga 600 pixels ed alta 338 pixels di cui il pixel in alto a sinistra dista 20 pixels dal bordo sinistro e 620 pixels dal bordo superiore dell’immagine img003.png [05]

6) ffmpeg -i img004.png -vf scale=200:-1 img005.png # Modifica la risoluzione dell’immagine img004.png in modo che il lato maggiore sia di 200 pixels [06]
6a) for i in *.png; do ffmpeg -i “$i” -vf scale=200:-1 “${i%.*}lr.PNG”; done # Modifica la risoluzione di tutte le immagini contenute nella cartella in modo che il lato maggiore sia di 200 pixels [06]

Spiegazione dettagliata.
01) Per prima cosa, occorre capire quali sono le caratteristiche del file video (in questo esempio, videoIN.mp4) da cui si desidera estrarre l’immagine da elaborare. A tale scopo, aprire un terminale nella cartella in cui si trova il file video videoIN.mp4 ed impartire il comando:
>$ ffmpeg -i videoIN.mp4 -hide_banner # Elenca caratteristiche del file multimediale videoIN.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'videoIN.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.71.100
Duration: 00:10:19.35, start: 0.000000, bitrate: 1650 kb/s
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 1514 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default)
Metadata:
handler_name : SoundHandler
At least one output file must be specified
>$

Vediamo così che il file video in ingresso contiene 30 Fotogrammi Per Secondo ciascuno di 1280×720 pixels (formato: 16:9)
Con un programma per visualizzare i video (nel mio caso, VLC, ma va bene qualsiasi programma che permetta di visualizzare i video ed il tempo intercorso dall’inizio del video), vediamo dove si trova il fotogramma che si vuole estrarre; per questo esempio, abbiamo individuato che si tratta di uno dei 30 fotogrammi che si trova fra 2min.05sec. e 2min.06sec.

02) Ora spiego come estrarre l’immagine che ci interessa. In questo esempio, si utilizzano immagini in formato .png, ma nulla vieta di utilizzare il formato .jpg o altro formato. Aprire un terminale nella cartella in cui si trova il file video videoIN.mp4 ed impartire il comando:
>$ ffmpeg -i videoIN.mp4 -r 30 -ss 00:02:05.00 -t 00:00:01.00 images%05d.png # estrae 30 immagini; la prima è quella che si trova a 2m.30s. dall'inizio, l'ultima è quella che compare 1 secondo dopo la prima [02]
ffmpeg version 3.3.9 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
configuration: --disable-decoder=amrnb --disable-decoder=libopenjpeg --disable-mips32r2 --disable-mips32r6 --disable-mips64r6 --disable-mipsdsp --disable-mipsdspr2 --disable-mipsfpu --disable-msa --disable-libopencv --disable-podpages --disable-stripping --enable-avfilter --enable-avresample --enable-gcrypt --enable-gnutls --enable-gpl --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libilbc --enable-libkvazaar --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx265 --enable-libxvid --enable-libzvbi --enable-nonfree --enable-opengl --enable-openssl --enable-postproc --enable-pthreads --enable-shared --enable-version3 --incdir=/usr/include/x86_64-linux-gnu --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --toolchain=hardened --enable-frei0r --enable-chromaprint --enable-libx264 --enable-libiec61883 --enable-libdc1394 --enable-vaapi --disable-opencl --enable-libmfx --disable-altivec --shlibdir=/usr/lib/x86_64-linux-gnu
libavutil 55. 58.100 / 55. 58.100
libavcodec 57. 89.100 / 57. 89.100
libavformat 57. 71.100 / 57. 71.100
libavdevice 57. 6.100 / 57. 6.100
libavfilter 6. 82.100 / 6. 82.100
libavresample 3. 5. 0 / 3. 5. 0
libswscale 4. 6.100 / 4. 6.100
libswresample 2. 7.100 / 2. 7.100
libpostproc 54. 5.100 / 54. 5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'videoIN.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.71.100
Duration: 00:10:19.35, start: 0.000000, bitrate: 1650 kb/s
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 1514 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default)
Metadata:
handler_name : SoundHandler
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> png (native))
Press [q] to stop, [?] for help
Output #0, image2, to 'images%05d.png':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.71.100
Stream #0:0(und): Video: png, rgb24, 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 30 fps, 30 tbn, 30 tbc (default)
Metadata:
handler_name : VideoHandler
encoder : Lavc57.89.100 png
frame= 30 fps=1.9 q=-0.0 Lsize=N/A time=00:00:01.00 bitrate=N/A speed=0.0624x
video:37662kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
>$

Abbiamo detto che ne cerchiamo solo una, ma per individuare esattamente quella che interessa, è utile estrarre tutte le immagini che compongono un secondodi video nei pressi dell’immagine che ci interessa (nel caso di un video a 30 fps, 30 immagini). Individuata l’immagine che si desidera elaborare, la rinominiamo img001.png e cancelliamo tutte le altre.

03) Ora spiego come ruotare di 90 gradi in senso orario l’immagine img001.png. Aprire un terminale nella cartella in cui si trova il file img001.png ed impartire il comando:
>$ $ ffmpeg -i img001.png -vf "transpose=1" -y img002.png # Ruota di 90 gradi in senso orario l'immagine img001.png [03]
ffmpeg version 3.3.9 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
configuration: --disable-decoder=amrnb --disable-decoder=libopenjpeg --disable-mips32r2 --disable-mips32r6 --disable-mips64r6 --disable-mipsdsp --disable-mipsdspr2 --disable-mipsfpu --disable-msa --disable-libopencv --disable-podpages --disable-stripping --enable-avfilter --enable-avresample --enable-gcrypt --enable-gnutls --enable-gpl --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libilbc --enable-libkvazaar --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx265 --enable-libxvid --enable-libzvbi --enable-nonfree --enable-opengl --enable-openssl --enable-postproc --enable-pthreads --enable-shared --enable-version3 --incdir=/usr/include/x86_64-linux-gnu --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --toolchain=hardened --enable-frei0r --enable-chromaprint --enable-libx264 --enable-libiec61883 --enable-libdc1394 --enable-vaapi --disable-opencl --enable-libmfx --disable-altivec --shlibdir=/usr/lib/x86_64-linux-gnu
libavutil 55. 58.100 / 55. 58.100
libavcodec 57. 89.100 / 57. 89.100
libavformat 57. 71.100 / 57. 71.100
libavdevice 57. 6.100 / 57. 6.100
libavfilter 6. 82.100 / 6. 82.100
libavresample 3. 5. 0 / 3. 5. 0
libswscale 4. 6.100 / 4. 6.100
libswresample 2. 7.100 / 2. 7.100
libpostproc 54. 5.100 / 54. 5.100
Input #0, png_pipe, from 'img001.png':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: png, rgb24(pc), 1280x720 [SAR 1:1 DAR 16:9], 25 tbr, 25 tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (png (native) -> png (native))
Press [q] to stop, [?] for help
Output #0, image2, to 'img002.png':
Metadata:
encoder : Lavf57.71.100
Stream #0:0: Video: png, rgb24, 720x1280 [SAR 1:1 DAR 9:16], q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
Metadata:
encoder : Lavc57.89.100 png
frame= 1 fps=0.0 q=-0.0 Lsize=N/A time=00:00:00.04 bitrate=N/A speed=0.186x
video:1341kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
lmde3c@asus-f555y:/mnt/Dati1/GuidaFfmpeg/ffmpeg-Foto$
>$

Se invece dovesse essere necessario ruotare l’immagine di 90 gradi in senso antiorario, oppure specchiarla orizzontalmente, oppure specchiarla verticalmente, oppure specchiarla e ruotarla di 90 gradi in senso orario, oppure specchiarla e ruotarla di 90 gradi in senso antiorario, i comandi corrispondenti sono i seguenti:
3a) ffmpeg -i img001.png -vf “transpose=2” -y img002-2.png # Ruota di 90 gradi in senso antiorario l’immagine img001.png [03]
3b) ffmpeg -i img001.png -vf hflip -y img002-h.png # Specchia orizzontalmente (destra <=> sinistra) l’immagine img001.png [03]
3c) ffmpeg -i img001.png -vf vflip -y img002-v.png # Specchia verticalmente (sotto <=> sopra) l’immagine img001.png [03]
3d) ffmpeg -i img001.png -vf “transpose=3” -y img002-3.png # Specchia e ruota di 90 gradi in senso orario l’immagine img001.png [03]
3e) ffmpeg -i img001.png -vf “transpose=0” -y img002-0.png # Specchia e ruota di 90 gradi in senso antiorario l’immagine img001.png [03]

04) Ora spiego come ruotare di 5 gradi in senso orario l’immagine che ci interessa. Aprire un terminale nella cartella in cui si trova il file img002.png ed impartire il comando:
>$ ffmpeg -i img002.png -vf rotate=5*(PI/180) img003.png # Ruota di 5 gradi in senso orario l'immagine img002.png [04]
ffmpeg version 3.3.9 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
configuration: --disable-decoder=amrnb --disable-decoder=libopenjpeg --disable-mips32r2 --disable-mips32r6 --disable-mips64r6 --disable-mipsdsp --disable-mipsdspr2 --disable-mipsfpu --disable-msa --disable-libopencv --disable-podpages --disable-stripping --enable-avfilter --enable-avresample --enable-gcrypt --enable-gnutls --enable-gpl --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libilbc --enable-libkvazaar --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx265 --enable-libxvid --enable-libzvbi --enable-nonfree --enable-opengl --enable-openssl --enable-postproc --enable-pthreads --enable-shared --enable-version3 --incdir=/usr/include/x86_64-linux-gnu --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --toolchain=hardened --enable-frei0r --enable-chromaprint --enable-libx264 --enable-libiec61883 --enable-libdc1394 --enable-vaapi --disable-opencl --enable-libmfx --disable-altivec --shlibdir=/usr/lib/x86_64-linux-gnu
libavutil 55. 58.100 / 55. 58.100
libavcodec 57. 89.100 / 57. 89.100
libavformat 57. 71.100 / 57. 71.100
libavdevice 57. 6.100 / 57. 6.100
libavfilter 6. 82.100 / 6. 82.100
libavresample 3. 5. 0 / 3. 5. 0
libswscale 4. 6.100 / 4. 6.100
libswresample 2. 7.100 / 2. 7.100
libpostproc 54. 5.100 / 54. 5.100
Input #0, png_pipe, from 'img002.png':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: png, rgb24(pc), 720x1280 [SAR 1:1 DAR 9:16], 25 tbr, 25 tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (png (native) -> png (native))
Press [q] to stop, [?] for help
Output #0, image2, to 'img003.png':
Metadata:
encoder : Lavf57.71.100
Stream #0:0: Video: png, rgb24, 720x1280 [SAR 1:1 DAR 9:16], q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
Metadata:
encoder : Lavc57.89.100 png
frame= 1 fps=0.0 q=-0.0 Lsize=N/A time=00:00:00.04 bitrate=N/A speed=0.164x
video:1534kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
lmde3c@asus-f555y:/mnt/Dati1/GuidaFfmpeg/ffmpeg-Foto$
>$

Se invece dovesse essere necessario ruotare l’immagine di 5 gradi in senso antiorario, il comando corrispondente è il seguente:
4a) ffmpeg -i img002.png -vf rotate=-5*(PI/180) img003a.png # Ruota di 5 gradi in senso antiorario l’immagine img002.png [04]

05) Ora spiego come estrarre da img003.png un’immagine larga W=600 pixels ed alta H=338 pixels di cui il pixel in alto a sinistra dista X=20 pixels dal bordo sinistro ed Y=620 pixels dal bordo superiore dell’immagine img003.png. Aprire un terminale nella cartella in cui si trova il file img002.png ed impartire il comando:
>$ ffmpeg -i img003.png -vf "crop=600:338:20:620" img004.png # Estrae da img003.png un'immagine larga 600 pixels ed alta 338 pixels di cui il pixel in alto a sinistra dista 20 pixels dal bordo sinistro e 620 pixels dal bordo superiore dell'immagine img003.png [05]
ffmpeg version 3.3.9 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
configuration: --disable-decoder=amrnb --disable-decoder=libopenjpeg --disable-mips32r2 --disable-mips32r6 --disable-mips64r6 --disable-mipsdsp --disable-mipsdspr2 --disable-mipsfpu --disable-msa --disable-libopencv --disable-podpages --disable-stripping --enable-avfilter --enable-avresample --enable-gcrypt --enable-gnutls --enable-gpl --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libilbc --enable-libkvazaar --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx265 --enable-libxvid --enable-libzvbi --enable-nonfree --enable-opengl --enable-openssl --enable-postproc --enable-pthreads --enable-shared --enable-version3 --incdir=/usr/include/x86_64-linux-gnu --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --toolchain=hardened --enable-frei0r --enable-chromaprint --enable-libx264 --enable-libiec61883 --enable-libdc1394 --enable-vaapi --disable-opencl --enable-libmfx --disable-altivec --shlibdir=/usr/lib/x86_64-linux-gnu
libavutil 55. 58.100 / 55. 58.100
libavcodec 57. 89.100 / 57. 89.100
libavformat 57. 71.100 / 57. 71.100
libavdevice 57. 6.100 / 57. 6.100
libavfilter 6. 82.100 / 6. 82.100
libavresample 3. 5. 0 / 3. 5. 0
libswscale 4. 6.100 / 4. 6.100
libswresample 2. 7.100 / 2. 7.100
libpostproc 54. 5.100 / 54. 5.100
Input #0, png_pipe, from 'img003.png':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: png, rgb24(pc), 720x1280 [SAR 1:1 DAR 9:16], 25 tbr, 25 tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (png (native) -> png (native))
Press [q] to stop, [?] for help
Output #0, image2, to 'img004.png':
Metadata:
encoder : Lavf57.71.100>$ ffmpeg -i img004.png -vf scale=200:-1 img005.png # Modifica la risoluzione dell'immagine img004.png in modo che il lato maggiore sia di 200 pixels [06]
ffmpeg version 3.3.9 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
configuration: --disable-decoder=amrnb --disable-decoder=libopenjpeg --disable-mips32r2 --disable-mips32r6 --disable-mips64r6 --disable-mipsdsp --disable-mipsdspr2 --disable-mipsfpu --disable-msa --disable-libopencv --disable-podpages --disable-stripping --enable-avfilter --enable-avresample --enable-gcrypt --enable-gnutls --enable-gpl --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libilbc --enable-libkvazaar --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx265 --enable-libxvid --enable-libzvbi --enable-nonfree --enable-opengl --enable-openssl --enable-postproc --enable-pthreads --enable-shared --enable-version3 --incdir=/usr/include/x86_64-linux-gnu --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --toolchain=hardened --enable-frei0r --enable-chromaprint --enable-libx264 --enable-libiec61883 --enable-libdc1394 --enable-vaapi --disable-opencl --enable-libmfx --disable-altivec --shlibdir=/usr/lib/x86_64-linux-gnu
libavutil 55. 58.100 / 55. 58.100
libavcodec 57. 89.100 / 57. 89.100
libavformat 57. 71.100 / 57. 71.100
libavdevice 57. 6.100 / 57. 6.100
libavfilter 6. 82.100 / 6. 82.100
libavresample 3. 5. 0 / 3. 5. 0
libswscale 4. 6.100 / 4. 6.100
libswresample 2. 7.100 / 2. 7.100
libpostproc 54. 5.100 / 54. 5.100
Input #0, png_pipe, from 'img004.png':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: png, rgb24(pc), 600x338 [SAR 1:1 DAR 300:169], 25 tbr, 25 tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (png (native) -> png (native))
Press [q] to stop, [?] for help
Output #0, image2, to 'img005.png':
Metadata:
encoder : Lavf57.71.100
Stream #0:0: Video: png, rgb24, 200x113 [SAR 339:338 DAR 300:169], q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
Metadata:
encoder : Lavc57.89.100 png
frame= 1 fps=0.0 q=-0.0 Lsize=N/A time=00:00:00.04 bitrate=N/A speed=1.41x
video:54kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
>$
Stream #0:0: Video: png, rgb24, 600x338 [SAR 1:1 DAR 300:169], q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
Metadata:
encoder : Lavc57.89.100 png
frame= 1 fps=0.0 q=-0.0 Lsize=N/A time=00:00:00.04 bitrate=N/A speed=0.477x
video:366kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
>$

06) Ora spiego come modificare la risoluzione dell’immagine img004.png per ottenere un’immagine le cui dimensioni massime sono 200 pixels e mantenendo invariate le proporzioni. Aprire un terminale nella cartella in cui si trova il file img002.png ed impartire il comando:

>$ ffmpeg -i img004.png -vf scale=200:-1 img005.png # Modifica la risoluzione dell'immagine img004.png in modo che il lato maggiore sia di 200 pixels [06]
ffmpeg version 3.3.9 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
configuration: --disable-decoder=amrnb --disable-decoder=libopenjpeg --disable-mips32r2 --disable-mips32r6 --disable-mips64r6 --disable-mipsdsp --disable-mipsdspr2 --disable-mipsfpu --disable-msa --disable-libopencv --disable-podpages --disable-stripping --enable-avfilter --enable-avresample --enable-gcrypt --enable-gnutls --enable-gpl --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libilbc --enable-libkvazaar --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx265 --enable-libxvid --enable-libzvbi --enable-nonfree --enable-opengl --enable-openssl --enable-postproc --enable-pthreads --enable-shared --enable-version3 --incdir=/usr/include/x86_64-linux-gnu --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --toolchain=hardened --enable-frei0r --enable-chromaprint --enable-libx264 --enable-libiec61883 --enable-libdc1394 --enable-vaapi --disable-opencl --enable-libmfx --disable-altivec --shlibdir=/usr/lib/x86_64-linux-gnu
libavutil 55. 58.100 / 55. 58.100
libavcodec 57. 89.100 / 57. 89.100
libavformat 57. 71.100 / 57. 71.100
libavdevice 57. 6.100 / 57. 6.100
libavfilter 6. 82.100 / 6. 82.100
libavresample 3. 5. 0 / 3. 5. 0
libswscale 4. 6.100 / 4. 6.100
libswresample 2. 7.100 / 2. 7.100
libpostproc 54. 5.100 / 54. 5.100
Input #0, png_pipe, from 'img004.png':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: png, rgb24(pc), 600x338 [SAR 1:1 DAR 300:169], 25 tbr, 25 tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (png (native) -> png (native))
Press [q] to stop, [?] for help
Output #0, image2, to 'img005.png':
Metadata:
encoder : Lavf57.71.100
Stream #0:0: Video: png, rgb24, 200x113 [SAR 339:338 DAR 300:169], q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
Metadata:
encoder : Lavc57.89.100 png
frame= 1 fps=0.0 q=-0.0 Lsize=N/A time=00:00:00.04 bitrate=N/A speed=1.41x
video:54kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
>$

6a) Qualora occorra modificare la risoluzione di tutte le immagini contenute in una cartella, aprire un terminale nella cartella in cui si trovano tutte le immagini ed impartire il comando:
for i in *.png; do ffmpeg -i “$i” -vf scale=200:-1 “${i%.*}lr.PNG”; done # Modifica la risoluzione di tutte le immagini contenute nella cartella in modo che il lato maggiore sia di 200 pixels [06]