8

related to ; Create a screencast with ffmpeg: how to keep video+audio in sync?

ffmpeg version 2.2.git Copyright (c) 2000-2014 the FFmpeg developers

built on Mar 13 2014 16:08:45 with gcc 4.8 (Ubuntu/Linaro 4.8.1-10ubuntu9)

produces an error

"[swscaler @ 0xa314080] Warning: data is not aligned! This can lead to a speedloss"

The end result is a serious a/v sync issue, with the video as if it's in Fast-forward.

Has anyone encountered this problem? Any ideas for solutions?

The goal is screencasting;


    ffmpeg -f alsa -ac 2 -i hw:2,0 -f x11grab -r 30 -s 1920x1072 -i :0.0 -acodec libmp3lame -ab 320k -sameq /media/username/library-portable/video-studio/transfer-bin/BTSvlog02.avi
ffmpeg version 2.2.git Copyright (c) 2000-2014 the FFmpeg developers
  built on Mar 13 2014 16:08:45 with gcc 4.8 (Ubuntu/Linaro 4.8.1-10ubuntu9)
  configuration: --prefix=/home/username/ffmpeg_build --extra-cflags=-I/home/username/ffmpeg_build/include --extra-ldflags=-L/home/username/ffmpeg_build/lib --bindir=/home/username/bin --extra-libs=-ldl --enable-gpl --enable-libass --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab
  libavutil      52. 66.101 / 52. 66.101
  libavcodec     55. 52.102 / 55. 52.102
  libavformat    55. 34.101 / 55. 34.101
  libavdevice    55. 11.100 / 55. 11.100
  libavfilter     4.  3.100 /  4.  3.100
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 18.100 /  0. 18.100
  libpostproc    52.  3.100 / 52.  3.100
Option 'sameq' was removed. If you are looking for an option to preserve the quality (which is not what -sameq was for), use -qscale 0 or an equivalent quality factor option.
Failed to set value '1' for option 'sameq': Invalid argument
Error parsing global options: Invalid argument 

used to work.

I tried (and just tried again); (added/updated Monday, March 17th, 2014)


ffmpeg -f alsa -ac 2 -i hw:2,0 -f x11grab -r 30 -s 1920x1080 -i :0.0 -acodec libmp3lame -ab 320k /media/username/library-portable/video-studio/transfer-bin/BTSvlog03.avi
ffmpeg version 2.2.git Copyright (c) 2000-2014 the FFmpeg developers
  built on Mar 13 2014 16:08:45 with gcc 4.8 (Ubuntu/Linaro 4.8.1-10ubuntu9)
  configuration: --prefix=/home/username/ffmpeg_build --extra-cflags=-I/home/username/ffmpeg_build/include --extra-ldflags=-L/home/username/ffmpeg_build/lib --bindir=/home/username/bin --extra-libs=-ldl --enable-gpl --enable-libass --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab
  libavutil      52. 66.101 / 52. 66.101
  libavcodec     55. 52.102 / 55. 52.102
  libavformat    55. 34.101 / 55. 34.101
  libavdevice    55. 11.100 / 55. 11.100
  libavfilter     4.  3.100 /  4.  3.100
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 18.100 /  0. 18.100
  libpostproc    52.  3.100 / 52.  3.100
Guessed Channel Layout for  Input Stream #0.0 : stereo
Input #0, alsa, from 'hw:2,0':
  Duration: N/A, start: 1395098882.312775, bitrate: 1536 kb/s
    Stream #0:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
[x11grab @ 0x9ea2c20] device: :0.0 -> display: :0.0 x: 0 y: 0 width: 1920 height: 1080
[x11grab @ 0x9ea2c20] shared memory extension found
Input #1, x11grab, from ':0.0':
  Duration: N/A, start: 1395098882.360550, bitrate: 1990656 kb/s
    Stream #1:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 1920x1080, 1990656 kb/s, 30 tbr, 1000k tbn, 30 tbc
Output #0, avi, to '/media/username/library-portable/video-studio/transfer-bin/BTSvlog03.avi':
  Metadata:
    ISFT            : Lavf55.34.101
    Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 1920x1080, q=2-31, 200 kb/s, 30 tbn, 30 tbc
    Stream #0:1: Audio: mp3 (libmp3lame) (U[0][0][0] / 0x0055), 48000 Hz, stereo, s16p, 320 kb/s
Stream mapping:
  Stream #1:0 -> #0:0 (rawvideo -> mpeg4)
  Stream #0:0 -> #0:1 (pcm_s16le -> libmp3lame)
