[英]FFMpeg Convert AVI to MP4 - Audio / Video Out of Sync
我有一个应用程序,可以让用户从他们的网络摄像头录制视频。 用户录制 3 个剪辑,然后将它们组合成一个视频进行播放。
我在转换为 MP4 后有时会遇到第三个剪辑上的音频和视频不同步的问题。
现在流程是这样的——
使用 Mencoder 合并 AVI 视频文件并在它们之间插入过渡视频以合并 avi 文件。
mencoder.exe -oac copy -ovc copy -idx -o test.avi c:\temp\*.avi
我收到此错误:
Muxer frame buffer cannot allocate memory!
1 duplicate frame(s)!
1 duplicate frame(s)!
1 duplicate frame(s)!
1 duplicate frame(s)!
1 duplicate frame(s)!
1 duplicate frame(s)!
但是,视频被组合到 avi 并且这个 AVI 播放没有任何音频同步问题。
使用mencoder重新索引
mencoder.exe -idx TEST.AVI
此时视频作为 AVI 仍然可以正常播放。
使用 ffmpeg 批处理文件将 AVI 转换为 MP4:
set FFMPEG_DATADIR=c:\Presets
ffmpeg.exe -i "test.avi" -s 640x480 -y -strict experimental -acodec aac \
-ab 128k -ac 2 -ar 48000 -vcodec libx264 -vpre medium -vpre ipod640 -r 24 \
-g 48 -b 520000 -threads 64 "out.mp4"
这一切都必须使用 Windows 中的命令行工具以编程方式完成(没有视频编辑 GUI 软件)。
这是示例 avi 和 mp4 文件。 音频/视频同步发生在 1:03 标记附近。 AVI 不会不同步,而 mp4 会。
http://trtemp.s3.amazonaws.com/new.avi
http://trtemp.s3.amazonaws.com/new.mp4
有没有人有任何建议来解决这个问题?
几件事:
-strict experimental
开关。 由于您遇到音频同步问题,因此这是一个明显的候选问题区域。 如果可用,请考虑使用libfaac 。 (您很可能必须构建自己的 FFmpeg 编译。)-threads 64
都不会让它运行得更快。 遵循普遍接受的 #cores * 3 / 2 约定。因此,如果您有 4 个内核,则桅杆为4 * 3 / 2 = 6
。 我自己对-threads
的实验表明,每个线程超过 4-6 的回报率递减,而超过 12-16 的线程则归零(没有任何好处)。 充其量,64 个线程不会有任何影响。 在最坏的情况下,它会变慢或降低结果的质量。-copyts
选项。 “将时间戳从输入复制到输出。”-async
开关。音频同步方法。 “拉伸/挤压”音频流以匹配时间戳,该参数是每秒更改音频的最大样本数。 -async 1 是一种特殊情况,其中仅纠正音频流的开头,而没有任何后续纠正。
我有类似的音频同步问题与 avi 或 dv --> 在 linux 下使用 mencoder 的 mp4。 简单的解决方案是先提取音频,然后将 avi 转换为 mp4,最后一步将两个轨道混合在一起。 可以使用 shellscript avi2mp4.sh 来完成,如下所示:
#!/bin/bash
# convert avi files to mp4 with correct sync of video and audio.
# usage: avi2mp4 <sourcefile> <targetfile>
audiopart=$2.audiotmp.mp3
videopart=$2.videotmp.mp4
mencoder -of rawaudio -oac lavc -lavcopts acodec=mp2:abitrate=128 -ovc copy -o $audiopart $1
mencoder -oac mp3lame -ovc x264 -vf yadif=0:harddup -o $videopart $1
mencoder -oac copy -ovc copy -audiofile $audiofile -o $2 $videopart
rm $audiopart
rm $videopart
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.