video - 连接视频音频/视频不同步 : Non-monotonous TDS output

标签 video ffmpeg video-encoding

我正在尝试使用 ffmpeg 添加两个视频,并且输出视频/音频不同步(并且快进)。目标是把 intro.mp4原文件前clip.flv
我的方法是

  • 更改clip.flv的格式至clip.mp4
  • ffmpeg -i clip.flv -q 0 -c copy clip.mp4
    
  • 康卡特intro.mp4clip.mp4
  • ffmpeg -f concat -safe 0 -i filesToJoin.txt -c copy combinedvideo.mp4
    

    我在命令#2 的输出日志中看到了这一点
    [mp4 @ 0x3ebcd60] Non-monotonous DTS in output stream 0:0; previous: 392311, current: 391925; changing to 392312. This may result in incorrect timestamps in the output file.
    frame= 1566 fps=0.0 q=-1.0 Lsize=    8711kB time=00:00:48.86 bitrate=1460.2kbits/s speed= 272x    
    video:7363kB audio:1294kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.619341%
    

    文件元数据

    原始源文件clip.flv元数据
      Metadata:
        encoder         : Lavf57.83.100
      Duration: 00:00:40.09, start: 0.010000, bitrate: 1632 kb/s
        Stream #0:0: Video: h264 (High), yuv420p(progressive), 1280x720, 1500 kb/s, 30 fps, 30 tbr, 1k tbn, 60 tbc
        Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp, 160 kb/s
    

    中间文件intro.mp4元数据
      Metadata:
        major_brand     : mp42
        minor_version   : 0
        compatible_brands: mp42mp41
        creation_time   : 2020-06-02T10:36:51.000000Z
      Duration: 00:00:13.21, start: 0.000000, bitrate: 484 kb/s
        Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 130 kb/s, 30 fps, 30 tbr, 30k tbn, 60k tbc (default)
        Metadata:
          creation_time   : 2020-06-02T10:36:51.000000Z
          handler_name    : Alias Data Handler
          encoder         : AVC Coding
        Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 317 kb/s (default)
        Metadata:
          creation_time   : 2020-06-02T10:36:52.000000Z
          handler_name    : Alias Data Handler
    

    文件 clip.mp4元数据
        Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Lavf57.83.100
      Duration: 00:00:40.01, start: 0.000000, bitrate: 1635 kb/s
        Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 1500 kb/s, 30 fps, 30 tbr, 16k tbn, 60 tbc (default)
        Metadata:
          handler_name    : VideoHandler
        Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 160 kb/s (default)
        Metadata:
          handler_name    : SoundHandler
    

    我尝试过的事情
  • 如您所见,两个视频的帧速率相同,但 不同的时间尺度 ,我尝试在合并视频之前更改其中一个视频的时间刻度以匹配另一个视频,但没有运气。对于时间尺度变化,我使用了这个命令
  • ffmpeg -i clip.mp4 -video_track_timescale 30000 clip_ts30000.mp4
  • 我在 SO 上看到过类似的问题,运气不好
  • 最佳答案

    更新:我尝试了一种解决方法,将视频转换为中间格式 .MTS,然后连接视频,然后将输出视频转换为 .mp4 作为最终输出。

    # Step 1: Convert to MTS format
    ffmpeg -i clip.flv -q 0 clip.MTS
    ffmpeg -i intro.mp4 -q 0 intro.MTS
    
    # Step 2: Concat clip.MTS and intro.MTS
    ffmpeg -f concat -i filesToSync.txt -c copy out.MTS
    
    # Step 3: Convert the output back to mp4
    ffmpeg -i out.MTS -q 0 out.mp4
    
    此解决方法适用于具有怪癖的特定用例:对最终输出文件应用更多的 ffmpeg 操作将给出错误 - 未指定的像素格式。

    关于video - 连接视频音频/视频不同步 : Non-monotonous TDS output,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62192159/

    相关文章:

    java - 在android中正确传递数据?

    javascript - 使用 HTML5 和 JavaScript 从视频中捕获帧

    ruby-on-rails - Rails 使用 ffmpeg 制作视频截图

    amazon-s3 - 如何在 S3 上构建一个守护进程来编码视频文件?

    ios - 切换到标签栏中的不同标签后,原始 VC 中的视频继续播放

    video - 视频稳定的开源实现

    video - FFMPEG 帧间到帧内没有 'converting' 或丢失数据

    ffmpeg - 创建 MPEG-DASH 初始化段

    c++ - 使用 Sink Writer 编码音频

    iphone - ffmpeg 转换命令输出到 iPad 的 h.264