当前位置: 首页 > 知识库问答 >
问题:

ffmpeg 4:在视频播放过程中使用stream_loop参数循环音频,最终导致无限循环

龙焱
2023-03-14

>

  • 上下文
  • 我使用的软件
  • 问题
  • 结果
    4.1。实际结果

    4.2.预期成果

    我尝试了什么来修复这个错误?

    如何重现此缺陷:提供所需数据的最小且可测试的示例

    这个问题

    来源

    我想将音频WAV设置为视频WEBM的背景声音。视频可以比音频短,也可以比音频长。在我将音频添加到视频的那一刻,我不知道两个流的长度。音频必须重复,直到视频结束(如果视频在最后一次音频重复结束之前结束,音频可能会被截断)。

    我使用ffmpeg版本4.2。2-1ubuntu1~18.04。sav0。

    ffmpeg在处理音频和视频混合时似乎进入了一个无限循环。此外,当前生成的输出文件(包含视频和音频)的长度等于音频的长度,而不是视频的长度。

    此问题似乎是由以下命令行触发的:

    ffmpeg -i directory_1/video.webm -stream_loop -1 -fflags +shortest -max_interleave_delta 50000 -i directory_2/audio.wav directory_3/video_and_audio.webm
    

    三件事:

    >

    带有音乐的输出视频文件(当前正在生成但仍在输出):它同时包含音频和视频。但是输出文件的长度等于音频的长度,而不是视频的长度。

    以下输出日志:

    ffmpeg 4.2版。2-1ubuntu1~18.04。sav0版权所有(c)2000-2019 FFmpeg开发人员使用gcc 7(Ubuntu 7.5.0-3ubuntu1~18.04)构建
    配置:-前缀=/usr--extra version='1ubuntu1~18.04。sav0'--toolchain=harded--libdir=/usr/lib/x86_64-linux-gnu--incdir=/usr/include/x86_64-linux-gnu--arch=amd64--enable gpl--disable剥离--enable avresample--disable filter=resample--enable avisynch--enable gnutls--enable ladspa--enable libaom--enable libass enable libbulay--enable libcaca--enable libcdio--enable-libcodec2--enable-libflite--enable-libfontconfig--enable-libfreetype--enable-libgme--enable-libgsm--enable-libjack--enable-libmp3lame--enable-libmysofa--enable-libopenjpeg--enable-libopus--enable-librsvg--enable-librubberband--enable-libshine--enable-libsnapy--enable libsoxr--enable libspeex--enable libssh--enable libthera--enable libtwolame--enable libvidstab--enable libvorbis--enable libvpx--enable libwavpack--enable libwebp--enable-libx265--enable-libxml2--enable libxvid enable libzvbi--enable-lv2--enable omx--enable openal--enable opencl--enable opengl--enable-sdl2--enable-libdc1394--enable-libdrm--enable-libiec61883--enable-nvenc--enable-chromaprint--enable-frei0r--enable-libx264--enable-shared libavutil 56。31.100 / 56. 31.100 libav编解码器58。54.100 / 58. 54.100 libav58格式。29.100 / 58. 29.100 libav设备58。8.100 / 58. 8.100 libav过滤器7。57.100 / 7. 57.100 libavresample 4。0. 0 / 4. 0.0 libswscale 5。5.100 / 5. 5.100磅重采样3。5.100 / 3. 5.100 libpostroc 55。5.100 / 55. 5.100输入#0,matroska,webm,来自youtube/my#u youtube#u视频。webm':元数据:编码器:Chrome持续时间:N/A,开始:0.000000,比特率:N/A流#0:0(英文):视频:vp8,yuv420p(渐进式),3200x1608,SAR 1:1 DAR 400:201,1k tbr,1k tbn,1k tbc(默认)元数据:alpha_模式:输入流的1猜测通道布局#1.0:立体声输入#1,wav,来自“tmp#U音乐/原创#音乐”。wav':
    持续时间:00:00:11.78,比特率:1411kb/s流#1:0:音频:pcm#s16le([1][0][0][0]/0x0001),44100Hz,立体声,S161411kb/s流映射:流#0:0-

    >

    关于输出日志,我不知道它应该是什么样子。

    带有音频和视频的输出文件应:

    3.1. 如果视频比音频长,则会重复音频,直到完全适合视频。音频可以被截断。

    3.2.如果视频比音频短,则音频被截断并完全符合视频。

    3.3.如果视频和音频的长度相同,那么音频完全符合视频。

    >

  • 下载以下文件(分别为音频和视频)(我必须每24小时刷新一次这些下载链接):

    1.1. https://a.uguu.se/dmgsmItjJMDq_audio.wav

    1.2.https://a.uguu.se/w3qHDlGq6mOW_video.webm

    将它们移动到您选择的目录中。

    打开CLI,移动到适当目录并复制/粘贴/执行Part中给出的指令。问题(不要忘记根据第2步,通过指示适当的目录最终修改这条指令。)。

    你会面对我的问题。

    没什么,因为我甚至不明白为什么虫子会出现。

    如何纠正我的命令,以便在ffmpeg过程中没有任何无限循环地混合这些音频和视频流,记住我不知道它们的长度,并且音频必须重复以适应视频,即使音频必须被截断(在最后一次重复的情况下,音频文件必须被截断,因为视频流刚刚结束)?

    源代码是您可以在Part中找到的命令行。问题。

  • 共有1个答案

    王季萌
    2023-03-14

    您的一些选项的位置是错误的。所有最短的相关选项都位于输出的前面。

    ffmpeg -i directory_1/video.webm -stream_loop -1 -i directory_2/audio.wav -c:v copy -shortest -fflags +shortest -max_interleave_delta 100M directory_3/video_and_audio.webm
    

    没有必要转码视频,除非你愿意。

     类似资料:
    • 问题内容: 在AVFoundation中是否有相对简单的循环视频的方法? 我已经如下创建了我的AVPlayer和AVPlayerLayer: 然后播放以下视频: 视频播放正常,但在最后停止。使用MPMoviePlayerController,您所要做的就是将其属性设置为正确的值。在AVPlayer上似乎没有类似的属性。似乎也没有回调可以告诉我电影何时结束,因此我可以寻找开始并再次播放。 我没有使用

    • 问题内容: 我最近一直在使用HTML5音频进行播放,尽管我可以播放HTML5音频,但只能播放一次。无论我尝试什么(设置属性,事件处理程序等),我似乎都无法使其循环。 这是我正在使用的基本代码: 我正在使用Chrome(6.0.466.0开发人员)和Firefox(4beta1)进行测试,这两者似乎都很乐意忽略我的循环请求。有任何想法吗? 更新 :现在,所有主流浏览器都支持loop属性。 问题答案:

    • 音频和视频都能在第一次正确播放,在音频播放完成时视频循环(因为它更短)。唯一的问题是音频循环不工作,一旦音频第一次完成,流就停止了。 以下是日志: ffmpeg version 4.3.1版权所有(c)2000-2020 ffmpeg开发人员 使用Apple clang version 12.0.0(clang-1200.0.32.27) 配置构建:--prefix=/usr/local/cell

    • 我正在寻找一个解决方案在FFmpeg合并音频(mp3)与短视频循环,或GIF。 我已经能够通过加入音频从图像生成视频,但视频在音频持续时间内保持静态帧,命令如下: 我需要的视频,有音频的持续时间,但使用另一个mp4或GIF循环。在音频持续时间内保持重复。

    • 我的期望: 如果用户输入的Int不在正确的范围内,程序将给他另一次机会,直到用户给出正确的类型。 所以,我需要一个块。但我有一个无限循环。 我的代码: 我读到: 重置. nextLine()扫描仪 使用扫描仪。扫描仪后面的nextLine()。nextInt() nextInt()的扫描仪错误 扫描仪在使用next()或nextFoo()后跳过nextLine()? 如何使用java.util.扫

    • 我想在我的循环应用程序中持续播放音乐,就像商店中的许多游戏应用程序一样。 但是,我不确定何时初始化音乐循环开始以及如何停止它。我创建了一个类,其中包含开始和停止音乐的逻辑。 我的应用程序结构也是这样的 主飞镖 Wrapper.dart