摘要
- 背景
- 我使用的软件
- 问题
结果
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进程出现无限循环:我必须手动停止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-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 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
从 'youtubed/my_youtube_video.webm' 输入: matroska,webm
Metadata:
encoder: Chrome
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0(eng): Video: vp8, yuv420p(progressive), 3200x1608 [SAR 1:1 DAR 400:201], 1k tbr, 1k tbn, 1k tbc (default)
Metadata:
alpha_mode: 1
输入流 #1.0 的通道布局猜测: stereo
从 "tmp_music/original_music.wav" 输入: wav
Duration: 00:00:11.78, bitrate: 1411 kb/s
#1:0 (pcm_s16le) -> #0:1 (libopus)
Stream mapping:
Stream #0:0 -> #0:0 (vp8(native) -> vp9(libvpx-vp9))
Stream #1:0 -> #0:1 (pcm_s16le(native) -> opus(libopus))
输出到 'youtubed/my_youtube_video_with_music.webm': webm 格式
Metadata:
encoder: Lavf58.29.100
Stream #0:0(eng): Video: vp9 (libvpx-vp9), yuv420p(progressive), 3200x1608 [SAR 1:1 DAR 400:201], q=-1--1, 200 kb/s, 1k fps, 1k tbn, 1k tbc (default)
Metadata:
alpha_mode:
预期结果
ffmpeg过程中不出现无限循环
关于输出日志,我不知道它应该是什么样子。
包含音频和视频的输出文件应:
3.1 如果视频比音频长,则将音频重复直到完全适合视频。可以截短音频。
3.2 如果视频比音频短,则截短音频,以完全适合视频。
3.3 如果视频和音频长度相同,则音频完全适合视频。
如何重现这个bug?(+ 必需数据)
下载以下文件(分别为音频和视频)(我必须每24小时刷新这些下载链接):
将它们移动到您选择的目录/目录中。
打开CLI,移动到适当的目录并复制/粘贴/执行Part. The Problem中给出的指令(不要忘记根据步骤2指定适当的目录来修改此指令)。
您将会面临我的问题。
我尝试修复这个bug了吗?
没有,因为我甚至不知道为什么会出现这个bug。
问题
如何更正我的命令,以便在ffmpeg过程中混合这些音频和视频流,而不会出现任何无限循环,并牢记它们的长度不可预知,并且即使必须截短音频文件(在最后一次重复音频文件必须截短,因为视频流刚刚结束的情况下),音频也必须重复以适合视频?
来源
源是您可以在部分。问题中找到的命令行。
-c:v copy
?FFmpeg如何知道“shortest”参数与音频相关?为什么有两个“shortest”?^^ 另外,如果视频比音频短,那么音频会像预期的那样被截断吗?:-) - JarsOfJam-Scheduler-c:v copy
,视频将会重新压缩。没必要这样做。两个最短的标志针对ffmpeg的不同组件。是的,音频将被截断。 - Gyan