gpt4 book ai didi

video - 如何在 FFMpeg 中连接两个或多个具有不同帧速率的视频?

转载 作者:行者123 更新时间:2023-12-04 13:58:44 31 4
gpt4 key购买 nike

我有多个(> 100 个)具有各种恒定帧速率(例如 7 FPS、8 FPS、16 FPS、25 FPS)但编解码器和分辨率相同的视频。
我想将它们连接(使用 ffmpeg concat )成一个具有可变帧速率(VFR)的视频,以便连接的视频以各自的帧速率播放每个部分。
到目前为止,我只设法将所有文件连接到一个具有常量(CFR)例如的单个视频。 25 帧/秒。
这是缺点,所有 <25 FPS 的部分播放速度更快。
我用 -vsync 2 -r 25尝试告诉 ffmpeg 使用最大 FPS 为 25 的 VFR,但是 mediainfo报告 CFR 为 25 FPS 的视频。
如果我只使用 -vsync 2 (没有 -r ),我得到一个 VFR 视频输出,但是,mediainfo报告说这是一个最低 11.9 FPS 和最高 12 FPS 的视频(所有视频的平均 FPS)。
如何将各种视频连接到单个 VFR 视频?

这是我使用的命令:

ffmpeg -y -vsync 2 -r 25 -f concat -safe 0 -i /tmp/filelist.txt -c:v h264_omx -pix_fmt yuv420p -b:v 524231 -maxrate 524231 -bufsize 1048462 -an /tmp/${DATE}.mp4

我用 ffmpeg version 3.2.12-1~deb9u1+rpt(Raspbian 6.3.0-18+rpi1+deb9u1

最佳答案

由于我的问题主要在评论中得到解答,我想发布另一个没有中间文件的解决方案。
我使用命名管道并发送每个片段,将其转换为例如5 FPS,作为该管道的原始视频。
使用 exec 保持管道畅通至关重要.
将许多 720p AVI 视频连接到单个 MKV 视频的简单 bash 脚本如下:

#!/bin/bash
send2pipe() {
# Open the pipe permanently
exec 7<>outpipe
# Decode and send every raw frame to the pipe
for l in $(ls *avi); do ffmpeg -nostdin -i $l -an -filter:v fps=fps=5 -f rawvideo pipe:1 > outpipe 2> /dev/null ; done &
# Close the pipe (aka send EOF), which causes the encoding app to terminate
exec 7>&-
}

# Create the pipe
mkfifo outpipe
# Start sending videos to the pipe in the background
send2pipe &
# Encode the frames in the pipe to a single video
ffmpeg -fflags +genpts -f rawvideo -s:v 1280x720 -r 5 -i outpipe -an -c:v libx264 -preset ultrafast -crf 35 -y output.mkv
# Remove the pipe
rm outpipe

关于video - 如何在 FFMpeg 中连接两个或多个具有不同帧速率的视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55794240/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com