我有一个1小时视频,想通过复制变成10小时视频,用ffmpeg如何操作

2023-04-05by@jinzaizhichi9888-TavwL&@python.Model: gpt-3.5
jinzaizhichi9888-TavwL

You are a Python Coder Expert,I have something to ask you.

Avatar
jinzaizhichi9888-TavwL

我有一个1小时视频,想通过复制变成10小时视频,用ffmpeg如何操作

Avatar
Avatar

您可以使用 FFmpeg 中的 concatloop 过滤器来实现复制视频的操作。以下是具体的步骤:

  1. 将原始视频复制 10 次,生成 10 份相同的视频文件。

    ffmpeg -i input.mp4 -f lavfi -i "color=black:s=1920x1080:r=25" -filter_complex "[0:v][0:a][1:v][1:a][1:v][1:a][1:v][1:a][1:v][1:a]concat=n=10:v=1:a=1" -c:v libx264 -crf 18 -preset veryfast -c:a aac -b:a 320k output.mp4
    
  2. 对生成的视频进行无限循环,直到达到所需的长度。

    ffmpeg -stream_loop -1 -i output.mp4 -t 10:00:00 -c copy final_output.mp4
    

在上述命令中,-stream_loop -1 表示对视频进行无限循环,-t 10:00:00 表示输出视频的长度为 10 小时,-c copy 表示不对视频进行重新编码,保留原始编码格式。

请注意,上述操作可能需要一些时间才能完成,具体取决于您的计算机性能和视频文件大小。

jinzaizhichi9888-TavwL

ffmpeg -i input.mp4 -f lavfi -i "color=black:s=1920x1080:r=25" -filter_complex "[0:v][0:a][1:v][1:a][1:v][1:a][1:v][1:a][1:v][1:a]concat=n=10:v=1:a=1" -c:v libx264 -crf 18 -preset veryfast -c:a aac -b:a 320k output.mp4

Avatar
Avatar

这个命令将原始视频 input.mp4 和一个黑色背景合成为一个 10 倍长的视频 output.mp4。解释一下各个参数的含义:

  • -i input.mp4: 指定输入文件为 input.mp4
  • -f lavfi -i "color=black:s=1920x1080:r=25": 使用 FFmpeg 自带的 lavfi 模块生成一个黑色背景,并设置分辨率为 1920x1080,帧率为 25 帧/秒。
  • -filter_complex: 指定复杂滤镜,用于将输入文件和黑色背景合成为一个 10 倍长的视频。
  • [0:v][0:a][1:v][1:a][1:v][1:a][1:v][1:a][1:v][1:a]: 表示需要合并的视频和音频流。[0:v][0:a] 表示输入文件的视频和音频流,[1:v][1:a] 表示黑色背景的视频和音频流。一共需要合并 10 次,所以这里重复了 5 次。
  • concat=n=10:v=1:a=1: 使用 concat 过滤器将上面的 10 个视频和音频流合并为一个视频流和一个音频流,其中 n=10 表示需要合并的视频和音频流的数量为 10,v=1 表示只需要保留视频流,a=1 表示只需要保留一个音频流。
  • -c:v libx264 -crf 18 -preset veryfast: 指定视频编码器为 x264,设置 CRF 为 18,预设为 veryfast。CRF 越小,视频质量越高,但文件大小越大;预设越慢,编码效率越高,但文件大小越大。这里的参数可以根据您的需求进行调整。
  • -c:a aac -b:a 320k: 指定音频编码器为 AAC,比特率为 320k。这里的参数可以根据您的需求进行调整。
  • output.mp4: 指定输出文件为 output.mp4
jinzaizhichi9888-TavwL

ffmpeg -stream_loop -1 -i output.mp4 -t 10:00:00 -c copy final_output.mp4

Avatar
Avatar

这个命令将上一个命令生成的 10 倍长的视频 output.mp4 无限循环,并输出一个长度为 10 小时的最终视频 final_output.mp4。解释一下各个参数的含义:

  • -stream_loop -1: 表示对输入文件进行无限循环。
  • -i output.mp4: 指定输入文件为 output.mp4
  • -t 10:00:00: 指定输出视频的长度为 10 小时。
  • -c copy: 表示不对视频进行重新编码,保留原始编码格式。
  • final_output.mp4: 指定输出文件为 final_output.mp4

通过这个命令,您可以将一个 1 小时的视频复制为一个 10 小时的视频。请注意,这个命令可能需要一些时间才能完成,具体取决于您的计算机性能和视频文件大小。