Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Audio 合并视频和音频流,其中音频漂移_Audio_Video_Ffmpeg_Raspberry Pi - Fatal编程技术网

Audio 合并视频和音频流,其中音频漂移

Audio 合并视频和音频流,其中音频漂移,audio,video,ffmpeg,raspberry-pi,Audio,Video,Ffmpeg,Raspberry Pi,我想用我的树莓皮b+2录制音频和视频。 我试图用一个ffmpeg命令来完成这项工作,但速度太慢了。我无法让它正常工作 我有一个树莓pi摄像头模块和一个Cirrus声卡。在raspberry上,我编译了一个支持声卡的新内核。我还使用alsa支持在raspberr上编译了ffmpeg ~$ ffmpeg ffmpeg version N-71470-g2db24cf Copyright (c) 2000-2015 the FFmpeg developers built with gcc 4.6 (D

我想用我的树莓皮b+2录制音频和视频。 我试图用一个ffmpeg命令来完成这项工作,但速度太慢了。我无法让它正常工作

我有一个树莓pi摄像头模块和一个Cirrus声卡。在raspberry上,我编译了一个支持声卡的新内核。我还使用alsa支持在raspberr上编译了ffmpeg

~$ ffmpeg
ffmpeg version N-71470-g2db24cf Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.6 (Debian 4.6.3-14+rpi1)
configuration: --arch=armel --target-os=linux --enable-gpl --extra-libs=-lasound --enable-nonfree
  libavutil      54. 22.101 / 54. 22.101
  libavcodec     56. 34.100 / 56. 34.100
  libavformat    56. 30.100 / 56. 30.100
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 14.100 /  5. 14.100
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
现在我尝试“同时”录制音频流和视频流 我通过运行shell脚本来实现这一点

raspivid -t 60000 -vs -w 1280 -h 720 -b 5000000 -fps 25 -o video.h264 &
arecord -Dhw:sndrpiwsp -r 44100 -c 2 -d 60 -f S32_LE audio.aac
我还尝试了-r 22050和-f S16_LE

当运行这个时,它有时会给出一个(我认为)

在脚本的末尾,我有两个文件。视频和音频文件

现在我想通过使用ffmpeg将这两个合并在一起

ffmpeg -i video.h264 -i audio.aac -c:v copy -c:a aac -strict experimental output.mp4
这将提供以下输出:

ffmpeg version N-71470-g2db24cf Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.6 (Debian 4.6.3-14+rpi1)
configuration: --arch=armel --target-os=linux --enable-gpl --extra-libs=-lasound --enable-nonfree
  libavutil      54. 22.101 / 54. 22.101
  libavcodec     56. 34.100 / 56. 34.100
  libavformat    56. 30.100 / 56. 30.100
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 14.100 /  5. 14.100
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, h264, from 'video_1min_3.h264':
  Duration: N/A, bitrate: N/A
    Stream #0:0: Video: h264 (High), yuv420p, 1280x720, 25 fps, 25 tbr, 1200k tbn, 50 tbc
Guessed Channel Layout for  Input Stream #1.0 : stereo
Input #1, wav, from 'audio_1min_3.aac':
  Duration: 00:01:00.00, bitrate: 705 kb/s
    Stream #1:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 22050 Hz, 2 channels, s16, 705 kb/s
[mp4 @ 0x3230f20] Codec for stream 0 does not use global headers but container format requires global headers
Output #0, mp4, to 'output_1min_3.mp4':
  Metadata:
    encoder         : Lavf56.30.100
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1280x720, q=2-31, 25 fps, 25 tbr, 1200k tbn, 1200k tbc
    Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 22050 Hz, stereo, fltp, 128 kb/s
    Metadata:
      encoder         : Lavc56.34.100 aac
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (native))
Press [q] to stop, [?] for help
frame= 1822 fps=310 q=-1.0 Lsize=   33269kB time=00:01:12.84 bitrate=3741.7kbits/s
video:32300kB audio:941kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.086073%
最后,我有一个文件output.mp4,这是一部有音频的电影,开始时是同步的,但偏移到大约4秒的差异。音频在视频之前的位置

我希望你能帮助我解决这个问题,这样音频就不会再消失了

提前谢谢


(我尽量说得清楚)

我们可以尝试使用-async和-vsync选项来纠正音频和视频时间偏移。 例如,我使用了下面的选项来减少音频中2秒的时间延迟。 ./ffmpeg-async 1-i“weatherinput.mov”-strict-2-vcodec libx264-movflags+faststart-vprofile high-preset slow-b:v 500k-maxrate 500k-bufsize 1000k-threads 0-b:a 128k-pix_fmt yuv420p“weatheroutput.mp4” 如果需要,除了ioffset之外,我们还可以使用vsync选项


下面的链接还可以参考使用th async、vsync和i offset的其他组合,以避免漂移

这是一个固定的不同步时间。我的意思是,如果音频始终保持相同的x秒间隔,或者这是否补偿了逐渐恶化的漂移?在我的例子中,我使用了恒定持续时间的漂移。
ffmpeg version N-71470-g2db24cf Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.6 (Debian 4.6.3-14+rpi1)
configuration: --arch=armel --target-os=linux --enable-gpl --extra-libs=-lasound --enable-nonfree
  libavutil      54. 22.101 / 54. 22.101
  libavcodec     56. 34.100 / 56. 34.100
  libavformat    56. 30.100 / 56. 30.100
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 14.100 /  5. 14.100
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, h264, from 'video_1min_3.h264':
  Duration: N/A, bitrate: N/A
    Stream #0:0: Video: h264 (High), yuv420p, 1280x720, 25 fps, 25 tbr, 1200k tbn, 50 tbc
Guessed Channel Layout for  Input Stream #1.0 : stereo
Input #1, wav, from 'audio_1min_3.aac':
  Duration: 00:01:00.00, bitrate: 705 kb/s
    Stream #1:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 22050 Hz, 2 channels, s16, 705 kb/s
[mp4 @ 0x3230f20] Codec for stream 0 does not use global headers but container format requires global headers
Output #0, mp4, to 'output_1min_3.mp4':
  Metadata:
    encoder         : Lavf56.30.100
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1280x720, q=2-31, 25 fps, 25 tbr, 1200k tbn, 1200k tbc
    Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 22050 Hz, stereo, fltp, 128 kb/s
    Metadata:
      encoder         : Lavc56.34.100 aac
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (native))
Press [q] to stop, [?] for help
frame= 1822 fps=310 q=-1.0 Lsize=   33269kB time=00:01:12.84 bitrate=3741.7kbits/s
video:32300kB audio:941kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.086073%