我有两个视频文件,它们也带有音轨。我想将一个文件的音轨复制到另一个文件,时间偏移量为 5000 毫秒。
唯一的问题是视频文件的持续时间不一样,所以如果音频在视频之前开始或在视频之后结束,我希望生成的视频文件在开始/结束处有空白帧。
我正在寻找可以在 Linux 上使用的命令行解决方案,例如 ffmpeg、mencoder 等。
编辑:运行 ffmpeg -i 1.mp4 -i 2.mp4
ffmpeg version 0.8.9-4:0.8.9-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers
built on Nov 9 2013 19:08:00 with gcc 4.6.3
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2013-06-15 03:58:00
Duration: 00:06:49.29, start: 0.000000, bitrate: 3009 kb/s
Stream #0.0(und): Video: h264 (High), yuv420p, 1280x720, 2814 kb/s, 25 fps, 25 tbr, 50 tbn, 50 tbc
Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 192 kb/s
Metadata:
creation_time : 2013-06-15 03:58:05
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from '2.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2013-06-15 17:25:15
Duration: 00:06:59.09, start: 0.000000, bitrate: 3159 kb/s
Stream #1.0(und): Video: h264 (High), yuv420p, 1280x720, 2965 kb/s, 25 fps, 25 tbr, 50 tbn, 50 tbc
Stream #1.1(und): Audio: aac, 44100 Hz, stereo, s16, 192 kb/s
Metadata:
creation_time : 2013-06-15 17:25:21
At least one output file must be specified
答案1
好的。假设您有1.mp4
- 持续时间为 30 秒的视频,2.mp4
- 持续时间为 30 秒的视频,并且您想将音频插入偏移量为 5 秒的视频2.mp4
中1.mp4
。并且当视频流结束时,您还需要黑色视频帧1.mp4
。因此命令应该是这样的:
ffmpeg -i 1.mp4 -i 2.mp4 -f lavfi -i "color=black:size=1920x1080:duration=5" \
-filter_complex \
"[0:v][2:v]concat[video_out]; \
[0:a]atrim=duration=5[a1]; \
[a1][1:a]concat=v=0:a=1[audio_out]" \
-map [video_out] -map [audio_out] out.mp4
此命令执行以下操作 - 我们将1.mp4
和2.mp4
作为输入,并使用 lavfi 生成 5 秒的黑帧视频。您的输入视频可能有其他大小,因此对 lavfi 使用与和相同的大小1.mp4
(2.mp4
更改1920x1080
为您的输入的大小)。
然后我们将1.mp4
其与 lavfi 的黑色框架结合起来concat
,然后我们剪掉前5秒的1.mp4
音频atrim
并将其与来自 的音频流合并2.mp4
(concat
再次)。然后只需指定我们想要的输出流out.mp4
。
希望能帮助到你。