我正在尝试找出编码到 theora+vorbis 中的命令出了什么问题。我可以用最少的代码演示这个问题,如下所示:
对音频进行编码,然后对视频进行编码,效果很好:
ffmpeg -filter_complex "smptehdbars=size=1280x720:rate=30000/1001[v];sine=beep_factor=2[a]" -map [a] -map [v] -vcodec libtheora -acodec libvorbis -t 3 -f ogg map-audio-video.ogg -y
但是视频和音频无法一起播放(交换了-map的顺序):
ffmpeg -filter_complex "smptehdbars=size=1280x720:rate=30000/1001[v];sine=beep_factor=2[a]" -map [v] -map [a] -vcodec libtheora -acodec libvorbis -t 3 -f ogg map-video-audio.ogg -y
并失败并出现以下错误:
ffmpeg version 4.4-full_build-www.gyan.dev Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 10.2.0 (Rev6, Built by MSYS2 project)
Stream mapping:
smptehdbars -> Stream #0:0 (libtheora)
sine -> Stream #0:1 (libvorbis)
Press [q] to stop, [?] for help
[libvorbis @ 000001f846602fc0] more samples than frame size
Audio encoding failed
Conversion failed!
知道为什么标准顺序的视频、音频会根据样本与帧大小而中断吗?
答案1
使用-f lavfi
表示以下输入是过滤器。由于您有两个不同的输入,因此使用两个-f lavfi
。
ffmpeg -y -f lavfi -i "smptehdbars=size=1280x720:rate=30000/1001" -f lavfi -i "sine=beep_factor=2" -c:v libtheora -c:a libvorbis -t 3 output.ogg