我正在编写一个python脚本,它使用子进程来调用FFMPEG,而不是使用pyffmpeg。
我的脚本使用AAC音频编解码器生成数量可变的MP4文件,并使用FFMPEG将它们连接在一起。下面是我是如何构造每个剪辑的:
ffmpeg -loop 1 -i image.jpg -i recording.mp3 -tune stillimage -c:a aac -b:a 256k -shortest clip.mp4我用来连接它们的命令是:
ffmpeg -f concat -i clip_names.txt -c copy video_raw.mp4然后,我将生成的视频,在其上混合一个循环音轨,并调整音量。(对于糟糕的格式,很抱歉)
ffmpeg -i video_raw -filter_complex
"amovie=Tracks/Breaktime.mp3:loop=0,
volume=0.1,
asetpts=N/SR/TB[aud];
[0:a][aud]amix[a]"
-map 0:v -map [a] -b:a 256k -shortest final_video.mp4这些命令似乎按照我的预期工作。当我在本地机器上播放生成的MP4时,一切都没有问题。
然而,我将视频上传到了YouTube,并遇到了问题。当从YouTube播放视频时,在下一个剪辑开始之前,在连接两个剪辑的每个时间戳上都会有大约一秒钟的静默。我已经在Chrome,IE和Firefox上尝试过了,都有同样的问题。
根据我到目前为止所看到的,我认为这可能是每个单独剪辑的初始化样本如何处理的问题。我没有义务继续使用MP4或AAC,所以如果使用不同的音频/视频编解码器会更好,请随时建议!
是否可以在FFMPEG中进行某种类型的操作来去除初始化样本,或者以某种方式对它们进行不同的处理?最后,我希望每个剪辑都可以背靠背播放,而不会出现concat操作似乎插入的延迟。谢谢!
发布于 2020-04-10 03:18:23
这不是因为引爆样本。-shortest不能确保所有流的长度相同,因为当多路复用器接收到停止输出的信号时,在多路复用队列中可能存在缓冲的分组。对于25fps的视频流,1秒的溢出似乎是正确的。有一些方法可以mitigate持续时间溢出,但我建议你获取音频的持续时间,并根据这一点设置-t X并跳过-shortest。
另外,保存到具有音频编解码器-c:a pcm_s16le的MOV。您将避免初始化样本偏移量。
https://stackoverflow.com/questions/61128138
复制相似问题