ubuntuusers.de

ffmpeg - crop-Ergebnis gezielt in einem größeren Format platzieren

Status: Gelöst | Ubuntu-Version: Ubuntu 22.04 (Jammy Jellyfish)
Antworten |

banause

Anmeldungsdatum:
17. November 2009

Beiträge: 301

Hallo Forum,

in einer technischen Anwendung habe ich folgendes Problem: das Ausgangsmaterial ist 320x176xIpxel groß

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
O-----------------------------------------O
|                                         |
|    Original-Video (Format 320x176)      |
|     mit interessantem Bereich i         |
|                                         |
|                                         |
|    i-------------------------i          |
|    |         210x10          |          |
|    i-------------------------i          |
|                                         |
|                                         |
O-----------------------------------------O

mit einem crop=210:10:18:75 kann ich mir den interessanten Bereich 210x10 Pixel herauslösen und erhalte dann das hier:

1
2
3
i-------------------------i
|    Bereich i            |
i-------------------------i

Ich möchte jetzt ffmpeg dazu bringen, mir oben einen Bereich von 210x10 Pixeln anzusetzen, auf dem ich Overlays platzieren kann. Das fertige Video e soll also 210x20 Pixel haben, wovon die untere Hälfte den unverzerrten interessanten Bereich i des Ausgangsvideos O zeigt.

1
2
3
4
5
e-------------------------e
|                         |
|.........................|
|    Bereich i            |
e-------------------------e

In einem ersten Schritt habe ich crop=210:10:18:75,scale=-1:20,setsar=1:1 versucht, was aber 1. nicht funktioniert hat und 2. keine Angabe erhalten hat, wo/wie die zusätzlichen Pixel angefügt werden sollen.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
ffmpeg -y -i rtsp://ip/cam0_0 -t 10s -filter_complex "crop=210:10:18:75,scale=-1:20,setsar=1:1, fps=10" -c:v libx264 -f mpegts format.avi
ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
  configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.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-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --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 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
Input #0, rtsp, from 'rtsp://ip/cam0_0':
  Metadata:
    title           : RTSP/RTP stream from a VMFD encoder
    comment         : cam0_0
  Duration: N/A, start: 0.079989, bitrate: N/A
  Stream #0:0: Video: h264 (Baseline), yuv420p(progressive), 320x176, 12.50 fps, 12.50 tbr, 90k tbn, 180k tbc
[Parsed_drawtext_3 @ 0x55c2f10d6140] Using "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"
Stream mapping:
  Stream #0:0 (h264) -> crop
  fps -> Stream #0:0 (libx264)
Press [q] to stop, [?] for help
[Parsed_drawtext_3 @ 0x55c2f10cd540] Using "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"
[swscaler @ 0x55c2f1301880] Warning: data is not aligned! This can lead to a speed loss
[libx264 @ 0x55c2f108ab80] using SAR=1/1
[libx264 @ 0x55c2f108ab80] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x55c2f108ab80] profile High, level 1.0, 4:2:0, 8-bit
Output #0, mpegts, to 'format.avi':
  Metadata:
    title           : RTSP/RTP stream from a VMFD encoder
    comment         : cam0_0
    encoder         : Lavf58.76.100
  Stream #0:0: Video: h264, yuv420p(tv, progressive), 420x20 [SAR 1:1 DAR 21:1], q=2-31, 10 fps, 90k tbn
    Metadata:
      encoder         : Lavc58.134.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
frame=   89 fps= 12 q=25.0 Lsize=      66kB time=00:00:09.70 bitrate=  55.4kbits/s speed=1.27x    
video:18kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 258.870697%
[libx264 @ 0x55c2f108ab80] frame I:1     Avg QP:17.50  size:  2288
[libx264 @ 0x55c2f108ab80] frame P:30    Avg QP:19.56  size:   340
[libx264 @ 0x55c2f108ab80] frame B:58    Avg QP:26.48  size:   107
[libx264 @ 0x55c2f108ab80] consecutive B-frames: 10.1%  6.7%  6.7% 76.4%
[libx264 @ 0x55c2f108ab80] mb I  I16..4:  0.0% 33.3% 66.7%
[libx264 @ 0x55c2f108ab80] mb P  I16..4:  0.5%  8.2%  7.5%  P16..4: 27.3% 16.5%  6.9%  0.0%  0.0%    skip:33.1%
[libx264 @ 0x55c2f108ab80] mb B  I16..4:  0.1%  1.6%  1.3%  B16..8: 23.6%  6.1%  1.2%  direct: 1.4%  skip:64.7%  L0:41.6% L1:48.9% BI: 9.5%
[libx264 @ 0x55c2f108ab80] 8x8 transform intra:48.7% inter:58.1%
[libx264 @ 0x55c2f108ab80] coded y,uvDC,uvAC intra: 63.4% 16.8% 0.0% inter: 15.9% 1.5% 0.0%
[libx264 @ 0x55c2f108ab80] i16 v,h,dc,p: 17% 33%  8% 42%
[libx264 @ 0x55c2f108ab80] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 50% 14% 17%  2%  2%  3%  2%  3%  7%
[libx264 @ 0x55c2f108ab80] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 64% 16%  9%  1%  2%  1%  3%  1%  3%
[libx264 @ 0x55c2f108ab80] i8c dc,h,v,p: 80% 16%  3%  0%
[libx264 @ 0x55c2f108ab80] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x55c2f108ab80] ref P L0: 70.4% 10.0% 12.8%  6.9%
[libx264 @ 0x55c2f108ab80] ref B L0: 85.6% 11.6%  2.8%
[libx264 @ 0x55c2f108ab80] ref B L1: 96.1%  3.9%
[libx264 @ 0x55c2f108ab80] kb/s:16.81

