这是我用来组合多个视频的命令:
ffmpeg -i 75_540_38HQ2.mp4 -i 76_70_20.mp4 -i 76_173_80.mp4 -i 81_186_35.mp4 -vcodec copy -acodec copy Mux1.mp4
结果Mux1.mp4不包含所有视频.只有第一个视频(75_540_38HQ2.mp4).源和结果视频的文件大小在下面(如您所见,生成的视频略大于第一个视频):
$ ls -lh -rw-r--r-- 1 dbaker dbaker 42M 2011-03-24 11:59 75_540_38HQ2.mp4 -rw-r--r-- 1 dbaker dbaker 236M 2011-03-24 12:09 76_173_80.mp4 -rw-r--r-- 1 dbaker dbaker 26M 2011-03-24 12:05 76_70_20.mp4 -rw-r--r-- 1 dbaker dbaker 54M 2011-03-24 12:15 81_186_35.mp4 -rw-r--r-- 1 dbaker dbaker 44M 2011-03-24 14:48 Mux1.mp4
这是ffmpeg命令的输出.对我来说它看起来没问题,显示了多个源输入和单个输出.
FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
built on Mar 21 2011 18:05:32 with gcc 4.4.5
configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab
libavutil 50.36. 0 / 50.36. 0
libavcore 0.16. 1 / 0.16. 1
libavcodec 52.108. 0 / 52.108. 0
libavformat 52.93. 0 / 52.93. 0
libavdevice 52. 2. 3 / 52. 2. 3
libavfilter 1.74. 0 / 1.74. 0
libswscale 0.12. 0 / 0.12. 0
libpostproc 51. 2. 0 / 51. 2. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '75_540_38HQ2.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
creation_time : 1970-01-01 00:00:00
encoder : Lavf52.93.0
Duration: 00:00:29.99, start: 0.000000, bitrate: 11517 kb/s
Stream #0.0(eng): Video: h264, yuv420p, 1280x960 [PAR 1:1 DAR 4:3], 11575 kb/s, 29.94 fps, 29.97 tbr, 30k tbn, 59.94 tbc
Metadata:
creation_time : 1970-01-01 00:00:00
Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16, 127 kb/s
Metadata:
creation_time : 1970-01-01 00:00:00
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from '76_70_20.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
creation_time : 1970-01-01 00:00:00
encoder : Lavf52.93.0
Duration: 00:00:19.98, start: 0.000000, bitrate: 10901 kb/s
Stream #1.0(eng): Video: h264, yuv420p, 1280x960 [PAR 1:1 DAR 4:3], 10804 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc
Metadata:
creation_time : 1970-01-01 00:00:00
Stream #1.1(eng): Audio: aac, 48000 Hz, stereo, s16, 128 kb/s
Metadata:
creation_time : 1970-01-01 00:00:00
Input #2, mov,mp4,m4a,3gp,3g2,mj2, from '76_173_80.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
creation_time : 1970-01-01 00:00:00
encoder : Lavf52.93.0
Duration: 00:03:09.99, start: 0.000000, bitrate: 10393 kb/s
Stream #2.0(eng): Video: h264, yuv420p, 1280x960 [PAR 1:1 DAR 4:3], 10321 kb/s, 29.96 fps, 29.97 tbr, 30k tbn, 59.94 tbc
Metadata:
creation_time : 1970-01-01 00:00:00
Stream #2.1(eng): Audio: aac, 48000 Hz, stereo, s16, 128 kb/s
Metadata:
creation_time : 1970-01-01 00:00:00
Seems stream 0 codec frame rate differs from container frame rate: 119.88 (120000/1001) -> 30000.00 (30000/1)
Input #3, mov,mp4,m4a,3gp,3g2,mj2, from '81_186_35.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
creation_time : 1970-01-01 00:00:00
encoder : Lavf52.93.0
Duration: 00:00:35.00, start: 0.000000, bitrate: 12700 kb/s
Stream #3.0(eng): Video: h264, yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 12620 kb/s, 59.91 fps, 30k tbr, 60k tbn, 119.88 tbc
Metadata:
creation_time : 1970-01-01 00:00:00
Stream #3.1(eng): Audio: aac, 48000 Hz, stereo, s16, 128 kb/s
Metadata:
creation_time : 1970-01-01 00:00:00
Output #0, mp4, to 'Mux1.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
creation_time : 1970-01-01 00:00:00
encoder : Lavf52.93.0
Stream #0.0(eng): Video: libx264, yuv420p, 1280x960 [PAR 1:1 DAR 4:3], q=2-31, 11575 kb/s, 30k tbn, 29.97 tbc
Metadata:
creation_time : 1970-01-01 00:00:00
Stream #0.1(eng): Audio: libfaac, 48000 Hz, stereo, 128 kb/s
Metadata:
creation_time : 1970-01-01 00:00:00
Stream mapping:
Stream #0.0 -> #0.0
Stream #2.1 -> #0.1
Press [q] to stop encoding
frame= 883 fps=632 q=-1.0 Lsize= 44730kB time=29.40 bitrate=12465.1kbits/s
video:41678kB audio:2969kB global headers:0kB muxing overhead 0.184548%
我在这里做一些令人眼花缭乱的事吗?
源视频来自摄像机,并采用小片段 ffmpeg -i bigfile.mp4 -ss 20 -t 10 -vcodec copy etc..
谢谢堆!戴夫
编辑:无法解决它所以我只使用avidemux GUI工具.它似乎附加了MP4就好了.
一定是MP4的问题,或者只是gopro相机的问题.
bcm*_*inc 19
假设您要连接电影,可以使用以下命令:
ffmpeg -f concat -i inputs.txt -vcodec copy -acodec copy Mux1.mp4
Run Code Online (Sandbox Code Playgroud)
使用inputs.txt中的以下文本:
file 75_540_38HQ2.mp4
file 76_70_20.mp4
file 76_173_80.mp4
file 81_186_35.mp4
Run Code Online (Sandbox Code Playgroud)
注意:某些发行版(如Ubuntu)在其存储库中没有ffmpeg,而是将ffmpeg定义为avconv的别名.这对avconv不起作用,所以在这种情况下你必须自己编译ffmpeg.您可以通过运行ffmpeg并检查第一个输出行是否以"FFmpeg开发人员"结束来检查您是否拥有真正的ffmpeg.
Rod*_*olo 13
忘记FFmpeg,改用MP4Box,它简单快捷:
mp4box -add video1.mp4 -cat video2.mp4 -cat video3.mp4 output.mp4
Run Code Online (Sandbox Code Playgroud)
它适用于Windows,Linux和OS X:http: //www.videohelp.com/tools/mp4box
如果你在Windows上,你可以使用YAMB,它是MP4Box的GUI,效果很好:http: //www.videohelp.com/tools/YAMB
更新2016年6月: FFmpeg添加了一个串联过滤器,更多信息请访问:https: //stackoverflow.com/a/11175851/218418
从ffmpeg手册页"示例"部分:
您可以在输出中放置许多相同类型的流:
ffmpeg -i test1.avi -i test2.avi -vcodec copy -acodec copy \ -vcodec copy -acodec copy test12.avi -newvideo -newaudio
Run Code Online (Sandbox Code Playgroud)
除了第一个视频和音频流之外,生成的输出文件test12.avi将包含在输入流列表中找到的第二个视频和第二个音频流.
必须在要添加它们的输出文件的名称后面立即指定"-newvideo"," - newaudio"和"-newsubtitle"选项.
如果您想要连接它们,则常见问题解答中有说明.
我不确定这个问题/答案是否属于SuperUser.
您必须将它们转换为可以轻松连接的 MPEG 格式。以下是我为 GoPro 视频使用并称为“ffcat”的脚本。它本质上运行了几个“ffmpeg -i”命令,这些命令生成可连接的 MPEG,这些命令通过管道传输到 ffmpeg 命令,然后将它们转换为 H.264 mp4 文件。
它还可以将视频大小调整为 720p,但您可能不希望这样。
“h264options”是我最近在h264.code-shop.com的互联网上找到的标志
希望这会有所帮助,里德
cmd="( "
h264options="-vcodec libx264 -b 512k -flags +loop+mv4 -cmp 256 \
-partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 \
-me_method hex -subq 7 -trellis 1 -refs 5 -bf 3 \
-flags2 +bpyramid+wpred+mixed_refs+dct8x8 -coder 1 -me_range 16 \
-g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10\
-qmax 51 -qdiff 4"
outfile="out-`date +%F-%H%M.%S`.mp4"
for i; do
cmd="${cmd}ffmpeg -i $i -ab 256000 -vb 10000000 -mbd rd -trellis 2 -cmp 2 -subcmp 2 -g 100 -f mpeg -; "
done
cmd="${cmd} ) | ffmpeg -y -i - -threads 8 ${h264options} -vb 10000000 -acodec libfaac -ar 44100 -ab 128k -s 1280x720 ${outfile}"
echo "${cmd}"
eval ${cmd}
Run Code Online (Sandbox Code Playgroud)
如果所有输入视频具有相同的编解码器,并且您希望输出视频也在同一编解码器中,则简单concat适用于mp4和mkv文件.
https://trac.ffmpeg.org/wiki/Concatenate
你需要创建一个像这样的文本文件
# this is a comment
file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'
Run Code Online (Sandbox Code Playgroud)
然后使用命令
ffmpeg -f concat -i mylist.txt -c copy output.mp4
Run Code Online (Sandbox Code Playgroud)
我使用了相同参考页面中的示例,它运行得很好.唯一的问题是视频未正确捕获.它可能会引入音频视频同步问题,因为它只是将PTS和DTS信息从源视频复制到目标视频.
要获得完整的校对解决方案,您需要逐个数据包读取视频,然后将所有数据包放在一个视频中,并进行自定义优化,例如丢弃重复的PTS数据包并保持单调的PTS值.
| 归档时间: |
|
| 查看次数: |
86756 次 |
| 最近记录: |