Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video 如何通过avconv合并视频?_Video_Avconv - Fatal编程技术网

Video 如何通过avconv合并视频?

Video 如何通过avconv合并视频?,video,avconv,Video,Avconv,我的文件夹里有几个块 0001.mp4 0002.mp4 0003.mp4 ... 0112.mp4 我想把它们合并成full.mp4 我尝试使用: avconv -f concat -i <(printf "file '%s'\n" /root/chunk/*.mp4) -y \ -c copy /root/test/full.mp4 在上一版本中,只有一个输入文件被捕获到输出 如何将文件夹中的所有块合并到完整视频中 我不想使用ffmpeg或其他。仅限Avconv avconv -i

我的文件夹里有几个块

0001.mp4
0002.mp4
0003.mp4
...
0112.mp4
我想把它们合并成full.mp4

我尝试使用:

avconv -f concat -i <(printf "file '%s'\n" /root/chunk/*.mp4) -y \
-c copy /root/test/full.mp4
在上一版本中,只有一个输入文件被捕获到输出

如何将文件夹中的所有块合并到完整视频中

我不想使用ffmpeg或其他。仅限Avconv

avconv -i concat:file1.mp4\|file2.mp4 -c copy output.mp4

我不知道是否适用于任何容器的类型(适用于我的
AVI
)。

mp4
文件不能简单地连接,正如“已接受”的答案所示

如果您单独运行它,您将得到
output.mp4
中只有
file1.mp4
的内容

也就是说,只要您将原始文件正确地分割为mpeg流,您在原始问题中希望做的事情实际上是可以完成的

以下命令将在文件[1-3].ts中将
input.mp4
拆分为3x 60秒的段:

avconv -ss 0 -i input.mp4 -t 60 -vcodec libx264 -acodec aac \
    -bsf:v h264_mp4toannexb -f mpegts -strict experimental -y file1.ts
avconv -ss 0 -i input.mp4 -t 60 -vcodec libx264 -acodec aac \
    -bsf:v h264_mp4toannexb -f mpegts -strict experimental -y file2.ts
avconv -ss 0 -i input.mp4 -t 60 -vcodec libx264 -acodec aac \
    -bsf:v h264_mp4toannexb -f mpegts -strict experimental -y file3.ts
然后,您可以按照另一个答案的建议将它们重新组合在一起:

avconv -i concat:"file1.ts|file2.ts|file3.ts" -c copy \
   -bsf:a aac_adtstoasc -y full.mp4
我使用此过程创建了一个可伸缩的并行转码器,如所述:


我想这种方法只适用于压缩原始*.avi文件。但是,由于很多愿意加入avi文件的人最终都会看到这个问题,我将在这里发布我的答案:

cat *.avi > out_tmp.avi
avconv -i out_tmp.avi -c copy output.avi
再一次:仅适用于未压缩的*.avi文件。

此操作有效

avconv -i 1.mp4 1.mpeg
avconv -i 2.mp4 2.mpeg
avconv -i 3.mp4 3.mpeg

cat 1.mpeg 2.mpeg 3.mpeg | avconv -f mpeg -i - -vcodec mpeg4 -strict experimental output.mp4
如果您只有avconv,以上功能就可以使用-但是ffmpeg添加了一些功能。。。引述:

“以上avconv步骤会执行不必要的额外有损编码步骤,这一步骤非常缓慢,并且会降低成本 输出的质量。我建议使用concat demuxer(其他信息) 或者改为concat过滤器,但avconv缺少ffmpeg中ffmpeg中提供的功能

    SEE  https://trac.ffmpeg.org/wiki/Concatenate
如果您使用的系统支持命名管道,则可以使用这些管道来避免创建中间文件-这会将stderr(ffmpeg将所有写入的数据发送到)发送到/dev/null,以避免命令行混乱:

mkfifo temp1 temp2
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp1 2> /dev/null 
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp2 2> /dev/null 
ffmpeg -f mpegts -i "concat:temp1|temp2" -c copy -bsf:a aac_adtstoasc output.mp4

对于mp4,我找到的唯一可行的解决方案是使用gpac包中的MP4Box

#!/bin/bash
filesList=""
for file in $(ls *.mp4|sort -n);do
    filesList="$filesList -cat $file"
done
MP4Box $filesList -new merged_files_$(date +%Y%m%d_%H%M%S).mp4
或者命令是

MP4Box -cat file1.mp4 -cat file2.mp4 -new mergedFile.mp4
使用mencoder和avconv,我无法使它工作:-(

我使用gtk工具实现了这一点)。它作为一个软件包在大多数Linux下可用,也适用于Windows和Mac。 我只是打开了第一个文件,然后按顺序添加了下一个文件。 最后,我使用音频和视频拷贝和格式mp4保存了连接的视频

它工作得很好!

这一款适合我:

avconv -i "concat:001.mp4|002.mp4|003.mp4" -c copy full.mp4

只需将所有文件合并成一个mp4,而无需重新编码。

我正在使用
ffmpeg
命令来完成此操作。以下是示例:

ffmpeg -i concat:/dev/null|file1.ts|file2.ts -c copy -bsf:a aac_adtstoasc -y output.mp4

看看这个github项目,我发现了一个名为Avdshare Video Converter 7的工具,它成功地连接了我的视频。它甚至可以将它们转换成我想要的任何格式

我尝试了这一页上的每一个解决方案…他们都给了我你在阅读我的答案时可能遇到的相同错误。“没有找到协议”会让你不高兴吗?他们可能这也是适合你的程序

我正在windows上运行它

在程序中连接两个视频的步骤如下:

将视频拖放到程序中

单击“合并”

选择一个“保存配置文件”,该文件指定您可以使用的每个参数 想要调整吗

单击保存按钮


在没有得到错误消息的答案后,我得到了所有这些类似的答案:

~ avconv -i 'concat:' -c copy test.mp4
avconv version 12.3, Copyright (c) 2000-2018 the Libav developers
  built on Jan 22 2019 21:47:11 with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
concat:: Protocol not found
我翻阅了一些谷歌搜索结果,进入bug追踪器,发现了以下内容:

似乎它不仅在某个时候被禁用,而且在第12版中被删除,但是我在自制Mac 10.13.6上构建的12.3版本在输入协议中仍然列出了“concat”,我在文档中也看到了它,因此有一个未解决的bug报告

我很幸运地使用了这个命令:

cat *.VOB | avconv -i - -c copy test.mp4

对我来说不起作用…必须使用mencoder…mencoder-oac pcm-ovc copy-o merged_file.mp4
ls*.mp4
mp4容器不能以这种方式连接。mp4和matroska不能连接。您需要先将其重新编码到一个可连接的或可随机查看的容器中,如MPEG-TS或NUT。接受的答案对我来说不起作用相反,我使用了
MP4Box
命令(来自gpac包),如下所示:
MP4Box video1.mp4-cat video2.mp4-cat video3.mp4[…]-out video full.mp4
no,不起作用。最终结果是视频与第一个视频一样长,可查看的内容正好是第一个视频的内容。其他视频似乎被忽略。此解决方案对我不起作用。如果我在命令行中的任何位置使用单词
concat
,我总是会出现类似 未知输入格式:“concat”或
请求的输出格式“concat:test.mp3”不是合适的输出格式
。有什么建议吗?你有什么版本的avconv?我与avconv版本12有同样的问题。版本11不起作用。当涉及到webm时,我在这里提出了一个相关的错误:存在链接损坏问题,since您已经从dropbox中删除了avconv.txt文件。我将从问题中删除它。我使用了avconv-I“concat:`ls*.mp4 | tr'\r\n'\\\\\\''''''-c copy“combined.mp4”在windows上。对于linux,我认为您应该只使用\n,而不是\r\n显示许多错误(在最后一步),但唯一的答案是我合并了一个文件,所以+1!这几乎对我有效,但质量有所下降…(图像是像素化的。)有什么办法解决这个问题吗?我在debian jessie上,这是我唯一可以运行的答案(主要是因为缺少软件包)。但结果很奇怪,实际流比VLC显示的流短,在那里搜索时,它只会重新启动播放。接收当前目录中所有mp4文件的较短命令行是:
MP4Box$(printf--“-cat%s”*.mp4)-new mergedFi
~ avconv -i 'concat:' -c copy test.mp4
avconv version 12.3, Copyright (c) 2000-2018 the Libav developers
  built on Jan 22 2019 21:47:11 with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
concat:: Protocol not found
cat *.VOB | avconv -i - -c copy test.mp4