如何使用ffmpeg连接这两种不同格式的视频文件?

时间:2018-06-11 20:26:16

标签: ffmpeg android-ffmpeg

文件s.mp4是根据照片创建的,并添加了静音音轨。 文件r.mp4是使用Android平板电脑上的内置视频记录创建的。

我想尝试将s.mp4与r.mp4匹配,以便它们可以连接(然后是r)。现在,时基似乎关闭,它播放来自r.mp4的音频,但从不显示视频。它始终显示来自s.mp4的视频。我能够使用-video_track_timescale 90k匹配90亿的tbn,但我不知道如何匹配tbc。一个是180k,另一个是59.94。

探索s.mp4

./ffprobe s.mp4 
ffprobe version 4.0-tessus Copyright (c) 2007-2018 the FFmpeg developers
  built with Apple LLVM version 9.1.0 (clang-902.0.39.1)
  configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-version3 --pkg-config-flags=--static --disable-ffplay
  libavutil      56. 14.100 / 56. 14.100
  libavcodec     58. 18.100 / 58. 18.100
  libavformat    58. 12.100 / 58. 12.100
  libavdevice    58.  3.100 / 58.  3.100
  libavfilter     7. 16.100 /  7. 16.100
  libswscale      5.  1.100 /  5.  1.100
  libswresample   3.  1.100 /  3.  1.100
  libpostproc    55.  1.100 / 55.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 's.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.25.100
  Duration: 00:00:05.04, start: 0.000000, bitrate: 296 kb/s
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 286 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 2 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

探测r.mp4

./ffprobe r.mp4 
ffprobe version 4.0-tessus Copyright (c) 2007-2018 the FFmpeg developers
  built with Apple LLVM version 9.1.0 (clang-902.0.39.1)
  configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-version3 --pkg-config-flags=--static --disable-ffplay
  libavutil      56. 14.100 / 56. 14.100
  libavcodec     58. 18.100 / 58. 18.100
  libavformat    58. 12.100 / 58. 12.100
  libavdevice    58.  3.100 / 58.  3.100
  libavfilter     7. 16.100 /  7. 16.100
  libswscale      5.  1.100 /  5.  1.100
  libswresample   3.  1.100 /  3.  1.100
  libpostproc    55.  1.100 / 55.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'r.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2018-06-11T20:12:03.000000Z
    com.android.version: 7.0
  Duration: 00:00:10.89, start: 0.000000, bitrate: 17087 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709/bt709/smpte170m), 1920x1080, 16810 kb/s, SAR 1:1 DAR 16:9, 30 fps, 30 tbr, 90k tbn, 180k tbc (default)
    Metadata:
      creation_time   : 2018-06-11T20:12:03.000000Z
      handler_name    : VideoHandle
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 256 kb/s (default)
    Metadata:
      creation_time   : 2018-06-11T20:12:03.000000Z
      handler_name    : SoundHandle

1 个答案:

答案 0 :(得分:1)

使用此命令生成s.mp4

ffmpeg -framerate 30 -i image -f lavfi -i anullsrc
       -c:v libx264 -profile:v high -c:a aac
       -pix_fmt yuv420p -ac 2 -ar 48000
       -color_range 1 -color_primaries 1 -colorspace 1 -color_trc 6
       -video_track_timescale 90k -t 5 s.mp4

r有一个高调的H264流,因此应该匹配。我不知道具体的编码设置,所以仍然有可能某些属性如refcount不匹配。

tbc对于连续目的无关紧要。也没有颜色标志,但我只是为勤奋的玩家设置它们。

我建议您将这两个文件重新复制到TS,然后连接到MP4。这将使主视频的xPS保持在带内,因此即使其属性不完全匹配,一些播放器也会重新启动解码器。