我是 FFmpeg 的新手。我阅读了一些基本基础知识,但无法弄清楚为什么以下命令不起作用。该脚本是在 Windows 中的 PowerShell 中编写的。
ffmpeg -hide_banner `
-loop 1 -t 3 -i image.jpg `
-i input.mp4 `
-filter_complex "`
[1:v] split=2 [v1][v2];
[1:a] asplit=2 [a1][a2]; `
[v1] trim=start=10:duration=10, setpts=PTS-STARTPTS [ov1];`
[a1] atrim=start=10:duration=10, asetpts=PTS-STARTPTS [oa1];`
[v2] trim=start=40:duration=10, setpts=PTS-STARTPTS [ov2];`
[a2] atrim=start=40:duration=10, asetpts=PTS-STARTPTS [oa2];`
[0][ov1][ov2] concat=n=3:v=1:a=0 [v]; `
[oa1][oa2] concat=n=2:v=0:a=1 [ca]; `
[ca] adelay=3s|3s|3s|3s|3s|3s, asetpts=PTS-STARTPTS [a]; `
"`
-map "[v]" -map "[a]" `
-c:v libx264 -preset slow -crf 20 `
-c:a aac -b:a 128k `
output.mp4
它仅生成图像并且 FFMpeg 报告以下警告:
非单调 DTS;之前:1024,当前:0;更改为 1025。这可能会导致输出文件中的时间戳不正确。
我搞清楚了如何应用过滤器:split
和concat
。我知道我需要标记过滤器每个部分的输入和输出。我理解-map
需要指示输出文件中包含的流。
我不确定是否-loop 1 -t 3 -i ...
正确,并且部分内容PTS
是从某处复制而来——我对 PTS 有一点了解。最后,adelay
图像之后会使音频流与视频流同步。
我在这里想要实现的目标是:
- 将图像转换为视频
- 将第二个输入克隆到两个单独的流中
- 修剪这两个流,并且
- 将所有内容连接成一个视频/音频。
图像应该需要 3 秒,其余流每个需要 10 秒,因此整个视频应该长 23 秒。但它没有做到这一点。
编辑。有关输入/输出文件和 FFMpeg 本身的更多信息。请注意,以上所有输出均由以下版本的 FFMpeg 创建:吉安。我目前正在研究 FFMpeg比
该视频下载自下载示例视频样本视频本身是.mp4
10MB(直接链接)。图像只是随机裁剪为 1280x720 大小的 JPEG。
打印内容如下ffmpeg -version
:
ffmpeg version 2024-01-11-git-5e751dabc5-full_build-www.gyan.dev Copyright (c) 2000-2024 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --pkg-config=pkgconf --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-dxva2 --enable-d3d11va --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
libavutil 58. 36.101 / 58. 36.101
libavcodec 60. 37.100 / 60. 37.100
libavformat 60. 20.100 / 60. 20.100
libavdevice 60. 4.100 / 60. 4.100
libavfilter 9. 17.100 / 9. 17.100
libswscale 7. 6.100 / 7. 6.100
libswresample 4. 13.100 / 4. 13.100
libpostproc 57. 4.100 / 57. 4.100
输出ffprobe -hide_banner input.mp4
:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '.\input.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
creation_time : 1970-01-01T00:00:00.000000Z
encoder : Lavf53.24.2
Duration: 00:01:02.31, start: 0.000000, bitrate: 1347 kb/s
Stream #0:0[0x1](und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 959 kb/s, 25 fps, 25 tbr, 12800 tbn (default)
Metadata:
creation_time : 1970-01-01T00:00:00.000000Z
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp, 383 kb/s (default)
Metadata:
creation_time : 1970-01-01T00:00:00.000000Z
handler_name : SoundHandler
vendor_id : [0][0][0][0]
输出ffprobe -hide_banner output.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '.\output.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf60.20.100
Duration: 00:00:05.28, start: 0.000000, bitrate: 921 kb/s
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 842 kb/s, 25 fps, 25 tbr, 12800 tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
encoder : Lavc60.37.100 libx264
Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
mediainfo 的输出input.jpg
General
Complete name : C:\Users\zbkoz\Desktop\demo-video\image.jpg
Format : JPEG
File size : 519 KiB
Image
Format : JPEG
Width : 1 280 pixels
Height : 720 pixels
Color space : YUV
Chroma subsampling : 4:4:4
Bit depth : 8 bits
Compression mode : Lossy
Stream size : 519 KiB (100%)
ColorSpace_ICC : RGB
答案1
我有一个解决方案,但不完全确定这是否有资格作为答案。
本质上,该脚本似乎在构建时没有问题比。我决定安装另一个版本下载 FFmpeg正如我在评论中所说,该问题无法重现。
我可以确认脚本在 FFMpeg 上仍然不起作用来自 gyan.dev 的 Windows 版本。