以下是我对“original.mp4” (00:15:22 时长,~80MB 文件大小) 所做的操作:
从 mp4 中提取视频流
ffmpeg -i original.mp4 -c copy -an vid_only.mp4
从 mp4 中提取音频流
ffmpeg -i original.mp4 -vn -acodec copy aud_only.aac
合并提取的音频和视频流,形成新的mp4
ffmpeg -i aud_only.aac -i vid_only.mp4 new_mix.mp4
发现“new_mix.mp4”混合准确,时长与之前相同,但是文件大小已降至 36MB(从~80MB 开始)。使用ffprobe
“original.mp4”和“new_mix.mp4”时,我发现音频和视频流的比特率存在差异。
步骤 1 和步骤 2,提取音频和视频流而不进行任何重新编码。步骤 3,据说合并了音频和视频流,但花了很长时间,所以可能进行了重新编码。是这样的吗?如果是这样,有没有办法告诉 ffmpeg 在合并时不要重新编码,以便更快地完成并保留原始比特率?
答案1
-c copy
告诉 ffmpeg 对所有正在处理的流进行流复制。缺少该功能。
ffmpeg -i aud_only.aac -i vid_only.mp4 -c copy new_mix.mp4
另外,对于第 2 步,最好提取到 M4A 之类的容器中
ffmpeg -i original.mp4 -vn -acodec copy aud_only.m4a
如果您的音频有时间戳间隙,.aac
将会丢失它们。
答案2
好吧,我的错。看来答案只需搜索一下即可。版主可能会将问题标记为重复。以下是我需要做的事情,以实现原始文件大小,并保留原始(更高)比特率,即合并音频 + 视频流而无需重新编码(因此速度更快):
`ffmpeg -i aud_only.aac -i vid_only.mp4 -acodec copy -vcodec copy mixed_copy.mp4`
以下是本网站上的原始问答:如何在ffmpeg中合并音频和视频文件