我向同一个社区发布了同样的问题视频制作,我后来发现了这个问题,而且这个问题似乎更适合这个问题:
我的AVCHD摄像机录制了一些 .MTS(AVCHD格式)文件。其规格如下所示:
$ ffprobe 140612_Canon-00000.MTS
ffprobe version 2.2.1 Copyright (c) 2007-2014 the FFmpeg developers
(snip)
Input #0, mpegts, from '140612_Canon-00000.MTS':
Duration: 00:48:58.40, start: 0.800300, bitrate: 5563 kb/s
Program 1
Stream #0:0[0x1011]: Video: h264 (High) (HDMV / 0x564D4448),
yuv420p, 1440x1080 [SAR 4:3 DAR 16:9],
29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Stream #0:1[0x1100]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz,
stereo, fltp, 256 kb/s
注意帧速率/时基的部分: 29.97 fps,29.97 tbr,90k tbn,59.94 tbc
现在我想将此文件转换为.mp4文件,而无需重新编码H264视频流,另一方面,将其音频流转码为AAC 。 所以我尝试了以下命令:
ffmpeg -i 140612_Canon-00000.MTS -t 60 -y -vcodec copy -acodec libfaac -ab 128k 140612_Canon-00001.MTS.mp4
和输出文件的规范如下所示:
$ ffprobe 140612_Canon-00000.MTS.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '140612_Canon-00000.MTS.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf55.33.100
Duration: 00:01:00.04, start: 0.021333, bitrate: 4590 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p,
1440x1080 [SAR 4:3 DAR 16:9], 4448 kb/s,
59.94 fps, 59.94 tbr, 90k tbn, 59.94 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D),
48000 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
查看帧率/时基的部分: 59.94 fps,59.94 tbr,90k tbn,59.94 tbc 。 虽然ffmpeg刚刚复制了视频流,但帧速率和时基已更改为两倍的值。
因此,当我使用QuickTime Player或VLC Player打开并播放输出文件时, 音频没有问题,但视频流播放不正确。 视频播放时,其帧向前和向后反复颤动。
ffmpeg
及其-vcodec copy
开关转换容器时,如何保持原始帧速率/时基值(fps / tbr / tbn / tbc)。< / LI>
有什么想法吗?
答案 0 :(得分:13)
这是:
ffmpeg -i input.m2ts -c:v copy -c:a aac -strict experimental -b:a 128k output.mp4
这只会复制视频流而无需重新编码并将音轨编码为AAC VBR立体声,它需要最近的FFmpeg版本。
答案 1 :(得分:0)
由于总是需要合并多个文件,因此我发现以下命令对此很有帮助。 $ ffmpeg -i“ concat:$(echo * .MTS | tr'''|')” out.mp4