如何使用FFMPEG将文件夹中的所有视频合并为单个视频文件

2024-10-02 04:26:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含20多个视频文件的文件夹,我需要将它们合并为一个长视频文件。如何在Python中使用FFMPEG实现这一点?

我知道下面的命令

ffmpeg -vcodec copy -isync -i \ "concat:file1.mp4|file2.mp4|...|fileN.mp4" \

输出文件.mp4

但我不想把20多个文件的名字都打出来。


Tags: 文件命令文件夹名字file1ffmpegfile2mp4
3条回答

这就是我最后用的。。。

find *.mp4 | sed 's:\ :\\\ :g'| sed 's/^/file /' > fl.txt; ffmpeg -f concat -i fl.txt -c copy output.mp4; rm fl.txt

这很难看,但它似乎工作正常,它处理文件名中的空格。另外,不知道OP为什么要问python——不需要使用像python这样可爱的东西,因为一些脏兮兮的旧bash/sed可以做到这一点!;)

附言:我知道这是一个老帖子,但如果谷歌“ffmpeg concat”把我带到这里,它可能也会带来其他可怜的灵魂在这里。注意:只有当所有文件都具有相同的设置/编解码器时,上述方法才可能起作用。

可以是单行bash命令:

for f in *.mp4 ; do echo file \'$f\' >> list.txt; done && ffmpeg -f concat -safe 0 -i list.txt -c copy stitched-video.mp4 && rm list.txt

确保所有视频文件的帧大小和音视频编解码器完全相同。

否则,可以在连接时转换它们:

for f in *.mp4 ; do echo file \'$f\' >> list.txt; done && ffmpeg -f concat -safe 0 -i list.txt -s 1280x720 -crf 24 stitched-video.mp4 && rm list.txt

如果ffmpeg不喜欢*.mp4,您可以在文件列表中进行此操作

ls -1 *.mp4 | perl -0pe 's/\n/|/g;s/\|$//g'

但我认为你的例子并没有遵循specification,所以你可能希望这样:

for F in *.mp4 ; do
    ffmpeg -i $F -c copy -bsf:v h264_mp4toannexb -f mpegts $(echo $F | perl -pe 's/mp4$/ts/g');
done
ffmpeg -i "concat:$(ls -1 *.ts | perl -0pe 's/\n/|/g;s/\|$//g')" -c copy -bsf:a aac_adtstoasc outputfile.mp4

也可以看到类似的question

相关问题 更多 >

    热门问题