新的FFMPEG;“[swscaler @ 0xa314080] 警告:数据未对齐!这会导致速度损失”

Syb*_*has 9 video ffmpeg ubuntu

相关 ; 使用 ffmpeg 创建截屏视频:如何保持视频+音频同步?

ffmpeg version 2.2.git Copyright (c) 2000-2014 the FFmpeg developers
Run Code Online (Sandbox Code Playgroud)

构建于 2014 年 3 月 13 日 16:08:45,使用 gcc 4.8(Ubuntu/Linaro 4.8.1-10ubuntu9)

产生错误

"[swscaler @ 0xa314080] Warning: data is not aligned! This can lead to a speedloss"
Run Code Online (Sandbox Code Playgroud)

最终结果是一个严重的 a/v 同步问题,视频好像是快进的。

有没有人遇到过这个问题?任何解决方案的想法?

目标是截屏;


    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 
Run Code Online (Sandbox Code Playgroud)

曾经工作。

我试过(然后又试了一次);(于 2014 年 3 月 17 日星期一添加/更新


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.
 
Run Code Online (Sandbox Code Playgroud)

结果相同;

*注意,FFMPEG 问题很可能是 Ubuntu 问题。我在 Kubuntu 13.10 上。FFMPEG 社区出现了分裂,Ubuntu 小组最终站在了离开 FFMPEG 项目的一边。

Cee*_*man 5

1080 / 16 = 67.5,这不是整数,大概会导致将 68 个项目写入具有 67 个插槽的缓冲区,从而可能使编码器崩溃。其他东西可能会四舍五入到 68,逐渐偏离报告的处理位数。

根据这个线程,有问题的代码是:

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 } 
Run Code Online (Sandbox Code Playgroud)

1080 % 16 = 8,代码期望为0,所以大小应该是16的倍数。

正如评论中所指出的,这只是一个性能警告。我仍然会尝试:

  1. 一个不同的解决方案来排除这种情况。
  2. 不同的编解码器和/或容器。作品 > AAC > Vorbis > MP3。和 Matroska > AVI。
  3. 不同的发行版。根据我的经验,Ubuntu 每次更新都会破坏一些东西,所以尝试滚动稳定的 openSuSE Tumbleweed、滚动不稳定的 Manjaro、抛光和稳定的 Mint、Bodhi 或 Linuxfx。

  • 这只不过是一个很好的提示。此代码为:如果 CPU 支持 [Extended MMX](https://en.wikipedia.org/wiki/Extended_MMX) 和 [SSE2 指令](https://en.wikipedia.org/wiki/SSE2) 和输入维度不是 16 的倍数,打印警告我们没有以扭曲速度运行。也就是说,由于维度不是向量指令长度的完美倍数,我们在速度上损失了几个百分点。不知何故很酷的消息! (2认同)