Weil scale ja vielleicht genau das macht, was der Name vermuten lässt (Skalieren), habe ich auch das hier versucht (scale=210:20,setsar=1:1). Hier hat aber das setsar=1:1 keinen Effekt.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
ffmpeg -y -i rtsp://ip/cam0_0 -t 10s -filter_complex "crop=210:10:18:75,scale=210:20,setsar=1:1, drawtext=text='%{localtime\:%d.%m.%Y %T}': x=1:y=0:fontsize=8: fontcolor=white: box=1: boxcolor=0x00000000@1, fps=10" -c:v libx264 -f mpegts format.avi
ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
  configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.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-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --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 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
Input #0, rtsp, from 'rtsp://ip/cam0_0':
  Metadata:
    title           : RTSP/RTP stream from a VMFD encoder
    comment         : cam0_0
  Duration: N/A, start: 0.079422, bitrate: N/A
  Stream #0:0: Video: h264 (Baseline), yuv420p(progressive), 320x176, 12.50 fps, 12.50 tbr, 90k tbn, 180k tbc
[Parsed_drawtext_3 @ 0x557296a2e800] Using "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"
Stream mapping:
  Stream #0:0 (h264) -> crop
  fps -> Stream #0:0 (libx264)
Press [q] to stop, [?] for help
[Parsed_drawtext_3 @ 0x5572969d3180] Using "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"
[swscaler @ 0x557296c62400] Warning: data is not aligned! This can lead to a speed loss
[libx264 @ 0x557296a02040] using SAR=1/1
[libx264 @ 0x557296a02040] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x557296a02040] profile High, level 1.0, 4:2:0, 8-bit
Output #0, mpegts, to 'format.avi':
  Metadata:
    title           : RTSP/RTP stream from a VMFD encoder
    comment         : cam0_0
    encoder         : Lavf58.76.100
  Stream #0:0: Video: h264, yuv420p(tv, progressive), 210x20 [SAR 1:1 DAR 21:2], q=2-31, 10 fps, 90k tbn
    Metadata:
      encoder         : Lavc58.134.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
frame=   90 fps= 12 q=25.0 Lsize=      59kB time=00:00:09.70 bitrate=  50.2kbits/s speed=1.25x    
video:10kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 517.518250%
[libx264 @ 0x557296a02040] frame I:1     Avg QP:18.29  size:  1909
[libx264 @ 0x557296a02040] frame P:41    Avg QP:19.44  size:   164
[libx264 @ 0x557296a02040] frame B:48    Avg QP:28.25  size:    25
[libx264 @ 0x557296a02040] consecutive B-frames: 20.0% 20.0% 20.0% 40.0%
[libx264 @ 0x557296a02040] mb I  I16..4:  0.0% 28.6% 71.4%
[libx264 @ 0x557296a02040] mb P  I16..4:  0.3%  1.4%  6.2%  P16..4: 26.6% 13.1%  6.4%  0.0%  0.0%    skip:46.1%
[libx264 @ 0x557296a02040] mb B  I16..4:  0.0%  0.1%  0.1%  B16..8: 26.6%  1.9%  0.0%  direct: 0.4%  skip:70.9%  L0:43.5% L1:50.5% BI: 6.0%
[libx264 @ 0x557296a02040] 8x8 transform intra:20.8% inter:54.8%
[libx264 @ 0x557296a02040] coded y,uvDC,uvAC intra: 58.5% 0.0% 0.0% inter: 12.3% 0.0% 0.0%
[libx264 @ 0x557296a02040] i16 v,h,dc,p: 67% 33%  0%  0%
[libx264 @ 0x557296a02040] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 49% 22% 13%  4%  1%  3%  1%  0%  7%
[libx264 @ 0x557296a02040] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 69%  7% 11%  2%  3%  2%  2%  1%  3%
[libx264 @ 0x557296a02040] i8c dc,h,v,p: 100%  0%  0%  0%
[libx264 @ 0x557296a02040] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x557296a02040] ref P L0: 75.8%  9.7% 10.2%  4.3%
[libx264 @ 0x557296a02040] ref B L0: 79.8% 16.3%  3.9%
[libx264 @ 0x557296a02040] ref B L1: 97.7%  2.3%
[libx264 @ 0x557296a02040] kb/s:8.77

Könnte mir bitte jemand einen Tipp geben, wie ich das gewünschte Videoformat mit dem einkopierten Bereich erhalte?

Vielen Dank.

Gruß,

banause

Gloster

Anmeldungsdatum:
9. April 2020

Beiträge: 417

banause

(Themenstarter)

Anmeldungsdatum:
17. November 2009

Beiträge: 301

Danke für Deinen Hinweis. Fast hätte ich Dich vergessen. Sorry.

Ja, mit pad funktioniert das prima. Man definiert die gewünschte größere Fläche und platziert dann darauf das eigentliche Video.

pad=210:45:0:35:black

erzeugt einen Frame mit 210 x 45 Pixeln. Darauf wird bei x=0 und y=35 der eigentliche Video-Frame gelegt. Die vom Video-Frame nicht belegte Fläche wird schwarz aufgefüllt.

Der gesamte Filter sieht damit so aus:

-filter_complex "crop=210:10:18:75,pad=210:45:0:35:black"

Mit crop schneide ich den interessanten Bereich aus und mit pad baue ich um diesen Bereich das gewünschte Frame-Format zusammen. An der Stelle (18, 75) des ursprünglichen Frames schneide eine Fläche von 210 x 10 Pixeln aus und setze sie bei (0,35) auf den neuen Frame mit 210 x 45 Pixeln.

Danke und Gruß,

banause

Antworten |