ffmpeg 命令用于从两个不同的视频和两个不同的音频创建最终视频

Posted

技术标签:

【中文标题】ffmpeg 命令用于从两个不同的视频和两个不同的音频创建最终视频【英文标题】:ffmpeg command for create final video from two different videos and two different audios 【发布时间】:2020-12-12 05:55:44 【问题描述】:

我有两个视频和两个音频

1:- 视频 1 - 长度:- 60 秒 ||音频 1 - 长度:- 15 秒

2:- 视频 - 长度:- 86 秒 ||音频 2 - 长度:- 18 秒

同时播放 video1 和 audio1,如果 audio1 结束,则重新启动该音频直到 video1 结束。这将是最终视频 1

同理,

同时播放 video2 和 audio2,如果 audio2 结束,则重新启动该音频直到 video2 结束。这将是最终视频 2

之后连接最终视频 1 和最终视频 2 并创建单个视频作为输出。

提前谢谢你。

【问题讨论】:

视频和音频是否总是具有相同的属性(格式、宽度、高度、采样率、通道布局等),还是会有所不同?获得答案的最快方法是复制和粘贴:显示文件和 ffmpeg 信息:ffmpeg -n -i video1 -i audio1 -i video2 -i audio2 每次用户选择视频时,视频和音频属性都会有所不同。这只是一个例子。我正在从这种音频和视频中创建输出视频。帮帮我! 【参考方案1】:

    因为您的输入是任意的,您需要在连接之前使它们相同。

    ffmpeg -i video1 -stream_loop -1 -i audio1 -filter_complex "[0:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=25,format=yuv420p[v]" -map "[v]" -map 1:a -ac 2 -ar 44100 -shortest temp1.mp4
    ffmpeg -i video2 -stream_loop -1 -i audio2 -filter_complex "[0:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=25,format=yuv420p[v]" -map "[v]" -map 1:a -ac 2 -ar 44100 -shortest temp2.mp4
    

    连接。

    制作input.txt:

    file 'temp1.mp4'
    file 'temp2.mp4'
    

    运行ffmpeg:

    ffmpeg -f concat -i input.txt -c copy -movflags +faststart output.mp4
    

作为请求的“单行命令”(但首先创建input.txt):

ffmpeg -i video1 -stream_loop -1 -i audio1 -filter_complex "[0:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=25,format=yuv420p[v]" -map "[v]" -map 1:a -ac 2 -ar 44100 -shortest temp1.mp4 && ffmpeg -i video2 -stream_loop -1 -i audio2 -filter_complex "[0:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=25,format=yuv420p[v]" -map "[v]" -map 1:a -ac 2 -ar 44100 -shortest temp2.mp4 && ffmpeg -f concat -safe 0 -i input.txt -c copy -movflags +faststart output.mp4

【讨论】:

感谢您的回答。但我需要使用单行命令。因为我也想展示该操作的进度。用单行命令可以做到这一点吗? @KashyapRathod 查看“单行命令”的更新答案。 非常感谢您,这工作正常。我收到错误“系统找不到指定的文件。”然后将最后一行从 '&& ffmpeg -f concat -safe 0 -i @KashyapRathod 我猜 printf 和/或 bash 在 Andriod 上不起作用。您的命令很慢并且会降低质量,因为它会不必要地重新编码视频。我的答案中的前两个 ffmpeg 命令使视频具有相同的属性,因此它们可以通过第三个 ffmpeg 命令连接起来,而无需重新编码。查看更新的答案。

以上是关于ffmpeg 命令用于从两个不同的视频和两个不同的音频创建最终视频的主要内容,如果未能解决你的问题,请参考以下文章

FFMPEG/DASH-LL 以不同的速率创建音频和视频块;玩家很困惑(404错误)

如何在FFMpeg中连接两个或多个具有相同宽度和不同高度的视频并保持相同的纵横比?

FFmpeg Batch 同时遍历两个不同文件夹中的文件

ffmpeg命令将不同类型和分辨率的视频连接成1个视频,可以在android中播放[重复]

音视频及FFMpeg概念篇

音视频及FFMpeg概念篇