다음은 현재 버전의 FFmpeg를 사용하는 방법입니다. 첫 번째 파일 다음에 입력의 PTS를 재조정하지 않고 단순히 고정 된 오프셋을 적용하는 연결 디 먹서에 의존합니다. 시간 척도 15360
(일반적으로 FFmpeg 출력) 의 30fps 스트림이 있다고 가정 해 보겠습니다 . 즉, 프레임 0
에는 PTS가 0
있고 프레임 30
에는 PTS가 15360
있습니다. 23040
PTS 값에 영향을주지 않고 타임 스케일을 변경할 수 있다면 45fps 스트림이 됩니다.
기본적으로 이것이 아래 방법이하는 것입니다.
1 . 소스 속성을 식별하십시오.
Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1171 kb/s,
30 fps, 30 tbr, 15360 tbn (default)
소스 속성, 특히 해상도 및를 기록하고 싶습니다 tbn
.
2a . (선택 사항) 계산을보다 간단하게하기 위해 타임 스케일을 편리한 것으로 변경합니다.
ffmpeg -i in.mp4 -c copy -an -video_track_timescale 30 in-v30.mp4
이것은 우리를 얻는다
Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1171 kb/s, \
30 fps, 30 tbr, 30 tbn (default
이 단계를 수행하면 새 타임 스케일이 원래 프레임 속도의 정수배와 같아야합니다.
2b . 목표 프레임 속도 에 대해 소스에서 x
프레임 #의 PTS가 x
new와 동일한 값을 갖도록 필요한 시간 스케일을 계산하십시오 tbn
. 2a 단계를 수행하면 매우 쉽고 간단하게 새로운 프레임 속도입니다. 따라서 대상 fps의 45
경우 new tbn
가이어야합니다 45
.
3 . 더미 비디오를 생성합니다.
ffmpeg -f lavfi -i color=s=1280x720:r=45:d=1 -profile:v main -video_track_timescale 45 0.mp4
최상의 결과를 얻으려면 모든 속성이 해상도, H.264 프로필, 픽셀 형식, 참조 횟수 등과 같아야합니다.
4 비디오를 연결하십시오.
먼저 텍스트 파일을 만드십시오
file '0.mp4'
file 'in-v30.mp4'
그런 다음 concat
ffmpeg -f concat -i list.txt -c copy -video_track_timescale 45 45fps.mp4
출력 파일에는 두 번째 비디오가 45fps로 재생됩니다.
도 5 . 이제 더미 프리 롤을 쪼개십시오
ffmpeg -ss 1.1 -i 45fps.mp4 -c copy -avoid_negative_ts make_zero in45.mp4
그리고 당신이 가진 것은
Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1757 kb/s, \
45 fps, 45 tbr, 11520 tbn (default)
나는 이것이 복잡하다고 말했다!
-r
스트림 복사와 호환되지 않으며 프레임 속도를 변경하기위한 비트 스트림 필터가 없습니다.