Windows 为什么我的mp4文件的音频不同步

Windows 为什么我的mp4文件的音频不同步,windows,ffmpeg,x264,mp4box,Windows,Ffmpeg,X264,Mp4box,我在将wmv文件转换为mp4时遇到问题。我正在使用x264.exe此命令获取视频流 x264--输出temporal.264--fps 25--预设慢速--比特率2048--vbv最大速率2048--vbv bufsize 9600--min keyint 48--keyint 48--scenecut 0--no scenecut--pass 1--视频过滤器“resize:width=640,height=480”Original.wmv 然后我使用ffmpeg.exe提取音频流,行为: f

我在将wmv文件转换为mp4时遇到问题。我正在使用x264.exe此命令获取视频流

x264--输出temporal.264--fps 25--预设慢速--比特率2048--vbv最大速率2048--vbv bufsize 9600--min keyint 48--keyint 48--scenecut 0--no scenecut--pass 1--视频过滤器“resize:width=640,height=480”Original.wmv

然后我使用ffmpeg.exe提取音频流,行为:

ffmpeg-i.wmv-acodec libfdk_aac-b:32000 temporal.aac

最后,我使用MP4Box将每个流与此行合并:

MP4Box-添加temporal.264 Final.mp4
MP4Box-添加temporal.aac Final.mp4

问题是final.mp4音频不同步。它开始很好,但随着时间的推移,它与时间失去了同步

我运行以下命令:

MP4Box-info 010004470063PE-10022017083824-2_多媒体--1.mp4

我发现两条流的估计时间不同:

命令输出

*电影信息*
时间刻度600-2轨道
计算的持续时间01:00:03.643-指示的持续时间01:00:03.643
碎片文件:否
适合渐进下载的文件(mdat之前的moov)
文件品牌isom-第1版
兼容品牌:isom avc1
创建时间:格林尼治时间2018年6月27日星期三16:31:44
修改时间:格林尼治时间2018年6月27日星期三16:31:44
文件具有根IOD(9字节)
场景PL 0xff-图形PL 0xff-OD PL 0xff
可视PL:AVC/H264配置文件(0x7f)
音频PL:2级AAC配置文件(0x29)
根OD中不包含流
轨道#1信息-轨道ID 1-时间刻度25000
媒体持续时间00:59:57.520-指示的持续时间00:59:57.520
曲目有1个编辑列表:曲目持续时间为00:59:57.320
媒体信息:语言“待定(und)”-类型“vide:avc1”-89938样本
可视轨道布局:x=0 y=0宽度=640高度=480
MPEG-4配置:可视流-对象类型指示0x21
AVC/H264视频-视觉尺寸640 x 480
AVC信息:1个SPS-1个PPS-主配置文件@3级
NAL单位长度位:32
色度格式YUV 4:2:0-亮度位深度8-色度位深度8
SPS#1散列:41EE779BEF2AA7131EAFD3C77C7E3BC95FD8E
PPS#1哈希:086E1D72A40A0E8CF35D102F34A9DF6CD44D6CEF
自同步
RFC6381编解码器参数:avc1.4D401E
平均GOP长度:250个样本
轨道#2信息-轨道ID 2-时间刻度44100
媒体持续时间01:00:03.644-指示的持续时间01:00:03.644
媒体信息:语言“待定(und)”-类型“soun:mp4a”-155196个样本
MPEG-4配置:音频流-对象类型指示0x40
MPEG-4音频AAC LC-2通道-采样器44100
在流1上同步
RFC6381编解码器参数:mp4a.40.2
所有样本都是同步的


我不明白为什么会这样,因为原始wmv是完全同步的。有什么帮助吗?

.aac
是一个没有时间戳的原始容器,如果源音频中存在PTS间隙,它们将丢失

您有两种变通方法:

a) 提取到定时样本容器中

ffmpeg -i .wmv -acodec libfdk_aac -b:a 32000 -vn temporal.m4a
b) 填补空白并提取

ffmpeg -i .wmv -af aresample=async=1 -acodec libfdk_aac -b:a 32000 temporal.aac

.aac
是一个没有时间戳的原始容器,如果源音频中存在PTS间隙,它们将丢失

您有两种变通方法:

a) 提取到定时样本容器中

ffmpeg -i .wmv -acodec libfdk_aac -b:a 32000 -vn temporal.m4a
b) 填补空白并提取

ffmpeg -i .wmv -af aresample=async=1 -acodec libfdk_aac -b:a 32000 temporal.aac
基于我使用ffmpeg将wmv文件转码到mp4的响应,分离音频和视频序列是个坏主意。最后,我使用以下命令进行代码转换:

ffmpeg-i.wmv-c:v libx264-preset slow-crf 23-c:a aac-r 25-b:a 48k-strict-2-max_muxing_queue_size 4000.mp4

基于我使用ffmpeg将wmv文件转码到mp4的响应,分离音频和视频序列是个坏主意。最后,我使用以下命令进行代码转换:


ffmpeg-i.wmv-c:v libx264-preset slow-crf 23-c:a aac-r 25-b:a 48k-strict-2-max_muxing_queue_size 4000.mp4

感谢您的快速响应,我尝试了,但仍然是异步的,看到
MP4Box-info
命令的输出,更短的流是3秒的视频流,知道这是为什么吗?使用ffmpeg的直接转码也会产生同样的结果吗?使用
ffmpeg-i input.wmv-c:v libx264-crf 23-c:a aac-strict-2-q:a 100 output.mp4-max_muxing_queue_size 4000
它会给我太多的数据包,为输出流0:0进行缓冲。错误。这就是为什么我使用上面的aproach
-max\u muxing\u queue\u size 4000
必须在输出文件名之前。进行更正并尝试该命令,同时在输出名称之前插入
-af asetpts=N/SR/TB,aresample=async=1
。我尝试了您给我的命令,但是,生成的文件冻结并定期更改帧。这是我使用的提要:
ffmpeg-I 010004470063PE-10022017083824-2\u MultiMedia-1.wmv-c:v libx264-crf 23-c:a aac-strict-2-q:a 100-max\u muxing\u queue\u size 4000-af asetpts=N/SR/TB,aresample=async=1 010004470063PE-10022017083824-2\u MultiMedia-1.mp4
感谢您的快速响应,我试过了,但仍然是异步的,查看
MP4Box-info
命令的输出,较短的流是3秒的视频流,知道这是为什么吗?使用ffmpeg的直接转码也会产生同样的结果吗?使用
ffmpeg-i input.wmv-c:v libx264-crf 23-c:a aac-strict-2-q:a 100 output.mp4-max_muxing_queue_size 4000
它会给我太多的数据包,为输出流0:0进行缓冲。错误。这就是为什么我使用上面的aproach
-max\u muxing\u queue\u size 4000
必须在输出文件名之前。进行更正并尝试该命令,同时在输出名称之前插入
-af asetpts=N/SR/TB,aresample=async=1
。我尝试了您给我的命令,但是,生成的文件冻结并定期更改帧。这是我使用的提要: