如何将WAV文件拉伸到相同的视频长度?

迈克尔·豪伯格(Michael Heuberger)

是的,这里有一个棘手的ffmpeg问题。

在我的应用中,我正在基于图像帧对视频进行编码,并为来自相同来源但通过不同Web套接字的声音添加WAV文件。基于这些图像+ fps(加上减去几秒钟),WAV文件的长度不一定与视频长度完全相同。

如何告诉ffmpeg“拉伸”输入的WAV文件,使其具有与视频相同的长度?

简而言之: images (i) + WAV (w) = final video (v)

length(w) != length (v) ...这会引起问题。

这是我当前正在使用的示例ffmpeg命令:

ffmpeg -f image2 -thread_queue_size 512 -framerate 21.5 -i /frames/%d.webp -i videomail_preview.wav -y -acodec aac -strict实验-ac 1 -vcodec libx264 -crf 16 -preset fast -profile:v基线- pix_fmt yuv420p -loglevel警告-movflags + faststart videomail_good.mp4 -acodec libvorbis -ac 1 -vcodec libvpx -crf 8 -deadline good -cpu使用1 -pix_fmt yuv420p -loglevel警告-movflags + faststart videomail_good.webm

ffmpeg版本及其扩展名

ffmpeg版本2.8.6-1ubuntu2版权所有(c)2000-2016使用gcc 5.3.1(Ubuntu 5.3.1-11ubuntu1)20160311配置构建的FFmpeg开发人员:--prefix = / usr --extra-version = 1ubuntu2 --build-suffix = -ffmpeg --toolchain = hardened --libdir = / usr / lib / x86_64-linux-gnu --incdir = / usr / include / x86_64 -linux-gnu --cc = cc --cxx = g ++ --enable-gpl --enable-shared --disable-stripping --disable-decoder = libopenjpeg --disable-decoder = libschroedinger --enable-avresample- enable-avisynth --enable-nutnuts --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig- enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp- enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx--enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv libavutil 54. 31.100 / 54. 31.100 libavcodec 56. 60.100 / 56. 60.100 libavformat 56. 40.101 / 56. 40.101 libavdevice 56. 4.100 / 56 。4.100 libavfilter 5. 40.101 / 5. 40.101 libavresample 2. 1. 0 / 2. 1. 0 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 2.101 / 1. 2.101 libpostproc 53. 3.100 / 53. 3.100100 libavformat 56. 40.101 / 56. 40.101 libavdevice 56. 4.100 / 56. 4.100 libavfilter 5. 40.101 / 5. 40.101 libavresample 2. 1. 0 / 2. 1. 0 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 2.101 / 1. 2.101 libpostproc 53. 3.100 / 53. 3.100100 libavformat 56. 40.101 / 56. 40.101 libavdevice 56. 4.100 / 56. 4.100 libavfilter 5. 40.101 / 5. 40.101 libavresample 2. 1. 0 / 2. 1. 0 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 2.101 / 1. 2.101 libpostproc 53. 3.100 / 53. 3.100

我不知道任何建议/技巧吗?

橡皮筋听起来可能比节奏快; 特别是对于较大的比率差异。如果您想使用橡皮筋,但又不支持此过滤器ffmpeg(并且不想进行编译ffmpeg),则可以使用独立rubberband工具

rubberband 例子

rubberband -D 12 input.wav output.wav
  • -D<X>--duration <X>-拉伸或压扁以使输出文件长X秒

请参阅rubberband -hrubberband命令行实用程序帮助文本以获取更多信息。

循序渐进的过程

不幸的是,这不会是一个命令。使用此方法,您将必须:

  1. 对视频进行编码。
  2. 使用获取视频时长ffprobe
  3. 使用生成音频rubberband
  4. 混合视频和音频:

    ffmpeg -i video -i audio -c copy -shortest output
    

附加条款

  • -movflags +faststart 适用于MP4,但被webm多路复用器忽略。
  • FFmpeg版本2.8.6是旧的。建议用户使用当前git master分支中的构建。最简单的解决方案是下载静态版本,但是如果愿意,可以进行编译编译将允许您使用橡皮过滤器ffmpeg

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章