我有两个高质量的 mp4 文件,它们是同一节目的两个部分。
我想将它们合并为一个文件,我通常使用 VirtualDub 来合并我的文件……但它似乎不支持 mp4。
有哪些可用的替代方案(特别是不需要重新编码的替代方案)?
答案1
我通常使用 VirtualDub 来合并文件,但它似乎不支持 mp4。那么有什么替代方案吗?
艾维德姆克斯。它就像 VirtualDub,只是支持更多格式,并内置了编解码器和过滤器。我总是喜欢使用它;它对我来说可以很好地合并 AVC+AAC.MP4 文件(无需重新编码)。
要加入 AviDemux:
- 文件 -> 打开 -> 选择文件
- 文件 -> 附加 -> 选择文件
- 全部设置为复制
- 文件 -> 保存 -> 文件名
- 等待..
根据 AViDemux 论坛的说法,这个连接过程是无损的(http://www.avidemux.org/smf/index.php?topic=9467.0)
答案2
您可以使用 ffmpeg 执行此操作:
mkfifo temp0 temp1
ffmpeg -i input0.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y temp0 2> /dev/null & \
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y temp1 2> /dev/null & \
ffmpeg -f mpegts -i "concat:temp0|temp1" -c copy -absf aac_adtstoasc output.mp4
这不会重新编码任何内容,而是将它们放在新的传输流容器中,这使得它们更容易连接,然后将它们连接回 MP4。如果 output.mp4 已经存在,则命令将失败。上面的版本使用命名管道,如果您的系统不支持这些管道,则必须使用中间文件(如 windows):
ffmpeg -i input0.mp4 -c copy -bsf:v h264_mp4toannexb temp0.ts
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb temp1.ts
ffmpeg -i "concat:temp0.ts|temp1.ts" -c copy -bsf:a aac_adtstoasc output.mp4
答案3
Concat 解复用器
concat demuxer 已添加到 ffmpeg 1.1。如果你的 ffmpeg 版本太旧,从这里获取最新的静态二进制文件: http://www.ffmpeg.org/download.html
指示
创建一个文件mylist.txt
,其中包含您想要以以下形式连接的所有文件(以破折号开头的行将被忽略):
# this is a comment
file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'
请注意,这些可以是相对路径,也可以是绝对路径。然后,您可以使用以下方式对文件进行编码:
ffmpeg -f concat -i mylist.txt -c copy output
可以使用 bash for 循环或 printf 生成此列表文件。以下任一方法都可以生成包含工作目录中每个 *.wav 的列表文件:
for f in ./*.wav; do echo "file '$f'" >> mylist.txt; done
printf "file '%s'\n" ./*.wav > mylist.txt
来源:ffmpeg 维基
答案4
尝试使用 Matroska 视频容器。
首先,你需要mkvtoolnix。下载并安装它,然后你需要启动 mkvmerge GUI(除非你喜欢命令行工具,这对我来说没问题 - 虽然你可能想看看文件链接部分的mkvmerge 文档)。
点击“添加”添加第一个文件。然后点击“追加”,打开第二个文件。设置输出文件,点击底部的“开始混流”,就可以了!
如果容器不适合您的需要,您可以重新编码,或者尝试将其转换为其他格式...尽管 MKV 是一个非常可爱的容器!