며칠 후 나는 실제로 나를 미치게 만드는 ffmpeg에 문제가 발생했습니다 ... 비디오 파일의 특정 짧은 세그먼트를 추출하기 위해 FFMPEG의 filter_complex를 사용하려고합니다 (60fps로 촬영). 절단에 사용하고 싶은 원본 영상의 정확한 프레임을 알고 있습니다. 각 스 니펫의 속도를 변경하려면 setpts 와 함께 trim filter 명령을 사용합니다 . 실제 경우에는 원래 속도 (1.0)의 첫 번째 스 니펫을 원하며 결과 출력 비디오는 원래 푸티 지 60fps 대신 30fps 여야합니다. 내가 사용하는 코드는 다음과 같습니다.
ffmpeg -y -i footage60fps -filter_complex "
[0:v]trim=start_frame=28:end_frame=82,setpts=PTS-
STARTPTS,setpts=1.0*PTS[v0];
[0:v]trim=start_frame=10:end_frame=20,setpts=PTS-
STARTPTS,setpts=2.0*PTS[v1]; [v0][v1]concat=n=2:v=1:a=0[out] " -map [out] -
preset ultrafast -r 30 output30fps.mp4
내가 예상하는 결과는 첫 번째 스 니펫 (프레임 28에서 82 이전까지 마지막까지)에서 ffmpeg가 정상 속도에서 60fps에서 30fps로 변환되도록 매 두 번째 프레임 ([x])을 드롭한다는 것입니다. [28] [x] [30] [x] [32] [x] ... [80]
그러나 결과는 다음과 같습니다. [28] [29] [30] [31] [x] [33] [x] [35] [x] ... [81]
이 행동을 이해하는 사람이 있습니까? 어떻게 해결할 수 있습니까? 사소한 문제처럼 보이지만 음악 등을 선명하게 자르면 너무 짜증나는 것으로 나타났습니다. 어떤 도움을 주시면 감사하겠습니다!
사용하다
ffmpeg -y -i footage60fps -filter_complex "
[0:v]trim=start_frame=28:end_frame=82,setpts=PTS-STARTPTS,framestep=2[v0];
[0:v]trim=start_frame=10:end_frame=20,setpts=PTS-STARTPTS,setpts=2.0*PTS[v1];
[v0][v1]concat=n=2:v=1:a=0[out]" -map [out] -r 30 -preset ultrafast output30fps.mp4
나는 당신이 보는 동작에 대한 이유를 조사하지 않았지만 이와 같이 다른 속도 스트림을 concat 필터와 혼합하고 CFR 속도 준수를 적용하면 프레임 드롭의 케이던스가 항상 예상과는 다릅니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다