gpt4 book ai didi

FFMPEG vsync 删除和重新生成

转载 作者:行者123 更新时间:2023-12-04 23:20:38 26 4
gpt4 key购买 nike

根据 ffmpeg 文档

-vsync parameter

Video sync method. For compatibility reasons old values can be specified as numbers. Newly added values will have to bespecified as strings always.

drop

As passthrough but destroys all timestamps, making the muxergenerate fresh timestamps based on frame-rate.


mpegts 多路复用器似乎无法正确重新生成时间戳(PTS/DTS);但是,将 vsync 下降后的输出管道传输到第二个进程,因为原始 h264 确实会强制 mpegts 重新生成 PTS。
生成测试流
ffmpeg -f lavfi -i testsrc=duration=20:size=1280x720:rate=50 -pix_fmt yuv420p -c:v libx264 -b:v 4000000 -x264-params ref=1:bframes=0:vbv-maxrate=4500:vbv-bufsize=4000:nal-hrd=cbr:aud=1:bframes=0:intra-refresh=1:keyint=30:min-keyint=30:scenecut=0 -f mpegts -muxrate 5985920 -pcr_period 20 video.ts -y
生成具有正确间隔 PTS 值的输出 ts
ffmpeg -i video.ts -vsync drop -c:v copy -bsf:v h264_mp4toannexb -f h264   - | ffmpeg -fflags +igndts -fflags +nofillin -fflags +genpts -r 50 -i - -c:v copy -f mpegts -muxrate 5985920  video_all_pts_ok.ts -y
生成所有 PTS 为零的输出 ts
ffmpeg -i video.ts -vsync drop -c:v copy -bsf:v h264_mp4toannexb -f mpegts - | ffmpeg -fflags +igndts -fflags +nofillin -fflags +genpts -r 50 -i - -c:v copy -f mpegts -muxrate 5985920 video_all_pts_zero.ts -y
看来 vsync drop 确实会破坏它们,但 mpegts 不会重新生成它们?关于需要添加什么以使其作为单个 ffmpeg 命令工作的任何想法?
在 Linux 和 Windows 上测试,结果相同

最佳答案

尝试仅使用 -vsync 1 重新编码视频,而不使用 -fflags +genpts。我在这里找到了一些很好的信息。这家伙在谈论流媒体视频。所以最高质量不是他的目标。但是有有用的信息。
https://videoblerg.wordpress.com/2017/11/10/ffmpeg-and-how-to-use-it-wrong/
第一节 – 恒定帧率
“-r 用于指定输出帧速率。这必须与输入帧速率相同以消除抖动。这与使用 1 选项的 -vsync 参数结合使用,将相应地重新计时 PTS/DTS 时间戳”
第六部分 - 音频 [也有一些好的建议]
"-af "aresample=async=1:min_hard_comp=0.100000:first_pts=0"有助于使您的音频与视频的开头对齐。容器通常具有视频的开头和视频的开头"
我还没有尝试过,目前没有同步问题的视频。

关于FFMPEG vsync 删除和重新生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67075693/

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