FFmpeg 捕获中由低质量源引起的 ALSA 缓冲区 xrun
ALSA buffer xrun induced by low quality source in ffmpeg capture
我正在尝试将一些旧的 Video 8 磁带传输到我的计算机,通过 EasyCap USB 记忆棒和主板的音频输入,在 Ubuntu。我相信下面正确地列出了参数以从两个独立的流中捕获,并将它们都编码到输出 MP4 文件中。
编辑:
现在我可以稍微简化一下这个问题。
ALSA 缓冲区溢出(或欠载?)是由 unreliable/noisy 音频源引起的。例如,如果 ffmpeg 捕获磁带播放的开始,这会导致 "buffer xrun" 远远超出磁带加速和播放应该正常的时间。
有趣的是,ffmpeg 日志中显示的比特率在产生垃圾输出时比正常情况下更高! (这个码率是音视频码率的总和吗?)
我尝试了几种音频编码编解码器,但遇到了同样的问题。
使用libfdk_aac
:
Metadata:
encoder : Lavf56.15.102
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv422p, 640x480, q=-1--1, 29.97 fps, 11988 tbn, 29.97 tbc
Metadata:
encoder : Lavc56.13.100 libx264
Stream #0:1: Audio: aac (libfdk_aac) ([64][0][0][0] / 0x0040), 48000 Hz, mono, s16, 128 kb/s
Metadata:
encoder : Lavc56.13.100 libfdk_aac
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (libfdk_aac))
[alsa @ 0x22038a0] ALSA buffer xrun. 0kB time=00:00:00.00 bitrate=N/A
[alsa @ 0x22038a0] ALSA buffer xrun.1934kB time=00:00:02.76 bitrate=5723.5kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.4795kB time=00:00:05.49 bitrate=7150.1kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.7668kB time=00:00:08.21 bitrate=7646.1kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.1475kB time=00:00:10.94 bitrate=8588.9kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.3822kB time=00:00:13.66 bitrate=8289.0kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.5388kB time=00:00:16.38 bitrate=7695.0kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.6896kB time=00:00:19.10 bitrate=7244.0kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.8980kB time=00:00:21.84 bitrate=7118.8kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.2032kB time=00:00:24.55 bitrate=7349.3kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.4612kB time=00:00:27.27 bitrate=7391.1kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.6660kB time=00:00:29.98 bitrate=7284.6kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.9123kB time=00:00:32.68 bitrate=7299.3kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.0641kB time=00:00:35.39 bitrate=7091.7kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.2601kB time=00:00:38.13 bitrate=7002.6kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.5828kB time=00:00:40.87 bitrate=7181.0kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.8481kB time=00:00:43.60 bitrate=7229.9kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.1461kB time=00:00:46.34 bitrate=7328.0kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.3982kB time=00:00:49.06 bitrate=7342.7kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.6565kB time=00:00:51.77 bitrate=7367.8kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.9718kB time=00:00:54.51 bitrate=7471.3kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.2341kB time=00:00:57.25 bitrate=7489.2kbits/s
^Cframe= 1760 fps= 29 q=-1.0 Lsize= 53946kB time=00:01:00.04 bitrate=7360.3kbits/s
video:53880kB audio:53kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.022994%
[libx264 @ 0x2217ac0] frame I:8 Avg QP:24.00 size: 55686
[libx264 @ 0x2217ac0] frame P:1752 Avg QP:27.66 size: 31237
[libx264 @ 0x2217ac0] mb I I16..4: 100.0% 0.0% 0.0%
[libx264 @ 0x2217ac0] mb P I16..4: 15.0% 0.0% 0.0% P16..4: 80.2% 0.0% 0.0% 0.0% 0.0% skip: 4.8%
[libx264 @ 0x2217ac0] coded y,uvDC,uvAC intra: 45.3% 86.6% 59.4% inter: 65.7% 81.3% 11.5%
[libx264 @ 0x2217ac0] i16 v,h,dc,p: 40% 25% 26% 9%
[libx264 @ 0x2217ac0] i8c dc,h,v,p: 45% 24% 19% 12%
[libx264 @ 0x2217ac0] kb/s:7516.07
Received signal 2: terminating.
使用libvorbis
:
Metadata:
encoder : Lavf56.15.102
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv422p, 640x480, q=-1--1, 29.97 fps, 11988 tbn, 29.97 tbc
Metadata:
encoder : Lavc56.13.100 libx264
Stream #0:1: Audio: vorbis (libvorbis) ([221][0][0][0] / 0x00DD), 48000 Hz, mono, fltp, 128 kb/s
Metadata:
encoder : Lavc56.13.100 libvorbis
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Stream #1:0 -> #0:1 (pcm_s16le (native) -> vorbis (libvorbis))
[alsa @ 0x1a948a0] ALSA buffer xrun. 0kB time=00:00:00.00 bitrate=N/A
[alsa @ 0x1a948a0] ALSA buffer xrun. 402kB time=00:00:04.37 bitrate= 752.3kbits/s
[alsa @ 0x1a948a0] ALSA buffer xrun.4122kB time=00:00:08.80 bitrate=3833.0kbits/s
[alsa @ 0x1a948a0] ALSA buffer xrun.8722kB time=00:00:13.14 bitrate=5436.3kbits/s
[alsa @ 0x1a948a0] ALSA buffer xrun.3903kB time=00:00:17.51 bitrate=6502.2kbits/s
[alsa @ 0x1a948a0] ALSA buffer xrun.6625kB time=00:00:21.89 bitrate=6221.4kbits/s
[alsa @ 0x1a948a0] ALSA buffer xrun.9548kB time=00:00:26.28 bitrate=6092.5kbits/s
^Cframe= 851 fps= 26 q=-1.0 Lsize= 22018kB time=00:00:30.69 bitrate=5875.3kbits/s
video:21996kB audio:12kB subtitle:0kB other streams:0kB global headers:4kB muxing overhead: 0.044897%
[libx264 @ 0x1aa8ac0] frame I:4 Avg QP:23.50 size: 62405
[libx264 @ 0x1aa8ac0] frame P:847 Avg QP:25.58 size: 26297
[libx264 @ 0x1aa8ac0] mb I I16..4: 100.0% 0.0% 0.0%
[libx264 @ 0x1aa8ac0] mb P I16..4: 13.2% 0.0% 0.0% P16..4: 72.0% 0.0% 0.0% 0.0% 0.0% skip:14.8%
[libx264 @ 0x1aa8ac0] coded y,uvDC,uvAC intra: 40.6% 81.0% 58.6% inter: 58.8% 72.7% 8.6%
[libx264 @ 0x1aa8ac0] i16 v,h,dc,p: 41% 28% 22% 9%
[libx264 @ 0x1aa8ac0] i8c dc,h,v,p: 54% 19% 16% 11%
[libx264 @ 0x1aa8ac0] kb/s:6345.60
Received signal 2: terminating.
ffmpeg 对 ALSA 流的检测似乎被磁带的不一致搞砸了。在失败的情况下,输出 MP4 中只存在磁带音频的短脉冲。输出文件的音频比特率小于 10 kbps,整个文件的平均比特率。输出视频似乎很好,即使下面的失败案例日志中的每秒帧数较低。
在发生源错误之前,可以在短时间内很好地捕获音频和视频流;这提供了成功案例日志。故障案例日志是通过故意在源流中出错创建的——打开相机会发出短暂的嘈杂信号。
是否需要强制设置以保持 ffmpeg 录制音频流,即使磁带是空白或嘈杂的?
会不会是 libfdk_aac 音频编码器被低质量源触发了?
相关行; rawvideo
流在底部的脚本中通过管道传输到此:
ffmpeg -pixel_format uyvy422 -s:v 720x480 -framerate 29.97 -f rawvideo \
-i $PIPE -f alsa -i hw:0,0 -vf scale=w=720:h=540 -vcodec libx264 \
-preset ultrafast -shortest -c:a libfdk_aac -b:a 128k -af pan=1:c0=c0 \
-ar 96000 $OUTFILE
ar
论点是一种强制录音的尝试。
(短暂的)成功的 ffmpeg 日志文件;每秒捕获的高帧数:
ffmpeg version 2.5.3 Copyright (c) 2000-2015 the FFmpeg developers
built on Jan 11 2015 17:53:45 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
configuration: --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-libpulse --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-decoder=amrwb --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libvorbis --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr --enable-libxvid --enable-libvo-aacenc --enable-libvidstab
libavutil 54. 15.100 / 54. 15.100
libavcodec 56. 13.100 / 56. 13.100
libavformat 56. 15.102 / 56. 15.102
libavdevice 56. 3.100 / 56. 3.100
libavfilter 5. 2.103 / 5. 2.103
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
Input #0, rawvideo, from '/tmp/somagic-pipe':
Duration: N/A, start: 0.000000, bitrate: 165722 kb/s
Stream #0:0: Video: rawvideo (UYVY / 0x59565955), uyvy422, 720x480, 165722 kb/s, 29.97 tbr, 29.97 tbn, 29.97 tbc
Home directory not accessible: Permission denied
Guessed Channel Layout for Input Stream #1.0 : stereo
Input #1, alsa, from 'hw:0,0':
Duration: N/A, start: 1423202268.577088, bitrate: 1536 kb/s
Stream #1:0: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
No pixel format specified, yuv422p for H.264 encoding chosen.
Use -pix_fmt yuv420p for compatibility with outdated media players.
[Parsed_pan_0 @ 0x3335d60] This syntax is deprecated. Use '|' to separate the list items.
Single channel layout '1' is interpreted as a number of channels, switch to the syntax '1c' otherwise it will be interpreted as a channel layout number in a later version
[Parsed_pan_0 @ 0x3335d60] Pure channel mapping detected: 0
[libx264 @ 0x3364bc0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.1 Cache64
[libx264 @ 0x3364bc0] profile High 4:2:2, level 3.1, 4:2:2 8-bit
[libx264 @ 0x3364bc0] 264 - core 142 r2389 956c8d8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=crf mbtree=0 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=0
Output #0, mp4, to '/home/peterbecich/easycap/Videos/fpv_video_02_05_2015_21_57_48.mp4':
Metadata:
encoder : Lavf56.15.102
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv422p, 720x540, q=-1--1, 29.97 fps, 11988 tbn, 29.97 tbc
Metadata:
encoder : Lavc56.13.100 libx264
Stream #0:1: Audio: aac (libfdk_aac) ([64][0][0][0] / 0x0040), 96000 Hz, mono, s16, 128 kb/s
Metadata:
encoder : Lavc56.13.100 libfdk_aac
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (libfdk_aac))
Press [q] to stop, [?] for help
frame= 13 fps=0.0 q=26.0 size= 187kB time=00:00:00.30 bitrate=5102.7kbits/s
frame= 29 fps= 29 q=26.0 size= 469kB time=00:00:00.83 bitrate=4607.6kbits/s
frame= 44 fps= 29 q=26.0 size= 755kB time=00:00:01.33 bitrate=4635.2kbits/s
frame= 59 fps= 29 q=26.0 size= 1024kB time=00:00:01.83 bitrate=4572.1kbits/s
frame= 74 fps= 29 q=26.0 size= 1279kB time=00:00:02.33 bitrate=4486.5kbits/s
frame= 89 fps= 29 q=26.0 size= 1516kB time=00:00:02.83 bitrate=4378.0kbits/s
frame= 104 fps= 29 q=26.0 size= 1752kB time=00:00:03.33 bitrate=4301.0kbits/s
frame= 119 fps= 29 q=26.0 size= 1991kB time=00:00:03.83 bitrate=4251.1kbits/s
frame= 135 fps= 30 q=26.0 size= 2245kB time=00:00:04.37 bitrate=4207.5kbits/s
frame= 150 fps= 30 q=26.0 size= 2524kB time=00:00:04.87 bitrate=4245.0kbits/s
frame= 165 fps= 30 q=26.0 size= 2808kB time=00:00:05.37 bitrate=4282.0kbits/s
frame= 180 fps= 30 q=26.0 size= 3091kB time=00:00:05.87 bitrate=4311.5kbits/s
[rawvideo @ 0x3350640] Invalid buffer size, packet size 65536 < expected frame_size 691200
Error while decoding stream #0:0: Invalid argument
frame= 183 fps= 29 q=-1.0 Lsize= 3247kB time=00:00:06.11 bitrate=4351.5kbits/s
video:3142kB audio:96kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.254788%
[libx264 @ 0x3364bc0] frame I:1 Avg QP:20.00 size: 2289
[libx264 @ 0x3364bc0] frame P:182 Avg QP:25.99 size: 17664
[libx264 @ 0x3364bc0] mb I I16..4: 100.0% 0.0% 0.0%
[libx264 @ 0x3364bc0] mb P I16..4: 78.5% 0.0% 0.0% P16..4: 20.2% 0.0% 0.0% 0.0% 0.0% skip: 1.4%
[libx264 @ 0x3364bc0] coded y,uvDC,uvAC intra: 84.1% 71.5% 18.9% inter: 51.9% 63.5% 0.4%
[libx264 @ 0x3364bc0] i16 v,h,dc,p: 15% 8% 69% 8%
[libx264 @ 0x3364bc0] i8c dc,h,v,p: 50% 19% 24% 7%
[libx264 @ 0x3364bc0] kb/s:4215.02
ffmpeg 失败日志;捕获的低 FPS:
ffmpeg version 2.5.3 Copyright (c) 2000-2015 the FFmpeg developers
built on Jan 11 2015 17:53:45 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
configuration: --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-libpulse --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-decoder=amrwb --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libvorbis --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr --enable-libxvid --enable-libvo-aacenc --enable-libvidstab
libavutil 54. 15.100 / 54. 15.100
libavcodec 56. 13.100 / 56. 13.100
libavformat 56. 15.102 / 56. 15.102
libavdevice 56. 3.100 / 56. 3.100
libavfilter 5. 2.103 / 5. 2.103
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
Input #0, rawvideo, from '/tmp/somagic-pipe':
Duration: N/A, start: 0.000000, bitrate: 165722 kb/s
Stream #0:0: Video: rawvideo (UYVY / 0x59565955), uyvy422, 720x480, 165722 kb/s, 29.97 tbr, 29.97 tbn, 29.97 tbc
Home directory not accessible: Permission denied
Guessed Channel Layout for Input Stream #1.0 : stereo
Input #1, alsa, from 'hw:0,0':
Duration: N/A, start: 1423201999.226455, bitrate: 1536 kb/s
Stream #1:0: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
No pixel format specified, yuv422p for H.264 encoding chosen.
Use -pix_fmt yuv420p for compatibility with outdated media players.
[Parsed_pan_0 @ 0x21cad60] This syntax is deprecated. Use '|' to separate the list items.
Single channel layout '1' is interpreted as a number of channels, switch to the syntax '1c' otherwise it will be interpreted as a channel layout number in a later version
[Parsed_pan_0 @ 0x21cad60] Pure channel mapping detected: 0
[libx264 @ 0x21f9bc0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.1 Cache64
[libx264 @ 0x21f9bc0] profile High 4:2:2, level 3.1, 4:2:2 8-bit
[libx264 @ 0x21f9bc0] 264 - core 142 r2389 956c8d8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=crf mbtree=0 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=0
Output #0, mp4, to '/home/peterbecich/easycap/Videos/fpv_video_02_05_2015_21_53_18.mp4':
Metadata:
encoder : Lavf56.15.102
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv422p, 720x540, q=-1--1, 29.97 fps, 11988 tbn, 29.97 tbc
Metadata:
encoder : Lavc56.13.100 libx264
Stream #0:1: Audio: aac (libfdk_aac) ([64][0][0][0] / 0x0040), 96000 Hz, mono, s16, 128 kb/s
Metadata:
encoder : Lavc56.13.100 libfdk_aac
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (libfdk_aac))
Press [q] to stop, [?] for help
frame= 1 fps=0.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
frame= 1 fps=1.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
frame= 1 fps=0.7 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
frame= 1 fps=0.5 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
frame= 1 fps=0.4 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
frame= 1 fps=0.3 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
frame= 1 fps=0.3 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
frame= 1 fps=0.2 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
frame= 1 fps=0.2 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
frame= 1 fps=0.2 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
frame= 1 fps=0.2 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
[alsa @ 0x21e5ac0] ALSA buffer xrun.
frame= 8 fps=1.3 q=19.0 size= 12kB time=00:00:06.03 bitrate= 15.9kbits/s
frame= 23 fps=3.5 q=18.0 size= 12kB time=00:00:06.03 bitrate= 16.4kbits/s
frame= 38 fps=5.4 q=18.0 size= 12kB time=00:00:06.03 bitrate= 16.7kbits/s
frame= 53 fps=7.0 q=18.0 size= 12kB time=00:00:06.03 bitrate= 16.9kbits/s
frame= 68 fps=8.4 q=26.0 size= 146kB time=00:00:06.03 bitrate= 198.8kbits/s
frame= 83 fps=9.7 q=26.0 size= 375kB time=00:00:06.03 bitrate= 510.0kbits/s
frame= 98 fps= 11 q=26.0 size= 608kB time=00:00:06.03 bitrate= 826.5kbits/s
frame= 114 fps= 12 q=26.0 size= 875kB time=00:00:06.03 bitrate=1189.1kbits/s
frame= 128 fps= 13 q=26.0 size= 1091kB time=00:00:06.03 bitrate=1481.6kbits/s
frame= 144 fps= 14 q=26.0 size= 1339kB time=00:00:06.03 bitrate=1819.2kbits/s
frame= 159 fps= 14 q=26.0 size= 1571kB time=00:00:06.03 bitrate=2134.6kbits/s
frame= 174 fps= 15 q=26.0 size= 1796kB time=00:00:06.03 bitrate=2440.1kbits/s
[alsa @ 0x21e5ac0] ALSA buffer xrun.
frame= 189 fps= 16 q=26.0 size= 2015kB time=00:00:12.04 bitrate=1370.4kbits/s
frame= 204 fps= 16 q=26.0 size= 2238kB time=00:00:12.04 bitrate=1522.3kbits/s
frame= 219 fps= 17 q=26.0 size= 2490kB time=00:00:12.04 bitrate=1694.2kbits/s
frame= 235 fps= 17 q=26.0 size= 2728kB time=00:00:12.04 bitrate=1855.8kbits/s
frame= 250 fps= 18 q=26.0 size= 2973kB time=00:00:12.04 bitrate=2022.4kbits/s
[rawvideo @ 0x21e5640] Invalid buffer size, packet size 65536 < expected frame_size 691200
Error while decoding stream #0:0: Invalid argument
frame= 261 fps= 18 q=-1.0 Lsize= 3269kB time=00:00:12.06 bitrate=2220.1kbits/s
video:3263kB audio:4kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.081101%
[libx264 @ 0x21f9bc0] frame I:2 Avg QP:21.50 size: 21342
[libx264 @ 0x21f9bc0] frame P:259 Avg QP:24.22 size: 12734
[libx264 @ 0x21f9bc0] mb I I16..4: 100.0% 0.0% 0.0%
[libx264 @ 0x21f9bc0] mb P I16..4: 62.8% 0.0% 0.0% P16..4: 14.2% 0.0% 0.0% 0.0% 0.0% skip:22.9%
[libx264 @ 0x21f9bc0] coded y,uvDC,uvAC intra: 77.7% 61.2% 14.1% inter: 19.7% 24.8% 1.6%
[libx264 @ 0x21f9bc0] i16 v,h,dc,p: 17% 10% 65% 8%
[libx264 @ 0x21f9bc0] i8c dc,h,v,p: 52% 18% 24% 6%
[libx264 @ 0x21f9bc0] kb/s:3068.90
整个脚本:
#!/bin/sh
PIPE=/tmp/somagic-pipe
OUTFILEDIR=~/easycap/Videos/
LOGDIR=~/.somagic-log/
NOW=`date +"%m_%d_%Y_%H_%M_%S"`
OUTFILE=${OUTFILEDIR}fpv_video_${NOW}.mp4
mkdir $LOGDIR
FFMPEG_LOG=${LOGDIR}ffmpeg.log
SOMAGIC_LOG=${LOGDIR}somagic.log
MPLAYER_LOG=${LOGDIR}mplayer.log
rm $PIPE >/dev/null 2>&1
rm $OUTFILE >/dev/null 2>&1
rm $FFMPEG_LOG
rm $SOMAGIC_LOG
rm $MPLAYER_LOG
mkfifo $PIPE >/dev/null 2>&1
ffmpeg -pixel_format uyvy422 -s:v 720x480 -framerate 29.97 -f rawvideo \
-i $PIPE -f alsa -i hw:0,0 -vf scale=w=720:h=540 -vcodec libx264 \
-preset ultrafast -shortest -c:a libfdk_aac -b:a 128k -af pan=1:c0=c0 \
-ar 96000 $OUTFILE > $FFMPEG_LOG 2>&1 &
somagic-capture --ntsc -c --luminance=2 --lum-aperture=3 2> $SOMAGIC_LOG \
| tee $PIPE | \
mplayer -vf yadif,screenshot -demuxer rawvideo -rawvideo \
"ntsc:format=uyvy:fps=30000/1001" -aspect 4:3 - 2> $MPLAYER_LOG
rm $PIPE >/dev/null 2>&1
找到了使用两个单独的 ffmpeg 进程的部分解决方案,如该线程中所建议:https://trac.ffmpeg.org/ticket/615
具体来说,这条评论:https://trac.ffmpeg.org/ticket/615#comment:13
以后必须将单独的音频和视频文件放在一起。
由于同步问题,在 ffmpeg 中录制视频和在 Audacity 中录制音频没有用,写在这里:
https://video.stackexchange.com/questions/14809/sync-up-ffmpeg-rawvideo-recording-and-audacity-alsa-recording
希望两个 ffmpeg 进程以相同的速率记录,不像 ffmpeg 和 Audacity。
编辑:两个 ffmpeg 进程可能不会生成两个相同长度的文件。似乎 ffmpeg 会自动从视频中删除 dead space,但不会从音频中删除。
我通过添加视频输入和音频输入选项解决了这个问题-thread_queue_size 1024
。这是我的完整行:
ffmpeg -f rawvideo -video_size 720x480 -thread_queue_size 1024 \
-pixel_format uyvy422 -framerate 29.97 -i - -f alsa -thread_queue_size 1024 \
-i hw:1 -preset slow -c:v libx264 -aspect 4:3 -strict -2 -y -threads 4 output.mp4
我正在尝试将一些旧的 Video 8 磁带传输到我的计算机,通过 EasyCap USB 记忆棒和主板的音频输入,在 Ubuntu。我相信下面正确地列出了参数以从两个独立的流中捕获,并将它们都编码到输出 MP4 文件中。
编辑:
现在我可以稍微简化一下这个问题。
ALSA 缓冲区溢出(或欠载?)是由 unreliable/noisy 音频源引起的。例如,如果 ffmpeg 捕获磁带播放的开始,这会导致 "buffer xrun" 远远超出磁带加速和播放应该正常的时间。
有趣的是,ffmpeg 日志中显示的比特率在产生垃圾输出时比正常情况下更高! (这个码率是音视频码率的总和吗?)
我尝试了几种音频编码编解码器,但遇到了同样的问题。
使用libfdk_aac
:
Metadata:
encoder : Lavf56.15.102
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv422p, 640x480, q=-1--1, 29.97 fps, 11988 tbn, 29.97 tbc
Metadata:
encoder : Lavc56.13.100 libx264
Stream #0:1: Audio: aac (libfdk_aac) ([64][0][0][0] / 0x0040), 48000 Hz, mono, s16, 128 kb/s
Metadata:
encoder : Lavc56.13.100 libfdk_aac
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (libfdk_aac))
[alsa @ 0x22038a0] ALSA buffer xrun. 0kB time=00:00:00.00 bitrate=N/A
[alsa @ 0x22038a0] ALSA buffer xrun.1934kB time=00:00:02.76 bitrate=5723.5kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.4795kB time=00:00:05.49 bitrate=7150.1kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.7668kB time=00:00:08.21 bitrate=7646.1kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.1475kB time=00:00:10.94 bitrate=8588.9kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.3822kB time=00:00:13.66 bitrate=8289.0kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.5388kB time=00:00:16.38 bitrate=7695.0kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.6896kB time=00:00:19.10 bitrate=7244.0kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.8980kB time=00:00:21.84 bitrate=7118.8kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.2032kB time=00:00:24.55 bitrate=7349.3kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.4612kB time=00:00:27.27 bitrate=7391.1kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.6660kB time=00:00:29.98 bitrate=7284.6kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.9123kB time=00:00:32.68 bitrate=7299.3kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.0641kB time=00:00:35.39 bitrate=7091.7kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.2601kB time=00:00:38.13 bitrate=7002.6kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.5828kB time=00:00:40.87 bitrate=7181.0kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.8481kB time=00:00:43.60 bitrate=7229.9kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.1461kB time=00:00:46.34 bitrate=7328.0kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.3982kB time=00:00:49.06 bitrate=7342.7kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.6565kB time=00:00:51.77 bitrate=7367.8kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.9718kB time=00:00:54.51 bitrate=7471.3kbits/s
[alsa @ 0x22038a0] ALSA buffer xrun.2341kB time=00:00:57.25 bitrate=7489.2kbits/s
^Cframe= 1760 fps= 29 q=-1.0 Lsize= 53946kB time=00:01:00.04 bitrate=7360.3kbits/s
video:53880kB audio:53kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.022994%
[libx264 @ 0x2217ac0] frame I:8 Avg QP:24.00 size: 55686
[libx264 @ 0x2217ac0] frame P:1752 Avg QP:27.66 size: 31237
[libx264 @ 0x2217ac0] mb I I16..4: 100.0% 0.0% 0.0%
[libx264 @ 0x2217ac0] mb P I16..4: 15.0% 0.0% 0.0% P16..4: 80.2% 0.0% 0.0% 0.0% 0.0% skip: 4.8%
[libx264 @ 0x2217ac0] coded y,uvDC,uvAC intra: 45.3% 86.6% 59.4% inter: 65.7% 81.3% 11.5%
[libx264 @ 0x2217ac0] i16 v,h,dc,p: 40% 25% 26% 9%
[libx264 @ 0x2217ac0] i8c dc,h,v,p: 45% 24% 19% 12%
[libx264 @ 0x2217ac0] kb/s:7516.07
Received signal 2: terminating.
使用libvorbis
:
Metadata:
encoder : Lavf56.15.102
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv422p, 640x480, q=-1--1, 29.97 fps, 11988 tbn, 29.97 tbc
Metadata:
encoder : Lavc56.13.100 libx264
Stream #0:1: Audio: vorbis (libvorbis) ([221][0][0][0] / 0x00DD), 48000 Hz, mono, fltp, 128 kb/s
Metadata:
encoder : Lavc56.13.100 libvorbis
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Stream #1:0 -> #0:1 (pcm_s16le (native) -> vorbis (libvorbis))
[alsa @ 0x1a948a0] ALSA buffer xrun. 0kB time=00:00:00.00 bitrate=N/A
[alsa @ 0x1a948a0] ALSA buffer xrun. 402kB time=00:00:04.37 bitrate= 752.3kbits/s
[alsa @ 0x1a948a0] ALSA buffer xrun.4122kB time=00:00:08.80 bitrate=3833.0kbits/s
[alsa @ 0x1a948a0] ALSA buffer xrun.8722kB time=00:00:13.14 bitrate=5436.3kbits/s
[alsa @ 0x1a948a0] ALSA buffer xrun.3903kB time=00:00:17.51 bitrate=6502.2kbits/s
[alsa @ 0x1a948a0] ALSA buffer xrun.6625kB time=00:00:21.89 bitrate=6221.4kbits/s
[alsa @ 0x1a948a0] ALSA buffer xrun.9548kB time=00:00:26.28 bitrate=6092.5kbits/s
^Cframe= 851 fps= 26 q=-1.0 Lsize= 22018kB time=00:00:30.69 bitrate=5875.3kbits/s
video:21996kB audio:12kB subtitle:0kB other streams:0kB global headers:4kB muxing overhead: 0.044897%
[libx264 @ 0x1aa8ac0] frame I:4 Avg QP:23.50 size: 62405
[libx264 @ 0x1aa8ac0] frame P:847 Avg QP:25.58 size: 26297
[libx264 @ 0x1aa8ac0] mb I I16..4: 100.0% 0.0% 0.0%
[libx264 @ 0x1aa8ac0] mb P I16..4: 13.2% 0.0% 0.0% P16..4: 72.0% 0.0% 0.0% 0.0% 0.0% skip:14.8%
[libx264 @ 0x1aa8ac0] coded y,uvDC,uvAC intra: 40.6% 81.0% 58.6% inter: 58.8% 72.7% 8.6%
[libx264 @ 0x1aa8ac0] i16 v,h,dc,p: 41% 28% 22% 9%
[libx264 @ 0x1aa8ac0] i8c dc,h,v,p: 54% 19% 16% 11%
[libx264 @ 0x1aa8ac0] kb/s:6345.60
Received signal 2: terminating.
ffmpeg 对 ALSA 流的检测似乎被磁带的不一致搞砸了。在失败的情况下,输出 MP4 中只存在磁带音频的短脉冲。输出文件的音频比特率小于 10 kbps,整个文件的平均比特率。输出视频似乎很好,即使下面的失败案例日志中的每秒帧数较低。
在发生源错误之前,可以在短时间内很好地捕获音频和视频流;这提供了成功案例日志。故障案例日志是通过故意在源流中出错创建的——打开相机会发出短暂的嘈杂信号。
是否需要强制设置以保持 ffmpeg 录制音频流,即使磁带是空白或嘈杂的?
会不会是 libfdk_aac 音频编码器被低质量源触发了?
相关行; rawvideo
流在底部的脚本中通过管道传输到此:
ffmpeg -pixel_format uyvy422 -s:v 720x480 -framerate 29.97 -f rawvideo \
-i $PIPE -f alsa -i hw:0,0 -vf scale=w=720:h=540 -vcodec libx264 \
-preset ultrafast -shortest -c:a libfdk_aac -b:a 128k -af pan=1:c0=c0 \
-ar 96000 $OUTFILE
ar
论点是一种强制录音的尝试。
(短暂的)成功的 ffmpeg 日志文件;每秒捕获的高帧数:
ffmpeg version 2.5.3 Copyright (c) 2000-2015 the FFmpeg developers
built on Jan 11 2015 17:53:45 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
configuration: --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-libpulse --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-decoder=amrwb --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libvorbis --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr --enable-libxvid --enable-libvo-aacenc --enable-libvidstab
libavutil 54. 15.100 / 54. 15.100
libavcodec 56. 13.100 / 56. 13.100
libavformat 56. 15.102 / 56. 15.102
libavdevice 56. 3.100 / 56. 3.100
libavfilter 5. 2.103 / 5. 2.103
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
Input #0, rawvideo, from '/tmp/somagic-pipe':
Duration: N/A, start: 0.000000, bitrate: 165722 kb/s
Stream #0:0: Video: rawvideo (UYVY / 0x59565955), uyvy422, 720x480, 165722 kb/s, 29.97 tbr, 29.97 tbn, 29.97 tbc
Home directory not accessible: Permission denied
Guessed Channel Layout for Input Stream #1.0 : stereo
Input #1, alsa, from 'hw:0,0':
Duration: N/A, start: 1423202268.577088, bitrate: 1536 kb/s
Stream #1:0: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
No pixel format specified, yuv422p for H.264 encoding chosen.
Use -pix_fmt yuv420p for compatibility with outdated media players.
[Parsed_pan_0 @ 0x3335d60] This syntax is deprecated. Use '|' to separate the list items.
Single channel layout '1' is interpreted as a number of channels, switch to the syntax '1c' otherwise it will be interpreted as a channel layout number in a later version
[Parsed_pan_0 @ 0x3335d60] Pure channel mapping detected: 0
[libx264 @ 0x3364bc0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.1 Cache64
[libx264 @ 0x3364bc0] profile High 4:2:2, level 3.1, 4:2:2 8-bit
[libx264 @ 0x3364bc0] 264 - core 142 r2389 956c8d8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=crf mbtree=0 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=0
Output #0, mp4, to '/home/peterbecich/easycap/Videos/fpv_video_02_05_2015_21_57_48.mp4':
Metadata:
encoder : Lavf56.15.102
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv422p, 720x540, q=-1--1, 29.97 fps, 11988 tbn, 29.97 tbc
Metadata:
encoder : Lavc56.13.100 libx264
Stream #0:1: Audio: aac (libfdk_aac) ([64][0][0][0] / 0x0040), 96000 Hz, mono, s16, 128 kb/s
Metadata:
encoder : Lavc56.13.100 libfdk_aac
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (libfdk_aac))
Press [q] to stop, [?] for help
frame= 13 fps=0.0 q=26.0 size= 187kB time=00:00:00.30 bitrate=5102.7kbits/s
frame= 29 fps= 29 q=26.0 size= 469kB time=00:00:00.83 bitrate=4607.6kbits/s
frame= 44 fps= 29 q=26.0 size= 755kB time=00:00:01.33 bitrate=4635.2kbits/s
frame= 59 fps= 29 q=26.0 size= 1024kB time=00:00:01.83 bitrate=4572.1kbits/s
frame= 74 fps= 29 q=26.0 size= 1279kB time=00:00:02.33 bitrate=4486.5kbits/s
frame= 89 fps= 29 q=26.0 size= 1516kB time=00:00:02.83 bitrate=4378.0kbits/s
frame= 104 fps= 29 q=26.0 size= 1752kB time=00:00:03.33 bitrate=4301.0kbits/s
frame= 119 fps= 29 q=26.0 size= 1991kB time=00:00:03.83 bitrate=4251.1kbits/s
frame= 135 fps= 30 q=26.0 size= 2245kB time=00:00:04.37 bitrate=4207.5kbits/s
frame= 150 fps= 30 q=26.0 size= 2524kB time=00:00:04.87 bitrate=4245.0kbits/s
frame= 165 fps= 30 q=26.0 size= 2808kB time=00:00:05.37 bitrate=4282.0kbits/s
frame= 180 fps= 30 q=26.0 size= 3091kB time=00:00:05.87 bitrate=4311.5kbits/s
[rawvideo @ 0x3350640] Invalid buffer size, packet size 65536 < expected frame_size 691200
Error while decoding stream #0:0: Invalid argument
frame= 183 fps= 29 q=-1.0 Lsize= 3247kB time=00:00:06.11 bitrate=4351.5kbits/s
video:3142kB audio:96kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.254788%
[libx264 @ 0x3364bc0] frame I:1 Avg QP:20.00 size: 2289
[libx264 @ 0x3364bc0] frame P:182 Avg QP:25.99 size: 17664
[libx264 @ 0x3364bc0] mb I I16..4: 100.0% 0.0% 0.0%
[libx264 @ 0x3364bc0] mb P I16..4: 78.5% 0.0% 0.0% P16..4: 20.2% 0.0% 0.0% 0.0% 0.0% skip: 1.4%
[libx264 @ 0x3364bc0] coded y,uvDC,uvAC intra: 84.1% 71.5% 18.9% inter: 51.9% 63.5% 0.4%
[libx264 @ 0x3364bc0] i16 v,h,dc,p: 15% 8% 69% 8%
[libx264 @ 0x3364bc0] i8c dc,h,v,p: 50% 19% 24% 7%
[libx264 @ 0x3364bc0] kb/s:4215.02
ffmpeg 失败日志;捕获的低 FPS:
ffmpeg version 2.5.3 Copyright (c) 2000-2015 the FFmpeg developers
built on Jan 11 2015 17:53:45 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
configuration: --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-libpulse --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-decoder=amrwb --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libvorbis --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr --enable-libxvid --enable-libvo-aacenc --enable-libvidstab
libavutil 54. 15.100 / 54. 15.100
libavcodec 56. 13.100 / 56. 13.100
libavformat 56. 15.102 / 56. 15.102
libavdevice 56. 3.100 / 56. 3.100
libavfilter 5. 2.103 / 5. 2.103
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
Input #0, rawvideo, from '/tmp/somagic-pipe':
Duration: N/A, start: 0.000000, bitrate: 165722 kb/s
Stream #0:0: Video: rawvideo (UYVY / 0x59565955), uyvy422, 720x480, 165722 kb/s, 29.97 tbr, 29.97 tbn, 29.97 tbc
Home directory not accessible: Permission denied
Guessed Channel Layout for Input Stream #1.0 : stereo
Input #1, alsa, from 'hw:0,0':
Duration: N/A, start: 1423201999.226455, bitrate: 1536 kb/s
Stream #1:0: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
No pixel format specified, yuv422p for H.264 encoding chosen.
Use -pix_fmt yuv420p for compatibility with outdated media players.
[Parsed_pan_0 @ 0x21cad60] This syntax is deprecated. Use '|' to separate the list items.
Single channel layout '1' is interpreted as a number of channels, switch to the syntax '1c' otherwise it will be interpreted as a channel layout number in a later version
[Parsed_pan_0 @ 0x21cad60] Pure channel mapping detected: 0
[libx264 @ 0x21f9bc0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.1 Cache64
[libx264 @ 0x21f9bc0] profile High 4:2:2, level 3.1, 4:2:2 8-bit
[libx264 @ 0x21f9bc0] 264 - core 142 r2389 956c8d8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=crf mbtree=0 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=0
Output #0, mp4, to '/home/peterbecich/easycap/Videos/fpv_video_02_05_2015_21_53_18.mp4':
Metadata:
encoder : Lavf56.15.102
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv422p, 720x540, q=-1--1, 29.97 fps, 11988 tbn, 29.97 tbc
Metadata:
encoder : Lavc56.13.100 libx264
Stream #0:1: Audio: aac (libfdk_aac) ([64][0][0][0] / 0x0040), 96000 Hz, mono, s16, 128 kb/s
Metadata:
encoder : Lavc56.13.100 libfdk_aac
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (libfdk_aac))
Press [q] to stop, [?] for help
frame= 1 fps=0.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
frame= 1 fps=1.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
frame= 1 fps=0.7 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
frame= 1 fps=0.5 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
frame= 1 fps=0.4 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
frame= 1 fps=0.3 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
frame= 1 fps=0.3 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
frame= 1 fps=0.2 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
frame= 1 fps=0.2 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
frame= 1 fps=0.2 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
frame= 1 fps=0.2 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
[alsa @ 0x21e5ac0] ALSA buffer xrun.
frame= 8 fps=1.3 q=19.0 size= 12kB time=00:00:06.03 bitrate= 15.9kbits/s
frame= 23 fps=3.5 q=18.0 size= 12kB time=00:00:06.03 bitrate= 16.4kbits/s
frame= 38 fps=5.4 q=18.0 size= 12kB time=00:00:06.03 bitrate= 16.7kbits/s
frame= 53 fps=7.0 q=18.0 size= 12kB time=00:00:06.03 bitrate= 16.9kbits/s
frame= 68 fps=8.4 q=26.0 size= 146kB time=00:00:06.03 bitrate= 198.8kbits/s
frame= 83 fps=9.7 q=26.0 size= 375kB time=00:00:06.03 bitrate= 510.0kbits/s
frame= 98 fps= 11 q=26.0 size= 608kB time=00:00:06.03 bitrate= 826.5kbits/s
frame= 114 fps= 12 q=26.0 size= 875kB time=00:00:06.03 bitrate=1189.1kbits/s
frame= 128 fps= 13 q=26.0 size= 1091kB time=00:00:06.03 bitrate=1481.6kbits/s
frame= 144 fps= 14 q=26.0 size= 1339kB time=00:00:06.03 bitrate=1819.2kbits/s
frame= 159 fps= 14 q=26.0 size= 1571kB time=00:00:06.03 bitrate=2134.6kbits/s
frame= 174 fps= 15 q=26.0 size= 1796kB time=00:00:06.03 bitrate=2440.1kbits/s
[alsa @ 0x21e5ac0] ALSA buffer xrun.
frame= 189 fps= 16 q=26.0 size= 2015kB time=00:00:12.04 bitrate=1370.4kbits/s
frame= 204 fps= 16 q=26.0 size= 2238kB time=00:00:12.04 bitrate=1522.3kbits/s
frame= 219 fps= 17 q=26.0 size= 2490kB time=00:00:12.04 bitrate=1694.2kbits/s
frame= 235 fps= 17 q=26.0 size= 2728kB time=00:00:12.04 bitrate=1855.8kbits/s
frame= 250 fps= 18 q=26.0 size= 2973kB time=00:00:12.04 bitrate=2022.4kbits/s
[rawvideo @ 0x21e5640] Invalid buffer size, packet size 65536 < expected frame_size 691200
Error while decoding stream #0:0: Invalid argument
frame= 261 fps= 18 q=-1.0 Lsize= 3269kB time=00:00:12.06 bitrate=2220.1kbits/s
video:3263kB audio:4kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.081101%
[libx264 @ 0x21f9bc0] frame I:2 Avg QP:21.50 size: 21342
[libx264 @ 0x21f9bc0] frame P:259 Avg QP:24.22 size: 12734
[libx264 @ 0x21f9bc0] mb I I16..4: 100.0% 0.0% 0.0%
[libx264 @ 0x21f9bc0] mb P I16..4: 62.8% 0.0% 0.0% P16..4: 14.2% 0.0% 0.0% 0.0% 0.0% skip:22.9%
[libx264 @ 0x21f9bc0] coded y,uvDC,uvAC intra: 77.7% 61.2% 14.1% inter: 19.7% 24.8% 1.6%
[libx264 @ 0x21f9bc0] i16 v,h,dc,p: 17% 10% 65% 8%
[libx264 @ 0x21f9bc0] i8c dc,h,v,p: 52% 18% 24% 6%
[libx264 @ 0x21f9bc0] kb/s:3068.90
整个脚本:
#!/bin/sh
PIPE=/tmp/somagic-pipe
OUTFILEDIR=~/easycap/Videos/
LOGDIR=~/.somagic-log/
NOW=`date +"%m_%d_%Y_%H_%M_%S"`
OUTFILE=${OUTFILEDIR}fpv_video_${NOW}.mp4
mkdir $LOGDIR
FFMPEG_LOG=${LOGDIR}ffmpeg.log
SOMAGIC_LOG=${LOGDIR}somagic.log
MPLAYER_LOG=${LOGDIR}mplayer.log
rm $PIPE >/dev/null 2>&1
rm $OUTFILE >/dev/null 2>&1
rm $FFMPEG_LOG
rm $SOMAGIC_LOG
rm $MPLAYER_LOG
mkfifo $PIPE >/dev/null 2>&1
ffmpeg -pixel_format uyvy422 -s:v 720x480 -framerate 29.97 -f rawvideo \
-i $PIPE -f alsa -i hw:0,0 -vf scale=w=720:h=540 -vcodec libx264 \
-preset ultrafast -shortest -c:a libfdk_aac -b:a 128k -af pan=1:c0=c0 \
-ar 96000 $OUTFILE > $FFMPEG_LOG 2>&1 &
somagic-capture --ntsc -c --luminance=2 --lum-aperture=3 2> $SOMAGIC_LOG \
| tee $PIPE | \
mplayer -vf yadif,screenshot -demuxer rawvideo -rawvideo \
"ntsc:format=uyvy:fps=30000/1001" -aspect 4:3 - 2> $MPLAYER_LOG
rm $PIPE >/dev/null 2>&1
找到了使用两个单独的 ffmpeg 进程的部分解决方案,如该线程中所建议:https://trac.ffmpeg.org/ticket/615 具体来说,这条评论:https://trac.ffmpeg.org/ticket/615#comment:13
以后必须将单独的音频和视频文件放在一起。
由于同步问题,在 ffmpeg 中录制视频和在 Audacity 中录制音频没有用,写在这里: https://video.stackexchange.com/questions/14809/sync-up-ffmpeg-rawvideo-recording-and-audacity-alsa-recording
希望两个 ffmpeg 进程以相同的速率记录,不像 ffmpeg 和 Audacity。
编辑:两个 ffmpeg 进程可能不会生成两个相同长度的文件。似乎 ffmpeg 会自动从视频中删除 dead space,但不会从音频中删除。
我通过添加视频输入和音频输入选项解决了这个问题-thread_queue_size 1024
。这是我的完整行:
ffmpeg -f rawvideo -video_size 720x480 -thread_queue_size 1024 \
-pixel_format uyvy422 -framerate 29.97 -i - -f alsa -thread_queue_size 1024 \
-i hw:1 -preset slow -c:v libx264 -aspect 4:3 -strict -2 -y -threads 4 output.mp4