ffmpeg 拼接两个视频

准备

确保电脑已经装了 ffmpeg 环境

ffmpeg -version
image.png

操作

使用 concat demuxer(推荐,简单)

  • 创建文件列表:新建一个文本文件(如 list.txt),列出需要拼接的视频文件,格式如下:
file 'video1.mp4'
file 'video2.mp4'

确保文件路径正确(相对或绝对路径)。


image.png

运行 ffmpeg 命令:

ffmpeg -f concat -i list.txt -c copy output.mp4
  • -f concat:指定使用 concat demuxer。

  • -i list.txt:输入文件列表。

  • -c copy:直接复制视频和音频流,不重新编码,速度快,质量无损。

image.png

问题

  • 查看原两个视频信息
C:\Users\Rina\Desktop\视频>ffmpeg -f concat -i list.txt -c copy output.mp4
ffmpeg version N-119024-g226fcc7258-20250328 Copyright (c) 2000-2025 the FFmpeg developers
  built with gcc 14.2.0 (crosstool-NG 1.27.0.18_7458341)
  configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --enable-shared --disable-static --disable-w32threads --enable-pthreads --enable-iconv --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-libxml2 --enable-lzma --enable-fontconfig --enable-libharfbuzz --enable-libvorbis --enable-opencl --disable-libpulse --enable-libvmaf --disable-libxcb --disable-xlib --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --enable-libdvdread --enable-libdvdnav --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libaribcaption --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-libzmq --enable-lv2 --enable-libvpl --enable-openal --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --disable-libdrm --enable-vaapi --enable-libvidstab --enable-vulkan --enable-libshaderc --enable-libplacebo --disable-libvvenc --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-libs=-lgomp --extra-ldflags=-pthread --extra-ldexeflags= --cc=x86_64-w64-mingw32-gcc --cxx=x86_64-w64-mingw32-g++ --ar=x86_64-w64-mingw32-gcc-ar --ranlib=x86_64-w64-mingw32-gcc-ranlib --nm=x86_64-w64-mingw32-gcc-nm --extra-version=20250328
  libavutil      59. 60.100 / 59. 60.100
  libavcodec     61. 33.102 / 61. 33.102
  libavformat    61.  9.108 / 61.  9.108
  libavdevice    61.  4.100 / 61.  4.100
  libavfilter    10.  9.100 / 10.  9.100
  libswscale      8. 13.103 /  8. 13.103
  libswresample   5.  4.100 /  5.  4.100
  libpostproc    58.  4.100 / 58.  4.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000024e731bbf00] Auto-inserting h264_mp4toannexb bitstream filter
Input #0, concat, from 'list.txt':
  Duration: N/A, start: 0.000000, bitrate: 15204 kb/s
  Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080, 14887 kb/s, 29.97 fps, 29.97 tbr, 30k tbn
    Metadata:
      creation_time   : 2024-03-15T05:34:11.000000Z
      handler_name    : ?Mainconcept Video Media Handler
      vendor_id       : [0][0][0][0]
      encoder         : AVC Coding
  Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 317 kb/s
    Metadata:
      creation_time   : 2024-03-15T05:34:12.000000Z
      handler_name    : #Mainconcept MP4 Sound Media Handler
      vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Output #0, mp4, to 'output.mp4':
  Metadata:
    encoder         : Lavf61.9.108
  Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080, q=2-31, 14887 kb/s, 29.97 fps, 29.97 tbr, 30k tbn
    Metadata:
      creation_time   : 2024-03-15T05:34:11.000000Z
      handler_name    : ?Mainconcept Video Media Handler
      vendor_id       : [0][0][0][0]
      encoder         : AVC Coding
  Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 317 kb/s
    Metadata:
      creation_time   : 2024-03-15T05:34:12.000000Z
      handler_name    : #Mainconcept MP4 Sound Media Handler
      vendor_id       : [0][0][0][0]
Press [q] to stop, [?] for help
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000024e75304700] Auto-inserting h264_mp4toannexb bitstream filter1x
[aost#0:1/copy @ 0000024e731c3c40] Non-monotonic DTS; previous: 17701888, current: 17701461; changing to 17701889. This may result in incorrect timestamps in the output file.
[out#0/mp4 @ 0000024e7314db80] video:945393KiB audio:17995KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.067771%
frame=18030 fps=8016 q=-1.0 Lsize=  964041KiB time=00:10:01.37 bitrate=13132.3kbits/s speed= 267x


  • 这个拼接出来有问题,第二个视频有问题,为避免帧率和时间戳问题,重新编码 video1.mp4 和 video2.mp4,确保视频和音频属性完全一致:
ffmpeg -i video1.mp4 -c:v libx264 -r 29.97 -c:a aac -ar 48000 -ac 2 -fflags +genpts standardized_video1.mp4
ffmpeg -i video2.mp4 -c:v libx264 -r 29.97 -c:a aac -ar 48000 -ac 2 -fflags +genpts standardized_video2.mp4
  • list.txt 内容如下
file 'C:/Users/Rina/Desktop/视频/standardized_video1.mp4'
file 'C:/Users/Rina/Desktop/视频/standardized_video2.mp4'
  • 合并
ffmpeg -f concat -safe 0 -i list.txt -c copy -fflags +genpts output.mp4
  • 确认时长约为 10 分钟(6:08 + 3:52)。

  • 快进到第 6:08 处,检查 standardized_video2.mp4 的音频是否正常。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容