Press [q] to stop, [?] for help
[swscaler @ 0x9e81080] Warning: data is not aligned! This can lead to a speedloss
[alsa @ 0x9e98d00] ALSA buffer xrun.743kB time=00:00:00.13 bitrate=45644.2kbits/s    
[alsa @ 0x9e98d00] ALSA buffer xrun.1067kB time=00:00:01.70 bitrate=5131.9kbits/s    
[alsa @ 0x9e98d00] ALSA buffer xrun.2175kB time=00:00:05.95 bitrate=2994.1kbits/s    
[alsa @ 0x9e98d00] ALSA buffer xrun.5550kB time=00:00:17.68 bitrate=2570.6kbits/s    
frame=  580 fps=9.9 q=31.0 Lsize=    6540kB time=00:00:50.28 bitrate=1065.5kbits/s    
video:6433kB audio:34kB subtitle:0 data:0 global headers:0kB muxing overhead 1.125390%
Received signal 2: terminating.
 

Same results;

*Note, the FFMPEG issue mostly likely is a Ubuntu issue. I'm on Kubuntu 13.10 . There has been a split in the FFMPEG community and the Ubuntu group ended up on the side that left the FFMPEG project.

  • drop the option -sameq first and try again. ffmpeg version seems like the real thing although i can't say if any libraries are conflicting. But try dropping -sameq first. – Rajib Mar 15 '14 at 20:17
  • Comments won't allow the code, so I updated the question. Basically, same results. – Syborgia Alphas Mar 17 '14 at 23:40
  • I am getting this warning while merging multiple video files :( – Shyam Jul 16 '14 at 10:10
  • I'm just getting into FFmpeg development. I'll let you know what happens. – Syborgia Alphas Aug 14 '14 at 16:37
  • As elaborated in my comment below, the message is practically meaningless but a note to the future reader: The command used here is defaulting to the libx264 software encoder. This is enormously CPU-intensive. You might want to use your hardware acceleration capabilities (VAAPI / QSV) to offload most of the work and use libx264 afterwards as a second pass and only if you really really want the best possible compression / quality available. Oh and MP3 is 2014. Meanwhile there is OPUS (libopus). – Suuuehgi Nov 4 at 16:51
4

1080 / 16 = 67.5, which is not a whole number, presumably leading to writing 68 items to a buffer with 67 slots, potentially crashing the encoder. Something else might round up to 68, gradually deviating the reported number of processed bits.

According to this thread, the offending code is:

420 if ( (uintptr_t)dst[0]%16 || (uintptr_t)dst[1]%16 || (uintptr_t)dst[2]%16
421 || (uintptr_t)src[0]%16 || (uintptr_t)src[1]%16 || (uintptr_t)src[2]%16
422 || dstStride[0]%16 || dstStride[1]%16 || dstStride[2]%16 || dstStride[3]%16
423 || srcStride[0]%16 || srcStride[1]%16 || srcStride[2]%16 || srcStride[3]%16
424 ) {
425 static int warnedAlready=0;
426 int cpu_flags = av_get_cpu_flags();
427 if (HAVE_MMXEXT && (cpu_flags & AV_CPU_FLAG_SSE2) && !warnedAlready){
428 av_log(c, AV_LOG_WARNING, "Warning: data is not aligned! This can lead to a speedloss\n");
429 warnedAlready=1;
430 }
431 } 

1080 % 16 = 8, and the code expects 0, so the size should be a multiple of 16.

As noted in the comment, that's just a performance warning. I'd still try:

  1. A different resolution to rule that out.
  2. Different codecs and/or containers. Opus > AAC > Vorbis > MP3. And Matroska > AVI.
  3. Different distro. In my experience Ubuntu breaks something every update, so try rolling stable openSuSE Tumbleweed, rolling unstable Manjaro, polished and stable Mint, Bodhi, or Linuxfx.
| improve this answer | |
  • 1
    This is not more than a nice hint. This code reads: If the CPU supports Extended MMX and furthermore SSE2 instructions and the input dimensions are not a multiple of 16, print a warning that we're not running on warp-speed. That is, we're loosing a few percent in speed since the dimensions are not a perfect multiple of the vector instruction lengths. Cool message somehow! – Suuuehgi Nov 4 at 15:54
  • 1
    P.s. I was now curious on this one and yes, the message disappears as expected if you set the input dimensions to a multiple of 16 but I was unable to measure a real difference ( (0 +- 1) % ). – Suuuehgi Nov 4 at 16:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.