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

How to concatenate two or more videos with same width and different height in FFMpeg and to maintain the same aspect ratio?

我有五个视频部分要全部拼接。每五个视频的宽度和高度都相同。第二部分是另外2个视频的hstack,第三部分是另外3个视频的hstack和vstack。虽然连接了所有五个视频部分,但最终视频中的宽高比并未保持不变。由于我是ffmpeg的新手,请帮助我解决问题

我在我的最终过滤器复合体中尝试使用该命令并减少我每秒使用的帧数。

"ffmpeg -i final.mp4 -vf scale=1280:480 -filter:v fps=fps=30 finalNew.mp4"

但没有任何效果。 还帮助我使用 hstack 进行缩放,以在下面的命令中保持第二部分的纵横比

Command: ffmpeg -i vid1.mkv -i vid2.mkv -filter_complex "[0:v]scale=-1:480[v0];[0:v][1:v]hstack=inputs=2"vid3.mkv

图片

second part

third part

videochunks

我已经控制了我视频的信息

ffmpeg -i part1.mkv -i part2.mkv -i part3.mkv -i part4.mkv -i part5.mkv ffmpeg version N-94911-g197985c5bf Copyright (c) 2000-2019 the FFmpeg developers built with gcc 9.1.1 (GCC) 20190807 configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf libavutil 56. 35.100 / 56. 35.100 libavcodec 58. 56.101 / 58. 56.101 libavformat 58. 32.104 / 58. 32.104 libavdevice 58. 9.100 / 58. 9.100 libavfilter 7. 58.102 / 7. 58.102 libswscale 5. 6.100 / 5. 6.100 libswresample 3. 6.100 / 3. 6.100 libpostproc 55. 6.100 / 55. 6.100 Input #0, matroska,webm, from 'part1.mkv': Metadata: ENCODER : Lavf58.32.104 Duration: 00:00:44.00, start: 0.000000, bitrate: 189 kb/s Stream #0:0(eng): Video: h264 (High), yuv420p(progressive), 640x480 [SAR 9:16 DAR 3:4], 30 fps, 30 tbr, 1k tbn, 60 tbc (default) Metadata: title : Video ENCODER : Lavc58.56.101 libx264 DURATION : 00:00:44.000000000 Input #1, matroska,webm, from 'part2.mkv': Metadata: ENCODER : Lavf58.32.104 Duration: 00:01:22.07, start: 0.000000, bitrate: 113 kb/s Stream #1:0: Video: h264 (High), yuv420p(progressive), 640x240 [SAR 9:16 DAR 3:2], 30 fps, 30 tbr, 1k tbn, 60 tbc (default) Metadata: ENCODER : Lavc58.56.101 libx264 DURATION : 00:01:22.066000000 Input #2, matroska,webm, from 'part3.mkv': Metadata: ENCODER : Lavf58.32.104 Duration: 00:00:42.03, start: 0.000000, bitrate: 405 kb/s Stream #2:0: Video: h264 (High), yuv420p(progressive), 640x720 [SAR 9:16 DAR 1:2], 30 fps, 30 tbr, 1k tbn, 60 tbc (default) Metadata: ENCODER : Lavc58.56.101 libx264 DURATION : 00:00:42.033000000 Input #3, matroska,webm, from 'part4.mkv': Metadata: ENCODER : Lavf58.32.104 Duration: 00:00:21.00, start: 0.000000, bitrate: 298 kb/s Stream #3:0: Video: h264 (High), yuv420p(progressive), 640x240 [SAR 9:16 DAR 3:2], 30 fps, 30 tbr, 1k tbn, 60 tbc (default) Metadata: ENCODER : Lavc58.56.101 libx264 DURATION : 00:00:21.000000000 Input #4, matroska,webm, from 'part5.mkv': Metadata: ENCODER : Lavf58.32.104 Duration: 00:00:16.00, start: 0.000000, bitrate: 169 kb/s Stream #4:0(eng): Video: h264 (High), yuv420p(progressive), 640x480 [SAR 9:16 DAR 3:4], 30 fps, 30 tbr, 1k tbn, 60 tbc (default) Metadata: title : Video ENCODER : Lavc58.56.101 libx264 DURATION : 00:00:16.000000000

如果您想保留输入的 9:16 SAR:

ffmpeg -i part1.mkv -i part2.mkv -i part3.mkv -i part4.mkv -i part5.mkv -filter_complex "[0]scale=640:480:force_original_aspect_ratio=decrease,pad=640:480:(ow-iw)/2:(oh-ih)/2,setsar=9/16[0v];[1]scale=640:480:force_original_aspect_ratio=decrease,pad=640:480:(ow-iw)/2:(oh-ih)/2,setsar=9/16[1v];[2]scale=640:480:force_original_aspect_ratio=decrease,pad=640:480:(ow-iw)/2:(oh-ih)/2,setsar=9/16[2v];[3]scale=640:480:force_original_aspect_ratio=decrease,pad=640:480:(ow-iw)/2:(oh-ih)/2,setsar=9/16[3v];[4]scale=640:480:force_original_aspect_ratio=decrease,pad=640:480:(ow-iw)/2:(oh-ih)/2,setsar=9/16[4v];[0v][1v][2v][3v][4v]concat=n=5:v=1:a=0[v]" -map "[v]" output.mp4

但是你的输入看起来很紧张,所以我假设你想要一个 1:1 SAR:

ffmpeg -i part1.mkv -i part2.mkv -i part3.mkv -i part4.mkv -i part5.mkv -filter_complex "[0]scale=640:480:force_original_aspect_ratio=decrease,pad=640:480:(ow-iw)/2:(oh-ih)/2,setsar=1[0v];[1]scale=640:480:force_original_aspect_ratio=decrease,pad=640:480:(ow-iw)/2:(oh-ih)/2,setsar=1[1v];[2]scale=640:480:force_original_aspect_ratio=decrease,pad=640:480:(ow-iw)/2:(oh-ih)/2,setsar=1[2v];[3]scale=640:480:force_original_aspect_ratio=decrease,pad=640:480:(ow-iw)/2:(oh-ih)/2,setsar=1[3v];[4]scale=640:480:force_original_aspect_ratio=decrease,pad=640:480:(ow-iw)/2:(oh-ih)/2,setsar=1[4v];[0v][1v][2v][3v][4v]concat=n=5:v=1:a=0[v]" -map "[v]" output.mp4