我已经尝试过这个答案。它运行良好,只是缺少音频。有人能建议如何将视频和音频都放入输出中吗?
例子:
我在假期拍摄了一段时长 2 分钟的袋鼠视频。视频中有两部分(每部分约 6 秒长),我想将其(包括音频)提取成一段简短的视频,只包含这两段可爱的片段。
我知道我可以提取两个单独的位,然后将它们连接起来,但上面提到的文章允许我做我想要做的事情,但是当你按照那个方法时没有音频。我想使用类似的 FFmpeg 单次调用。
答案1
这里我假设您的原始文件在mp4
容器中,但该方法也适用于其他容器。
一步法-(稍微复杂一些)另请参阅 ptQa 在引用线程。但这里是添加了音频的相同内容:
ffmpeg -i inputfile.mp4 \
-filter_complex "[0:v]trim=start=10:end=16,setpts=PTS-STARTPTS[a];
[0:v]trim=start=20:end=26,setpts=PTS-STARTPTS[b];
[0:a]atrim=start=10:end=16,asetpts=PTS-STARTPTS[c];
[0:a]atrim=start=20:end=26,asetpts=PTS-STARTPTS[d];
[a][c][b][d]concat=n=2:v=1:a=1[e][f]" \
-map '[e]' -map '[f]' -strict -2 outputfile.mp4
这将添加音频流和获取音频所需的垫片。
为完整性起见,提供:
简单的方法:您可以使用您已经知道的两步流程:
第一的从完整视频中剪切并提取您想要的 2 个片段。
第二将这两部分连接在一起。
这应该是一条简单的出路。
比如说,剪切从第三秒到第九秒的片段:
ffmpeg -i input.mp4 -ss 00:00:03 -to 00:00:09 -c:v copy -c:a copy part1.mp4
您可以对第二部分重复此过程。如果是从第 10 秒到第 16 秒:
ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:16 -c:v copy -c:a copy part2.mp4
另请参阅这线程以了解更多详细信息。
现在您有 2 个文件可以合并。您可以用至少 3 种不同的方式“连接”。无需重新编码即可通过解复用器选项完成此操作。创建一个名为 joinlist.txt 的文本文件,内容如下:
file 'part1.mp4'
file 'part2.mp4'
要合并这两个文件,请将两部电影和文本(joinlist.txt)放在同一个文件夹中,然后使用此命令:
ffmpeg -f concat -i joinlist.txt -c copy joinedfile.mp4