我有一个用 H264 和 AAC 编码的 .mp4 视频。我提取了音频,以便在 Audacity 中做一些更改,并使用 ffmpeg 将视频和新音频合并起来。但结果发现,虽然视频长度为 12:40.92,但提取的音频只有 12:30.59。当我将音频从 AAC 转换为 WAV 时,音频长度缩短了——无论 ffmpeg 是否转换,或者我只是使用 ffmpeg 提取 .m4a 文件然后将其导入 Audacity,情况都一样。
当我创建新的视频文件时,我可以通过延长音频(-filter:a "atempo=0.986424"
)来解决问题。但我不明白提取的音频有什么“问题”。Audacity 和 ffmpeg 都缩短了音频,所以这似乎不是任何人的“错”。
有人有什么想法吗?.m4a 文件中是否有控制这一点的属性?如果有,我该如何查看该属性?
细节:
ffprobe
报告视频时长为 12:40:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.20.100
Duration: 00:12:40.92, start: 0.000000, bitrate: 1432 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1245 kb/s, 29.56 fps, 59.94 tbr, 90k tbn, 59.94 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 177 kb/s (default)
Metadata:
handler_name : SoundHandler
如果我提取音频(ffmpeg -i video.mp4 -vn -c:a copy audio.m4a
),.m4a 文件大小为 17,095,597 B,时长为 12:40:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'audio.m4a':
Metadata:
major_brand : M4A
minor_version : 512
compatible_brands: isomiso2
encoder : Lavf58.20.100
Duration: 00:12:40.92, start: 0.000000, bitrate: 179 kb/s
Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 177 kb/s (default)
Metadata:
handler_name : SoundHandler
现在我们将 .m4a 转换为 WAV(ffmpeg -i audio.m4a audio.wav
):
Output #0, wav, to 'audio.wav':
Metadata:
major_brand : M4A
minor_version : 512
compatible_brands: isomiso2
ISFT : Lavf58.20.100
Stream #0:0(und): Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s (default)
Metadata:
handler_name : SoundHandler
encoder : Lavc58.35.100 pcm_s16le
size= 129300kB time=00:12:40.91 bitrate=1392.0kbits/s speed= 964x
video:0kB audio:129300kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000059%
但 ffprobe 现在显示持续时间已缩短至 12:30:
Input #0, wav, from 'audio.wav':
Metadata:
encoder : Lavf58.20.100
Duration: 00:12:30.59, bitrate: 1411 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s
答案1
尝试一下。这是同步和ffmpeg -i {video} -async 1 -f {fmt} {audio}
之间的时间戳的方法。source-video
target-audio
答案2
您想提取 aac 音频吗?这是不可能的。
音频时间为 00:12:30.59(00 小时,12 分 30 秒 59 毫秒)视频时间为 00:12:40.92,开始:0.000000(00 小时,12 分 40 秒 92 毫秒)
您必须将音频复制到一个新文件(如 only_audio.mp4)中,并将视频复制到 only_video.mp4 中,请尝试以下方法
ffmpeg -i video.mp4 -map 0:0 -map 0:1 -c copy -an only_video.mp4
将创建一个名为only_video.mp4 的文件,时长为 00:12:40.92
ffmpeg -i 视频.mp4 -map 0:0 -map 0:1 -vn -c 复制 -strict -2 only_audio.mp4
将创建一个名为only_audio.mp4 的文件,时长为 00:12:30.59
好的...编辑你的only_audio.mp4 文件...并检查编辑的文件是否为“aac”及其时间,(理论上必须是)00:12:40.92
结论;音频文件比only_video.mp4小00:00:10.33秒...
你必须使用-其偏移量
ffmpeg -i "only_video.mp4" -itsoffset 00:00:10.33 -i "only_audio.mp4" -map 0:v -map 1:a -c copy -strict -2 "problem_end.mp4"
好的,朋友,花了很多钱,我想要终极版的 Mac,如果可以的话,发邮件[电子邮件保护]感谢和问候!