ffmpeg解码aac输出的wav长度比原来少了4s,怎么办?
dwing吧
全部回复
仅看楼主
level 5
marvbest 楼主
for %%a in (%*) do (
x264\x264-r2345-f0c1c53 --crf 26 --preset slower --deblock 1:1 --psy-rd 0.8:0 --aq-mode 2 --aq-strength 0.7 --qcomp 0.8 --tcfile-out "%%~dpna_2tc.txt" --vf resize:1280,720,1:1,,,lanczos --demuxer lavf -o "%%~dpna_v.264" "%%~fa" && ffmpeg\bin\ffmpeg -i "%%~fa" -f wav -ignore_length - | neroaac\neroaacenc -q 0.26 -if - -ignorelength -of "%%~dpna_a.m4a" && i-smash\muxer --file-format mp4 -i "%%~dpna_v.264" -i "%%~dpna_a.m4a" -o "%%~dpna_mix.mp4" && i-smash\timelineeditor --timecode "%%~dpna_2tc.txt" "%
%~dpna_mix.mp4" "%%~dpna_fixed.mp4"
echo 完毕
)
上面是命令行
源文件是录像视频vfr mp4,转码后的m4a长度比原来少了4s,最终转成的mp4音画不同步。ffmpeg解码出的wav就开始少了4s。怎么解决?
源文件:
概要
名称 :bandicam 2016-02-09 21-19-40-940.mp4
文件格式 : MPEG-4
格式简介 : Base Media
编码设置ID : isom (mp41)
文件大小 : 1.04 GiB
长度 : 19分 32秒
混合码率模式 : VBR
平均混合码率 : 7 605 K
bp
s
编码日期 : UTC 2016-02-09 13:19:40
标记日期 : UTC 2016-02-09 13:19:40
编码程序 : BandiMp4Muxer 1.0
视频
ID : 1
文件格式 : AVC
文件格式/信息 : Advanced Video Codec
格式简介 : Baseline@L4
格式设置, CABAC : 否
格式设置, ReFrames : 1 frame
编码设置ID : avc1
编码设置ID/信息 : Advanced Video Coding
长度 : 19分 32秒
码率 : 7 405 Kbps
画面宽度 : 1 600像素
画面高度 : 900像素
画面比例 : 16:9
帧率模式 : 可变
帧率 : 22.198 fps
最小帧率 : 4.285 fps
最大帧率 : 30.030 fps
色彩空间 : YUV
色度抽样 : 4:2:0
位深度 : 8位
扫描方式 : 逐行扫描
bits/(pixel*frame)(数据密度) : 0.232
大小 : 1.01 GiB (97%)
语言 : English
编码日期 : UTC 2016-02-09 13:19:40
标记日期 : UTC 2016-02-09 13:19:40
音频
ID : 2
文件格式 : AAC
文件格式/信息 : Advanced Audio Codec
格式简介 : LC
编码设置ID : 40
长度 : 19分 32秒
码率模式 : VBR
码率 : 192 Kbps
最大码率 : 285 Kbps
声道 : 2声道
声道位置 : Front: L R
采样率 : 44.1 KHz
帧率 : 43.066 fps (1024 spf)
压缩模式 : 有损压缩
大小 : 27.0 MiB (3%)
语言 : English
编码日期 : UTC 2016-02-09 13:19:40
标记日期 : UTC 2016-02-09 13:19:40
转的aac:
概要
完整名称 :\bandicam 2016-02-09 21-19-40-940_a.m4a
文件格式 : MPEG-4
格式简介 : Base Media / Version 2
编码设置ID : mp42 (M4A /mp42/isom)
文件大小 : 9.28 MiB
长度 : 19分 28秒
混合码率模式 : VBR
平均混合码率 : 66.6 Kbps
编码日期 : UTC 2016-02-10 03:19:15
标记日期 : UTC 2016-02-10 03:19:40
音频
ID : 1
文件格式 : AAC
文件格式/信息 : Advanced Audio Codec
格式简介 : HE-AAC / LC
编码设置ID : 40
长度 : 19分 28秒
码率模式 : VBR
码率 : 66.2 Kbps
最大码率 : 88.6 Kbps
声道 : 2声道
声道位置 : Front: L R
采样率 : 44.1 KHz / 22.05 KHz
帧率 : 21.533 fps (1024 spf)
压缩模式 : 有损压缩
大小 : 9.18 MiB (99%)
编码函数库 : Nero AAC codec 1.5.4.0
编码设置 : -q 0.26
编码日期 : UTC 2016-02-10 03:19:15
标记日期 : UTC 2016-02-10 03:19:40
最终文件:
概要
名称 : bandicam 2016-02-09 21-19-40-940_fixed.mp4
文件格式 : MPEG-4
格式简介 : Base Media / Version 2
编码设置ID : mp42 (mp42/mp41/isom/avc1)
文件大小 : 164 MiB
长度 : 19分 32秒
混合码率模式 : VBR
平均混合码率 : 1 175 Kbps
编码日期 : UTC 2016-02-10 03:21:10
标记日期 : UTC 2016-02-10 03:21:10
视频
ID : 1
文件格式 : AVC
文件格式/信息 : Advanced Video Codec
格式简介 : High@L4
格式设置, CABAC : 是
格式设置, ReFrames : 8 frames
编码设置ID : avc1
编码设置ID/信息 : Advanced Video Coding
长度 : 19分 32秒
Source_Duration/String : 19分 32秒
码率 : 1 105 Kbps
画面宽度 : 1 280像素
画面高度 : 720像素
画面比例 : 16:9
帧率模式 : 可变
帧率 : 22.204 fps
最小帧率 : 4.285 fps
最大帧率 : 30 000.301 fps
色彩空间 : YUV
色度抽样 : 4:2:0
位深度 : 8位
扫描方式 : 逐行扫描
bits/(pixel*frame)(数据密度) : 0.054
大小 : 154 MiB (94%)
Source_StreamSize/String : 154 MiB (94%)
编码函数库 : x264 core 135 r2345 f0c1c53
编码设置 : cabac=1 / ref=8 / deblock=1:1:1 / analyse=0x3:0x133 / me=umh / subme=9 / psy=1 / psy_rd=0.80:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=2 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=12 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=2 / b_bias=0 / direct=3 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=22 / scenecut=40 / intra_refresh=0 / rc_lookahead=60 / rc=crf / mbtree=1 / crf=26.0 / qcomp=0.80 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=2:0.70
编码日期 : UTC 2016-02-10 03:21:10
标记日期 : UTC 2016-02-10 03:21:10
音频
ID : 2
文件格式 : AAC
文件格式/信息 : Advanced Audio Codec
格式简介 : HE-AAC / LC
编码设置ID : 40
长度 : 19分 28秒
码率模式 : VBR
码率 : 66.2 Kbps
声道 : 2声道
声道位置 : Front: L R
采样率 : 44.1 KHz / 22.05 KHz
帧率 : 21.533 fps (1024 spf)
压缩模式 : 有损压缩
大小 : 9.18 MiB (6%)
编码日期 : UTC 2016-02-10 03:21:10
标记日期 : UTC 2016-02-10 03:21:10
2016年02月10日 10点02分 1
level 5
marvbest 楼主
前后两个文件音频里的 帧率 : 43.066 fps (1024 spf) 帧率 : 21.533 fps (1024 spf) 这个参数不一样。 这是什么?
2016年02月10日 15点02分 3
level 5
marvbest 楼主
https://xdsnet.gitbooks.io/other-doc-cn-ffmpeg/content/ffmpeg-doc-cn-05.html
找到了-async 这个参数:
-async samples_per_second:音频同步方式。"拉伸/压缩"音频以匹配时间戳。参数是每秒最大可能的音频改变样本。-async 1是一种特殊情况指只有开始时校正,后续不再校正。
注意时间戳还可以进一步被混合器修改。例如avoid_negative_ts选项被指定时
已不推荐这个选项,而是用aresample音频滤波器代替。
试了一下,duration对了。。。
ffmpeg -i input -vn -async 1 -c:a pcm_s16le -f wav - |
2016年02月10日 17点02分 4
音画同步了。
2016年02月10日 17点02分
@marvbest 感谢,搜到了你的方法解决了问题,某些录制软件出的视频就是有这种奇怪的音频问题
2016年06月01日 07点06分
感谢层主/楼主的翻译,终于懂了这参数....
2016年06月04日 11点06分
level 14
机智的水了一帖[滑稽]
2016年02月10日 22点02分 5
........[委屈]
2016年02月11日 06点02分
level 11
这吧等级没用的……可以不用谁的……
2016年02月11日 07点02分 6
问个问题,还是录像视频,想截前半部分再转,能用ffmpeg截吗?怎么保证pipe输入给x264的流还是原来的动态帧率啊?
2016年02月11日 10点02分
-t 这个命令能截取,但是output显示的总是30fps。。。
2016年02月11日 10点02分
我不是水啊,我是不明白的。。。
2016年02月11日 10点02分
回复 marvbest :我不是大神,你问我没用……自己试试就有结果了吧[汗]
2016年02月11日 16点02分
level 5
marvbest 楼主
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'D:\sony\Documents\Bandicam\bandicam 2016-02-11 02-42-27-781.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: mp41
creation_time : 2016-02-10 18:42:27
encoder : BandiMp4Muxer 1.0
encoder-eng : BandiMp4Muxer 1.0
Duration: 00:54:13.03, start: 0.000000, bitrate: 8715 kb/s
Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1600x900, 8514 kb/s, 24.42 fps, 30 tbr, 30k tbn, 60k tbc (default)
Metadata:
creation_time : 2016-02-10 18:42:27
handler_name : VideoHandler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 194 kb/s (default)
Metadata:
creation_time : 2016-02-10 18:42:27
handler_name : SoundHandler
Output #0, yuv4mpegpipe, to 'pipe:':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: mp41
encoder : Lavf57.24.101
Stream #0:0(eng): Video: wrapped_avframe, yuv420p, 1600x900, q=2-31, 200 kb/s, 30 fps, 30 tbn, 30 tbc (default)
Metadata:
creation_time : 2016-02-10 18:42:27
handler_name : VideoHandler
encoder : Lavc57.24.101 wrapped_avframe
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe (native))
2016年02月11日 10点02分 8
level 1
所以录像最好开强制帧率
另外vfr最好提取timecode
2016年06月01日 07点06分 9
ffmpeg -vsync cfr就可以转成CFR了..什么timecode都不用..
2016年06月04日 11点06分
@我是周身痕 你觉得这么干对么?
2016年06月04日 13点06分
level 7
原来-async这个参数在ffmpeg也有的。
我还以为只有lwi有这个参数
2016年06月04日 10点06分 10
1