【问题标题】:ffmpeg 4: Using the stream_loop parameter to loop the audio during a video ends up with an infinite loopffmpeg 4:在视频期间使用 stream_loop 参数循环音频以无限循环结束
【发布时间】:2020-10-03 22:12:59
【问题描述】:

总结

  1. 上下文
  2. 我使用的软件
  3. 问题
  4. 结果
    4.1。实际结果

    4.2。预期结果

  5. 我尝试过什么来修复这个错误?

  6. 如何重现此错误:使用提供的所需数据的最小且可测试的示例

  7. 问题

  8. 来源


上下文

我想将音频 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

结果

实际结果

三件事:

  1. ffmpeg进程无限循环:我必须手动停止ffmpeg进程

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

  3. 以下输出日志:

ffmpeg 版本 4.2.2-1ubuntu1~18.04.sav0 版权所有 (c) 2000-2019 使用 gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04) 构建的 FFmpeg 开发人员
配置:--prefix=/usr --extra-version='1ubuntu1~18.04.sav0' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping -- enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-op encl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-nvenc --enable-chromaprint --enable-frei0r --enable-libx264 --enable-共享 libavutil 56. 31.100 / 56. 31.100 libavcodec 58. 54.100 / 58. 54.100 libavformat 58. 29.100 / 58. 29.100 libavdevice 58. 8.100 / 58. 8.100 libavfilter 7. 57.100 / 7. 57.100 libavresample 4. 0. 0 / 4. 0. 0 libswscale 5. 5.100 / 5. 5.100 libswresample 3. 5.100 / 3. 5.100 libpostproc 55. 5.100 / 55. 5.100 输入#0,matroska,webm,来自 'youtubed/my_youtube_video.webm':元数据: 编码器:Chrome 持续时间:N/A,开始:0.000000,比特率:N/A 流 #0:0(eng):视频:vp8、yuv420p(渐进式)、3200x1608、SAR 1:1 DAR 400:201、1k tbr、1k tbn、1k tbc(默认) 元数据: alpha_mode:1 输入流#1.0 的猜测通道布局:立体声输入 #1,wav,来自 'tmp_music/original_music.wav':
时长:00:00:11.78,比特率:1411 kb/s 流 #1:0:音频:pcm_s16le ([1][0][0][0] / 0x0001),44100 Hz,立体声,s16,1411 kb/s 流映射:流 #0:0 -> #0: 0 (vp8 (native) -> vp9 (libvpx-vp9)) 流 #1:0 -> #0:1 (pcm_s16le (native) -> opus (libopus)) 按 [q] 停止,按 [?] 寻求帮助 [libvpx-vp9 @ 0x5645268aed80] v1.8.2 [libopus @ 0x5645268b09c0] 没有位 率设置。默认为 96000 bps。输出#0,webm,到 'youtubed/my_youtube_video_with_music.webm':元数据: 编码器:Lavf58.29.100 流 #0:0(eng):视频:vp9 (libvpx-vp9)、yuv420p(渐进式)、3200x1608 [SAR 1:1 DAR 400:201]、q=-1--1、200 kb/s、1k fps , 1,000 吨, 1,000 待定(默认) 元数据: 阿尔法模式:1 编码器:Lavc58.54.100 libvpx-vp9 侧面数据: cpb:比特率最大/最小/平均:0/0/0 缓冲区大小:0 vbv_delay:-1 流 #0:1:音频:opus (libopus),48000 Hz,立体声,s16,96 kb/s 元数据: 编码器:Lavc58.54.100 libopus

预期结果

  1. ffmpeg过程中没有无限循环

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

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

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

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

    3.3。如果视频和音频的长度相同,则音频完全适合视频。

如何重现此错误? (+ 所需数据)

  1. 下载以下文件(resp.音频和视频)(我必须每 24 小时刷新一次这些下载链接):

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

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

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

  3. 打开您的 CLI,移至 adquat 目录并复制/粘贴/执行部分中给出的指令。问题(不要忘记根据步骤 2 指示适当的目录来最终修改此指令。)。

  4. 你会遇到我的问题。

我尝试修复这个错误的方法是什么?

没什么,因为我什至不明白为什么会出现这个错误。

问题

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

来源

来源是您可以在部分中找到的命令行。问题

【问题讨论】:

    标签: audio video ffmpeg


    【解决方案1】:

    您的某些选项的位置有误。所有最短的相关选项都在输出的前面。

    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
    

    除非您愿意,否则无需对视频进行转码。

    【讨论】:

    • 谢谢,它有效!你为什么使用 -c:v copy ? ffmpeg 如何知道shortest 参数与音频相关?为什么有两个shortest? ^^ 另外,如果视频比音频短,音频会按预期截断吗? :-)
    • 没有-c:v copy,视频会被重新压缩。没必要。两个最短的标志针对 ffmpeg 的不同组件。是的,音频将被截断。
    • 我不知道它是什么黑客:“-shortest -fflags +shortest”,但它确实解决了我使用的问题:“-shortest”。谢谢,伙计。
    猜你喜欢
    • 2011-06-28
    • 2017-12-19
    • 2020-12-21
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多