如何才能通过ffmpeg将.MTS文件(AVCHD)转换为.mp4而无需正确重新编码H264视频流?

kao*_*obo 9 ffmpeg h.264 mpeg2-ts


我贴到另一社区的同样的问题,视频制作,我已经发现较晚,而这似乎是这个问题的一个更好的地方:

请参阅:https://video.stackexchange.com/questions/12156/how-can-i-convert-mts-file-avchd-to-mp4-by-ffmpeg-without-re-encoding-h264-v/


我尝试了什么

我有一些用我的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
Run Code Online (Sandbox Code Playgroud)

注意帧速率/时基的部分: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

2.结果

和输出文件的规范如下所示:

$ 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
Run Code Online (Sandbox Code Playgroud)

看一下帧率/时基的部分:59.94 fps,59.94 tbr,90k tbn,59.94 tbc.虽然ffmpeg刚刚复制了视频流,但帧速率和时基已经改为两倍的值.

因此,当我使用QuickTime Player或VLC Player打开并播放输出文件时,音频没有问题,但视频流播放不正确.播放视频时,其帧向前和向后反复颤动.

3.问题

  1. 如何才能通过ffmpeg将.MTS文件(AVCHD)转换为.mp4而无需正确重新编码H264视频流
  2. 当我使用及其开关转换容器时,如何保持原始帧速率/时基值(fps/tbr/tbn/tbc).ffmpeg-vcodec copy
  3. 如何在不重新编码视频流的情况下通过ffmpeg的命令行选项设置帧速率/时基值(fps/tbr/tbn/tbc).

有任何想法吗?

Rod*_*olo 14

这里是:

ffmpeg -i input.m2ts -c:v copy -c:a aac -strict experimental -b:a 128k output.mp4
Run Code Online (Sandbox Code Playgroud)

这将仅复制视频流而无需重新编码并将音轨编码为AAC VBR立体声,它需要最近的FFmpeg版本.