Newest 'ffmpeg' Questions - Stack Overflow
Les articles publiés sur le site
-
ffmpeg - camera surface stutters withffmpeg pulling thumbnails and audio from the mpegts stream
11 mai 2019, par badtraderAndroid 6 NDK 23. I have a camera device which pulls content from HDMI-in port (capture card).
I am displaying this input on a SurfaceView. At the same time, I am using MediaRecorder to access this h264 data in a mpegts container. I stream the mpegts into a ffmpeg process via pipe. I need this ffmpeg process to continuously extract thumbnails and PCM audio from the most recently captured data.
The problem is that after varying amount of time(depending on ffmpeg and mediarecorder settings) the surfaceview display begins to stutter very heavily. It will work for about 30 minutes without error before stuttering begins to become more and more noticeable.
Memory and cpu usage seems constant, cpu temps are low. I am stumped to what is happening here. Have exhausted nearly all the different ffmpeg settings. Should I be trying mediacodec rather than ffmpeg?
Even weirder this code works fine depending on the input device to hdmi-in capture. Some devices input will begin to stutter after a while while others won't.
-
Quickly extract multiple frames from multiple videos
11 mai 2019, par Werner LehmannI have a folder with videos files and need to extract 2+ frames from each of these, using a bash script on Linux. Currently I am doing this for each video file in a loop:
ffmpeg -nostdin -loglevel fatal -ss 15 -i "${filename}" -frames:v 1 "${out1}" ffmpeg -nostdin -loglevel fatal -sseof -15 -i "${filename}" -frames:v 1 "${out2}"
This extracts a frame 15s in and another frame 15s from the end. For N video files I need 2N ffmpeg calls. I experimented with
-vf select
, as was asked here, but this was much slower, especially with the requirement to select frames from the beginning and from the end. Also, I am already using GNU parallel which makes a big difference.Performance is actually not too bad. But my question is, can this be improved further? I am hoping for a way to
- to extract both frames in one ffmpeg call (faster than two separate calls), or
- to feed ffmpeg more than one file per call (to reduce process startup overhead)
-
Android ffmpeg - camera surface stutters withffmpeg pulling thumbnails and audio from the mpegts stream
11 mai 2019, par badtraderAndroid 6 NDK 23. I have a camera device which pulls content from HDMI-in port (capture card).
I am displaying this input on a SurfaceView. At the same time, I am using MediaRecorder to access this h264 data in a mpegts container. I stream the mpegts into a ffmpeg process via pipe. I need this ffmpeg process to continuously extract thumbnails and PCM audio from the most recently captured data.
The problem is that after varying amount of time(depending on ffmpeg and mediarecorder settings) the surfaceview display begins to stutter very heavily. It will work for about 30 minutes without error before stuttering begins to become more and more noticeable.
Memory and cpu usage seems constant, cpu temps are low. I am stumped to what is happening here. Have exhausted nearly all the different ffmpeg settings. Should I be trying mediacodec rather than ffmpeg?
Even weirder this code works fine depending on the input device to hdmi-in capture. Some devices input will begin to stutter after a while while others won't.
-
How can I remove downloaded video file after merging video and audio ?
11 mai 2019, par Locke JetI downloaded 1080p video from youtube using youtube-dl. Video file (.f137.mp4) and audio files (f140.m4a) were downloaded. Them ffmpeg merged the video file and the audio file to mp4 file(.mp4). I want to keep the .f140.m4a file and the .mp4 file, while remove the f137.mp4 file. How can I do?
I tried the --exec option in the youtube-dl, but it failed.
These were my commands:
root@OMV:~/youtube-dl# cat dl-test.sh DL_DIR="/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007" ALBUM="Test" mkdir -p "$DL_DIR/$ALBUM" youtube-dl --batch-file /root/youtube-dl/url-test.list --download-archive /root/youtube-dl/archive-test.list \ -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio' \ --write-sub --embed-sub --all-subs \ --embed-thumbnail --add-metadata \ -o "$DL_DIR/$ALBUM/%(title)s.%(ext)s" \ --exec "rm "$(ls {} | cut -d . -f1)""
The result were:
root@OMV:~/youtube-dl# ./dl-test.sh ls: cannot access '{}': No such file or directory ... [ffmpeg] Merging formats into "/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test/UpTown Spot.mp4" ... [atomicparsley] Adding thumbnail to "/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test/UpTown Spot.mp4" [exec] Executing command: rm '/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test/UpTown Spot.mp4'
The .mp4 file was deleted, the .f137.mp4 file was still there. I got the opposite result.
root@OMV:~/youtube-dl# ls '/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test' UpTown Spot.f137.mp4 UpTown Spot.f140.m4a
Update 1: I changed to
--exec "rm "$(ls {} -1 | sed -n '/\.f[0-9]*\.mp4$/p')""
It still remove the .mp4 file. The output was:
root@OMV:~/youtube-dl# echo "" > "/root/youtube-dl/archive-test.list" root@OMV:~/youtube-dl# ./dl-test.sh ls: cannot access '{}': No such file or directory ... [download] /srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test/UpTown Spot.mp4 has already been downloaded and merged ... [exec] Executing command: rm '/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test/UpTown Spot.mp4'
Then changed it into:
--exec "rm "$(ls -1 | sed -n '/\.f[0-9]*\.mp4$/p')""
The ouput was almost the same:
root@OMV:~/youtube-dl# ./dl-test.sh ... [exec] Executing command: rm '/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test/UpTown Spot.mp4'
I tested the normal expression in SHELL, it worked:
root@OMV:~/youtube-dl# cd /srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test root@OMV:/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test# ls "$(ls /srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test | sed -n '/\.f[0-9]*\.mp4$/p')" UpTown Spot.f137.mp4 root@OMV:/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test# rm "$(ls /srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test | sed -n '/\.f[0-9]*\.mp4$/p')"
But the similar command running in the youtube-dl --exec option failed!
Update 2: It seemed that the cmd after pipeline would not be executed.
root@OMV:~/youtube-dl# ./dl-test.sh + DL_DIR=/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007 + ALBUM=Test + mkdir -p /srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test + youtube-dl --batch-file /root/youtube-dl/url-test.list --download-archive /root/youtube-dl/archive-test.list -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio' --write-sub --embed-sub --all-subs --embed-thumbnail --add-metadata -o '/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test/%(title)s.%(ext)s' --exec 'ls | grep mp4' ... [exec] Executing command: ls | grep mp4 '/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test/UpTown Spot.mp4' Binary file /srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test/UpTown Spot.mp4 matches ls: write error: Broken pipe
-
I can't compile ffmpeg, don't know how to install sdl2 properly
11 mai 2019, par woopwoop399I'm compiling ffmpeg, on windows, with mingw-w64, and I need SDL2 so that the ffplay in ffmpeg compiles. I installed mingw-w64 using the web installer, I installed msys (to run the
./configure
that comes with ffmpeg) using the all in one package provided by mingw-w64. I installed SDL2 by downloading dev binaries from their site and runningmake native
in msys.So, it seems SDL2 isn't installed properly or something.
Here is the problematic part in
./configure
:if enabled sdl2; then echo "SDL2-1" SDL2_CONFIG="${cross_prefix}sdl2-config" test_pkg_config sdl2 "sdl2 >= 2.0.1 sdl2 < 2.1.0" SDL_events.h SDL_PollEvent echo "SDL2-2" if disabled sdl2 && "${SDL2_CONFIG}" --version > /dev/null 2>&1; then echo "SDL2-3" sdl2_cflags=$("${SDL2_CONFIG}" --cflags) sdl2_extralibs=$("${SDL2_CONFIG}" --libs) echo "SDL2-config ${SDL2_CONFIG}" echo "SDL2-cflags ${sdl2_cflags}" echo "SDL2-libs ${sdl2_extralibs}" test_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x020001" $sdl2_cflags && echo "SDL2-4" && test_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x020100" $sdl2_cflags && echo "SDL2-5" && check_func_headers SDL_events.h SDL_PollEvent $sdl2_extralibs $sdl2_cflags && echo "SDL2-6-final" && enable sdl2 fi if test $target_os = "mingw32"; then sdl2_extralibs=$(filter_out '-mwindows' $sdl2_extralibs) fi fi
This is the result of it, it never gets to
SDL2-6-final
andenable sdl2
SDL2-1 SDL2-2 SDL2-3 SDL2-config sdl2-config SDL2-cflags -I/usr/include/SDL2 -Dmain=SDL_main SDL2-libs -L/usr/lib -lmingw32 -lSDL2main -lSDL2 -mwindows SDL2-4 SDL2-5
This is the sdl2 installation log:
User@NEW-PC /c/Users/User/Downloads/games/compilers/SDL2-2.0.9 $ make native make install-package arch=i686-w64-mingw32 prefix=/usr make[1]: Entering directory `/c/Users/User/Downloads/games/compilers/SDL2-2.0.9' `bin/sdl2-config' -> `/usr/bin/sdl2-config' `bin/SDL2.dll' -> `/usr/bin/SDL2.dll' `include' -> `/usr/include' `include/SDL2' -> `/usr/include/SDL2' `include/SDL2/begin_code.h' -> `/usr/include/SDL2/begin_code.h' `include/SDL2/close_code.h' -> `/usr/include/SDL2/close_code.h' `include/SDL2/SDL.h' -> `/usr/include/SDL2/SDL.h' `include/SDL2/SDL_assert.h' -> `/usr/include/SDL2/SDL_assert.h' `include/SDL2/SDL_atomic.h' -> `/usr/include/SDL2/SDL_atomic.h' `include/SDL2/SDL_audio.h' -> `/usr/include/SDL2/SDL_audio.h' `include/SDL2/SDL_bits.h' -> `/usr/include/SDL2/SDL_bits.h' `include/SDL2/SDL_blendmode.h' -> `/usr/include/SDL2/SDL_blendmode.h' `include/SDL2/SDL_clipboard.h' -> `/usr/include/SDL2/SDL_clipboard.h' `include/SDL2/SDL_config.h' -> `/usr/include/SDL2/SDL_config.h' `include/SDL2/SDL_cpuinfo.h' -> `/usr/include/SDL2/SDL_cpuinfo.h' `include/SDL2/SDL_egl.h' -> `/usr/include/SDL2/SDL_egl.h' `include/SDL2/SDL_endian.h' -> `/usr/include/SDL2/SDL_endian.h' `include/SDL2/SDL_error.h' -> `/usr/include/SDL2/SDL_error.h' `include/SDL2/SDL_events.h' -> `/usr/include/SDL2/SDL_events.h' `include/SDL2/SDL_filesystem.h' -> `/usr/include/SDL2/SDL_filesystem.h' `include/SDL2/SDL_gamecontroller.h' -> `/usr/include/SDL2/SDL_gamecontroller.h' `include/SDL2/SDL_gesture.h' -> `/usr/include/SDL2/SDL_gesture.h' `include/SDL2/SDL_haptic.h' -> `/usr/include/SDL2/SDL_haptic.h' `include/SDL2/SDL_hints.h' -> `/usr/include/SDL2/SDL_hints.h' `include/SDL2/SDL_joystick.h' -> `/usr/include/SDL2/SDL_joystick.h' `include/SDL2/SDL_keyboard.h' -> `/usr/include/SDL2/SDL_keyboard.h' `include/SDL2/SDL_keycode.h' -> `/usr/include/SDL2/SDL_keycode.h' `include/SDL2/SDL_loadso.h' -> `/usr/include/SDL2/SDL_loadso.h' `include/SDL2/SDL_log.h' -> `/usr/include/SDL2/SDL_log.h' `include/SDL2/SDL_main.h' -> `/usr/include/SDL2/SDL_main.h' `include/SDL2/SDL_messagebox.h' -> `/usr/include/SDL2/SDL_messagebox.h' `include/SDL2/SDL_mouse.h' -> `/usr/include/SDL2/SDL_mouse.h' `include/SDL2/SDL_mutex.h' -> `/usr/include/SDL2/SDL_mutex.h' `include/SDL2/SDL_name.h' -> `/usr/include/SDL2/SDL_name.h' `include/SDL2/SDL_opengl.h' -> `/usr/include/SDL2/SDL_opengl.h' `include/SDL2/SDL_opengles.h' -> `/usr/include/SDL2/SDL_opengles.h' `include/SDL2/SDL_opengles2.h' -> `/usr/include/SDL2/SDL_opengles2.h' `include/SDL2/SDL_opengles2_gl2.h' -> `/usr/include/SDL2/SDL_opengles2_gl2.h' `include/SDL2/SDL_opengles2_gl2ext.h' -> `/usr/include/SDL2/SDL_opengles2_gl2ext.h' `include/SDL2/SDL_opengles2_gl2platform.h' -> `/usr/include/SDL2/SDL_opengles2_gl2platform.h' `include/SDL2/SDL_opengles2_khrplatform.h' -> `/usr/include/SDL2/SDL_opengles2_khrplatform.h' `include/SDL2/SDL_opengl_glext.h' -> `/usr/include/SDL2/SDL_opengl_glext.h' `include/SDL2/SDL_pixels.h' -> `/usr/include/SDL2/SDL_pixels.h' `include/SDL2/SDL_platform.h' -> `/usr/include/SDL2/SDL_platform.h' `include/SDL2/SDL_power.h' -> `/usr/include/SDL2/SDL_power.h' `include/SDL2/SDL_quit.h' -> `/usr/include/SDL2/SDL_quit.h' `include/SDL2/SDL_rect.h' -> `/usr/include/SDL2/SDL_rect.h' `include/SDL2/SDL_render.h' -> `/usr/include/SDL2/SDL_render.h' `include/SDL2/SDL_revision.h' -> `/usr/include/SDL2/SDL_revision.h' `include/SDL2/SDL_rwops.h' -> `/usr/include/SDL2/SDL_rwops.h' `include/SDL2/SDL_scancode.h' -> `/usr/include/SDL2/SDL_scancode.h' `include/SDL2/SDL_sensor.h' -> `/usr/include/SDL2/SDL_sensor.h' `include/SDL2/SDL_shape.h' -> `/usr/include/SDL2/SDL_shape.h' `include/SDL2/SDL_stdinc.h' -> `/usr/include/SDL2/SDL_stdinc.h' `include/SDL2/SDL_surface.h' -> `/usr/include/SDL2/SDL_surface.h' `include/SDL2/SDL_system.h' -> `/usr/include/SDL2/SDL_system.h' `include/SDL2/SDL_syswm.h' -> `/usr/include/SDL2/SDL_syswm.h' `include/SDL2/SDL_test.h' -> `/usr/include/SDL2/SDL_test.h' `include/SDL2/SDL_test_assert.h' -> `/usr/include/SDL2/SDL_test_assert.h' `include/SDL2/SDL_test_common.h' -> `/usr/include/SDL2/SDL_test_common.h' `include/SDL2/SDL_test_compare.h' -> `/usr/include/SDL2/SDL_test_compare.h' `include/SDL2/SDL_test_crc32.h' -> `/usr/include/SDL2/SDL_test_crc32.h' `include/SDL2/SDL_test_font.h' -> `/usr/include/SDL2/SDL_test_font.h' `include/SDL2/SDL_test_fuzzer.h' -> `/usr/include/SDL2/SDL_test_fuzzer.h' `include/SDL2/SDL_test_harness.h' -> `/usr/include/SDL2/SDL_test_harness.h' `include/SDL2/SDL_test_images.h' -> `/usr/include/SDL2/SDL_test_images.h' `include/SDL2/SDL_test_log.h' -> `/usr/include/SDL2/SDL_test_log.h' `include/SDL2/SDL_test_md5.h' -> `/usr/include/SDL2/SDL_test_md5.h' `include/SDL2/SDL_test_memory.h' -> `/usr/include/SDL2/SDL_test_memory.h' `include/SDL2/SDL_test_random.h' -> `/usr/include/SDL2/SDL_test_random.h' `include/SDL2/SDL_thread.h' -> `/usr/include/SDL2/SDL_thread.h' `include/SDL2/SDL_timer.h' -> `/usr/include/SDL2/SDL_timer.h' `include/SDL2/SDL_touch.h' -> `/usr/include/SDL2/SDL_touch.h' `include/SDL2/SDL_types.h' -> `/usr/include/SDL2/SDL_types.h' `include/SDL2/SDL_version.h' -> `/usr/include/SDL2/SDL_version.h' `include/SDL2/SDL_video.h' -> `/usr/include/SDL2/SDL_video.h' `include/SDL2/SDL_vulkan.h' -> `/usr/include/SDL2/SDL_vulkan.h' `lib/cmake' -> `/usr/lib/cmake' `lib/cmake/SDL2' -> `/usr/lib/cmake/SDL2' `lib/cmake/SDL2/sdl2-config.cmake' -> `/usr/lib/cmake/SDL2/sdl2-config.cmake' `lib/libSDL2.a' -> `/usr/lib/libSDL2.a' `lib/libSDL2.dll.a' -> `/usr/lib/libSDL2.dll.a' `lib/libSDL2.la' -> `/usr/lib/libSDL2.la' `lib/libSDL2main.a' -> `/usr/lib/libSDL2main.a' `lib/libSDL2main.la' -> `/usr/lib/libSDL2main.la' `lib/libSDL2_test.a' -> `/usr/lib/libSDL2_test.a' `lib/libSDL2_test.la' -> `/usr/lib/libSDL2_test.la' `lib/pkgconfig' -> `/usr/lib/pkgconfig' `lib/pkgconfig/sdl2.pc' -> `/usr/lib/pkgconfig/sdl2.pc' `share/aclocal/sdl2.m4' -> `/usr/share/aclocal/sdl2.m4' make[1]: Leaving directory `/c/Users/User/Downloads/games/compilers/SDL2-2.0.9'
And this is what happens when I just comment out that last check in
./configure
and enable sdl2 anyway:c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2main.a when searching for -lSDL2main
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2.dll.a when searching for -lSDL2
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lSDL2
I tried using msys2 instead, it compiles, but the debugger there doesn't work for some reason. I need to run the source code of ffmpeg in debugger to have a chance of understanding anything there. I need to use the combination of codeblocks and gdb, and programs compiled with msys2 use weird pathnames like /c/bla/bla/bla/main.c, and codeblocks is righteously weirded out by that. The mingw-w64 uses more sane pathnames, I just checked that.
Checked
ffbuild/config.log
, the problem is here:`c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lSDL2`
More in full:
test_pkg_config sdl2 sdl2 >= 2.0.1 sdl2 < 2.1.0 SDL_events.h SDL_PollEvent pkg-config --exists --print-errors sdl2 >= 2.0.1 sdl2 < 2.1.0 check_func_headers SDL_events.h SDL_PollEvent -Dmain=SDL_main -IC:/msys/include/SDL2 -mwindows -LC:/msys/lib -lmingw32 -lSDL2main -lSDL2 test_ld cc -Dmain=SDL_main -IC:/msys/include/SDL2 -mwindows -LC:/msys/lib -lmingw32 -lSDL2main -lSDL2 test_cc -Dmain=SDL_main -IC:/msys/include/SDL2 -mwindows -LC:/msys/lib BEGIN /tmp/ffconf.atBoPojc/test.c 1 #include 2 #include 3 long check_SDL_PollEvent(void) { return (long) SDL_PollEvent; } 4 int main(void) { int ret = 0; 5 ret |= ((intptr_t)check_SDL_PollEvent) & 0xFFFF; 6 return ret; } END /tmp/ffconf.atBoPojc/test.c gcc -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1 -D__printf__=__gnu_printf__ -D_WIN32_WINNT=0x0600 -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c11 -Dmain=SDL_main -IC:/msys/include/SDL2 -mwindows -LC:/msys/lib -c -o /tmp/ffconf.atBoPojc/test.o /tmp/ffconf.atBoPojc/test.c C:/Users/User/AppData/Local/Temp/ffconf.atBoPojc/test.c: In function 'check_SDL_PollEvent': C:/Users/User/AppData/Local/Temp/ffconf.atBoPojc/test.c:3:41: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] long check_SDL_PollEvent(void) { return (long) SDL_PollEvent; } ^ gcc -Wl,--nxcompat,--dynamicbase -Wl,--high-entropy-va -Wl,--as-needed -Wl,--image-base,0x140000000 -Dmain=SDL_main -IC:/msys/include/SDL2 -mwindows -LC:/msys/lib -o /tmp/ffconf.atBoPojc/test.exe /tmp/ffconf.atBoPojc/test.o -lmingw32 -lSDL2main -lSDL2 c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2main.a when searching for -lSDL2main c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib\libSDL2main.a when searching for -lSDL2main c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2main.a when searching for -lSDL2main c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lSDL2main c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2.dll.a when searching for -lSDL2 c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2.a when searching for -lSDL2 c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib\libSDL2.a when searching for -lSDL2 c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2.dll.a when searching for -lSDL2 c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2.a when searching for -lSDL2 c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lSDL2 collect2.exe: error: ld returned 1 exit status
Okay, I managed to compile. I removed the sdl libraries from
C:/msys/lib
, and added them toC:\Program Files\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\lib