FFmpeg is een opensource, krachtige audio- en video-omzetter. Met FFmpeg kunnen we bijna alle soorten mediabestanden encoderen, decoderen, transcoderen, muxen, demuxen, opnemen, verkleinen, streamen, filteren en afspelen. En dat niet alleen, we kunnen ook live audio/video streamen. FFmpeg wordt geleverd met een heleboel filters om verschillende taken uit te voeren. Eén van de minder bekende, maar toch nuttige filters is zoompan. Met zoompan kunnen we eenvoudig in- en uitzoomen op video's in Linux. We laten je zien hoe je dat doet aan de hand van een voorbeeldopdracht.
FFmpeg is beschikbaar in de standaard softwarebronnen van Debian. Open je Terminal en voer de volgende opdracht uit om het te installeren:
dany@pindabook:~$ sudo apt-get install ffmpeg
[sudo] wachtwoord voor dany:
Pakketlijsten worden ingelezen... Klaar
Boom van vereisten wordt opgebouwd... Klaar
De statusinformatie wordt gelezen... Klaar
De volgende extra pakketten zullen geïnstalleerd worden:
libavdevice59
Voorgestelde pakketten:
ffmpeg-doc
De volgende NIEUWE pakketten zullen geïnstalleerd worden:
ffmpeg libavdevice59
0 opgewaardeerd, 2 nieuw geïnstalleerd, 0 te verwijderen en 0 niet opgewaardeerd.
Er moeten 1.918 kB aan archieven opgehaald worden.
Na deze bewerking zal er 2.722 kB extra schijfruimte gebruikt worden.
Wilt u doorgaan? [J/n]
Ophalen:1 http://deb.debian.org/debian bookworm/main amd64 libavdevice59 amd64 7:5.1.3-1 [109 kB]
Ophalen:2 http://deb.debian.org/debian bookworm/main amd64 ffmpeg amd64 7:5.1.3-1 [1.809 kB]
1.918 kB opgehaald in 0s (9.148 kB/s)
Voorheen niet geselecteerd pakket libavdevice59:amd64 wordt geselecteerd.
(Database wordt ingelezen ... 168893 bestanden en mappen momenteel geïnstalleerd.)
Uitpakken van .../libavdevice59_7%3a5.1.3-1_amd64.deb wordt voorbereid...
Bezig met uitpakken van libavdevice59:amd64 (7:5.1.3-1) ...
Voorheen niet geselecteerd pakket ffmpeg wordt geselecteerd.
Uitpakken van .../ffmpeg_7%3a5.1.3-1_amd64.deb wordt voorbereid...
Bezig met uitpakken van ffmpeg (7:5.1.3-1) ...
Instellen van libavdevice59:amd64 (7:5.1.3-1) ...
Instellen van ffmpeg (7:5.1.3-1) ...
Bezig met afhandelen van triggers voor man-db (2.11.2-2) ...
Bezig met afhandelen van triggers voor libc-bin (2.36-9) ...
We gebruiken als voorbeeld de volgende video:
Eerst vragen we de eigenschappen van deze video op met:
dany@pindabook:~$ ffmpeg -i Downloads/input.mp4
ffmpeg version 5.1.3-1 Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 12 (Debian 12.2.0-14)
configuration: --prefix=/usr --extra-version=1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --disable-sndio --enable-libjxl --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared
libavutil 57. 28.100 / 57. 28.100
libavcodec 59. 37.100 / 59. 37.100
libavformat 59. 27.100 / 59. 27.100
libavdevice 59. 7.100 / 59. 7.100
libavfilter 8. 44.100 / 8. 44.100
libswscale 6. 7.100 / 6. 7.100
libswresample 4. 7.100 / 4. 7.100
libpostproc 56. 6.100 / 56. 6.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Downloads/input.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42mp41isomavc1
creation_time : 2017-06-11T16:27:16.000000Z
Duration: 00:00:19.20, start: 0.000000, bitrate: 2488 kb/s
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1366x720 [SAR 1:1 DAR 683:360], 2485 kb/s, 25 fps, 25 tbr, 25 tbn (default)
Metadata:
creation_time : 2017-06-11T16:27:16.000000Z
handler_name : L-SMASH Video Handler
vendor_id : [0][0][0][0]
encoder : AVC Coding
At least one output file must be specified
Let op de de eigenschap fps (beelden per seconde) in de regel die begint met Stream, 25 fps in ons voorbeeld.
Voer de volgende FFmpeg opdracht uit om elke 10 seconden in en uit te zoomen:
dany@pindabook:~$ ffmpeg -i Downloads/input.mp4 -vf "zoompan=z='if(lte(mod(time,10),3),2,1)':d=1:x=iw/2-(iw/zoom/2):y=ih/2-(ih/zoom/2):fps=25" Downloads/output.mp4
ffmpeg version 5.1.3-1 Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 12 (Debian 12.2.0-14)
configuration: --prefix=/usr --extra-version=1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --disable-sndio --enable-libjxl --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared
libavutil 57. 28.100 / 57. 28.100
libavcodec 59. 37.100 / 59. 37.100
libavformat 59. 27.100 / 59. 27.100
libavdevice 59. 7.100 / 59. 7.100
libavfilter 8. 44.100 / 8. 44.100
libswscale 6. 7.100 / 6. 7.100
libswresample 4. 7.100 / 4. 7.100
libpostproc 56. 6.100 / 56. 6.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Downloads/input.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42mp41isomavc1
creation_time : 2017-06-11T16:27:16.000000Z
Duration: 00:00:19.20, start: 0.000000, bitrate: 2488 kb/s
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1366x720 [SAR 1:1 DAR 683:360], 2485 kb/s, 25 fps, 25 tbr, 25 tbn (default)
Metadata:
creation_time : 2017-06-11T16:27:16.000000Z
handler_name : L-SMASH Video Handler
vendor_id : [0][0][0][0]
encoder : AVC Coding
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 0x555ac9ac3d80] using SAR=1/1
[libx264 @ 0x555ac9ac3d80] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x555ac9ac3d80] profile High, level 3.1, 4:2:0, 8-bit
[libx264 @ 0x555ac9ac3d80] 264 - core 164 r3095 baee400 - H.264/MPEG-4 AVC codec - Copyleft 2003-2022 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'Downloads/output.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42mp41isomavc1
encoder : Lavf59.27.100
Stream #0:0(und): Video: h264 (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 12800 tbn (default)
Metadata:
creation_time : 2017-06-11T16:27:16.000000Z
handler_name : L-SMASH Video Handler
vendor_id : [0][0][0][0]
encoder : Lavc59.37.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
frame= 480 fps= 21 q=-1.0 Lsize= 5761kB time=00:00:19.08 bitrate=2473.5kbits/s speed=0.854x
video:5755kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.113122%
[libx264 @ 0x555ac9ac3d80] frame I:4 Avg QP:19.91 size:143777
[libx264 @ 0x555ac9ac3d80] frame P:128 Avg QP:22.38 size: 33176
[libx264 @ 0x555ac9ac3d80] frame B:348 Avg QP:27.54 size: 3076
[libx264 @ 0x555ac9ac3d80] consecutive B-frames: 1.5% 4.2% 4.4% 90.0%
[libx264 @ 0x555ac9ac3d80] mb I I16..4: 1.7% 70.7% 27.7%
[libx264 @ 0x555ac9ac3d80] mb P I16..4: 0.2% 2.1% 0.5% P16..4: 33.2% 28.7% 21.1% 0.0% 0.0% skip:14.3%
[libx264 @ 0x555ac9ac3d80] mb B I16..4: 0.0% 0.0% 0.0% B16..8: 41.9% 5.1% 0.8% direct: 0.9% skip:51.3% L0:40.2% L1:52.8% BI: 7.0%
[libx264 @ 0x555ac9ac3d80] 8x8 transform intra:73.2% inter:59.0%
[libx264 @ 0x555ac9ac3d80] coded y,uvDC,uvAC intra: 86.2% 86.9% 50.5% inter: 13.6% 13.1% 0.4%
[libx264 @ 0x555ac9ac3d80] i16 v,h,dc,p: 23% 22% 23% 32%
[libx264 @ 0x555ac9ac3d80] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 18% 10% 23% 6% 8% 10% 6% 9% 10%
[libx264 @ 0x555ac9ac3d80] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 10% 17% 8% 10% 11% 7% 9% 8%
[libx264 @ 0x555ac9ac3d80] i8c dc,h,v,p: 61% 13% 17% 8%
[libx264 @ 0x555ac9ac3d80] Weighted P-Frames: Y:1.6% UV:0.0%
[libx264 @ 0x555ac9ac3d80] ref P L0: 73.7% 19.4% 6.1% 0.8% 0.0%
[libx264 @ 0x555ac9ac3d80] ref B L0: 97.7% 2.1% 0.2%
[libx264 @ 0x555ac9ac3d80] ref B L1: 98.0% 2.0%
[libx264 @ 0x555ac9ac3d80] kb/s:2455.03
Deze opdracht zoomt in naar het midden van de video tot 2x zoom voor de eerste 3 seconden van elk tijdsblok van 10 seconden. Vervang Downloads/input.mp4 door de map- en bestandsnaam van je eigen video. Pas ook de waarden aan volgens je vereisten en stel de FPS voor het filter in zodat deze overeenkomt met de invoer (originele video).
Dit is het resultaat:
De video is de eerste 3 seconden ingezoomd op 2X en daarna weer terug naar normaal (uitzoomen). Op precies de 10e seconde wordt de video opnieuw ingezoomd voor de eerste 3 seconden en de cyclus gaat door tot de video eindigt.
Hieronder een afbeelding met de helppagina van de FFmpeg Zoompan filter. Op het einde daarvan staan nog enkele voorbeelden.
FFmpeg zelf (eerste opdracht) en al zijn niet meer door andere software gebruikte afhankelijke pakketten (tweede opdracht), verwijder je met de volgende twee opdrachten:
dany@pindabook:~$sudo apt purge ffmpeg
[sudo] wachtwoord voor dany: Pakketlijsten worden ingelezen... Klaar Boom van vereisten wordt opgebouwd... Klaar De statusinformatie wordt gelezen... Klaar Het volgende pakket is automatisch geïnstalleerd en is niet langer nodig: libavdevice59 Gebruik 'sudo apt autoremove' om het te verwijderen. De volgende pakketten zullen VERWIJDERD worden: ffmpeg* 0 opgewaardeerd, 0 nieuw geïnstalleerd, 1 te verwijderen en 0 niet opgewaardeerd. Na deze bewerking zal er 2.430 kB schijfruimte vrijkomen. Wilt u doorgaan? [J/n] (Database wordt ingelezen ... 173871 bestanden en mappen momenteel geïnstalleerd.) ffmpeg (7:5.1.3-1) wordt verwijderd ... Bezig met afhandelen van triggers voor man-db (2.11.2-2) ... dany@pindabook:~$sudo apt autoremove
Pakketlijsten worden ingelezen... Klaar Boom van vereisten wordt opgebouwd... Klaar De statusinformatie wordt gelezen... Klaar De volgende pakketten zullen VERWIJDERD worden: libavdevice59 0 opgewaardeerd, 0 nieuw geïnstalleerd, 1 te verwijderen en 0 niet opgewaardeerd. Na deze bewerking zal er 292 kB schijfruimte vrijkomen. Wilt u doorgaan? [J/n] (Database wordt ingelezen ... 173836 bestanden en mappen momenteel geïnstalleerd.) libavdevice59:amd64 (7:5.1.3-1) wordt verwijderd ... Bezig met afhandelen van triggers voor libc-bin (2.36-9) ...