ffmpeg - 加入2个视频,一个接一个地播放


2

我正在尝试将两个视频文件连接在一起 - 我正在通过PHP exec()管理命令,因为这些视频是由用户选择的。我可以让它工作,因为它确实输出了正确组合大小的视频,但似乎它们实际上设置在不同的轨道上,它只播放第一个输入视频。

命令是

ffmpeg -i temp/production/videos/title.66.avi -i temp/production/videos/66.1391426205.avi \
-filter_complex '[0:0] [1:0] concat=n=2:v=1[v]' -map '[v]' \
temp/production/videos/final.66.1391426205.mp4 2>&1

而输出是

ffmpeg version 2.1.3 Copyright (c) 2000-2014 the FFmpeg developers
  built on Jan 30 2014 14:39:10 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)
  configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-x11grab --enable-libvpx --enable-libmp3lame
  libavutil      52. 48.101 / 52. 48.101
  libavcodec     55. 39.101 / 55. 39.101
  libavformat    55. 19.104 / 55. 19.104
  libavdevice    55.  5.100 / 55.  5.100
  libavfilter     3. 90.100 /  3. 90.100
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
  libpostproc    52.  3.100 / 52.  3.100
Input #0, avi, from 'temp/production/videos/title.66.avi':
  Metadata:
    encoder         : Lavf55.19.104
  Duration: 00:00:05.00, start: 0.000000, bitrate: 36 kb/s
    Stream #0:0: Video: h264 (High) (H264 / 0x34363248), yuv420p, 640x640 [SAR 641:643 DAR 641:643], 25 fps, 25 tbr, 25 tbn, 50 tbc
Input #1, avi, from 'temp/production/videos/66.1391426268.avi':
  Metadata:
    encoder         : Lavf55.19.104
  Duration: 00:00:11.42, start: 0.000000, bitrate: 943 kb/s
    Stream #1:0: Video: mpeg4 (Simple Profile) (FMP4 / 0x34504D46), yuv420p, 640x640 [SAR 1:1 DAR 1:1], 12 tbr, 12 tbn, 12 tbc
[Parsed_concat_0 @ 0x27771e0] Input link in1:v0 parameters (size 640x640, SAR 1:1) do not match the corresponding output link in0:v0 parameters (640x640, SAR 641:643)
[Parsed_concat_0 @ 0x27771e0] Failed to configure output pad on Parsed_concat_0

cat temp / production / videos / title.66.avi temp / production / videos / 66.1391423618.avi | ffmpeg -f avi -i - -vcodec copy -acodec copy temp / production / videos / final.66.1391423618.mp4 2>&1是我正在尝试的命令,它似乎创建了一个文件,其中的文件大小似乎正确输入在那里,但它只播放第一个视频?:(
Josh P

cat除了一些非常具体的格式外,您通常无法播放视频。要做的就是你在示例输出中显示的concat过滤器,但是问题中的命令和输出不匹配。
slhck 2014年

Answers:


2

错误是由两个不共享相同尺寸的视频流或像素纵横比引起的。第一个定义了一个641/643的SAR(样本=像素),所以它不是一个完美的正方形。

ffmpeg不能自动将两者都放在相同的维度上,因为它无法猜测您要缩小或缩小哪一个,或者需要更改其宽高比。

您可以尝试强制设置纵横比:

ffmpeg -i temp/production/videos/title.66.avi -i temp/production/videos/66.1391426205.avi \
-filter_complex '[0:0] setsar=sar=1 [in1]; [1:0] setsar=sar=1 [in2]; [in1][in2] concat [v]' -map '[v]' \
temp/production/videos/final.66.1391426205.mp4 2>&1

而不是这样做,使用scale过滤器之前将两个视频带到相同的尺寸是有意义的。要做到这一点,你只需更换setsar=sar=1scale=640:640或任何所需的输出固定大小的。

如果要复制和连接音频,请添加第二个concat过滤器:

ffmpeg -i temp/production/videos/title.66.avi -i temp/production/videos/66.1391426205.avi \
-filter_complex '[0:v] setsar=sar=1 [in1]; [1:v] setsar=sar=1 [in2]; [in1][in2] concat [v]; [0:a][1:a] concat=v=0:a=1 [a]' -map '[v]' -map '[a]' \
temp/production/videos/final.66.1391426205.mp4 2>&1

如果您想要将两个视频放入特定尺寸的播放器中,则可以使用此滤镜:使用ffmpeg / avconv调整视频大小以适应静态大小的播放器

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.