재 인코딩없이 ffmpeg에서 프레임 속도 변경


14

23.976fps (24000/1001) 인 mkv (h264) 비디오가 있지만 재 인코딩 및 품질 손실없이 25fps로 변환하려고합니다. mkvmerge가 (default --duration '0 : 25fps'옵션으로) 할 수 있다는 것을 알고 있지만 가능하다면 ffmpeg에서 직접하고 싶습니다. 문서에 따르면 이것이 작동합니다.

ffmpeg -i input.mkv -r 25 -vcodec copy output.mkv

그러나 그것을 실행할 때 동일한 비디오 fps 만 얻습니다. ffmpeg에서 올바른 방법 (있는 경우)은 무엇입니까?


1
나는 현재 FFmpeg로는 불가능하다고 생각합니다. -r스트림 복사와 호환되지 않으며 프레임 속도를 변경하기위한 비트 스트림 필터가 없습니다.
Ely

1
너무 나쁘다. 매번 mkvmerge를 사용해야합니다. 감사합니다
phate89

1
일반적인 ffmpeg로 이것을 수행하는 복잡한 방법이 있으며 오래된 ffmpeg 버전을 사용하여 직접 수행하는 방법이 있습니다. 관심이 있으시면 답변으로 작성하겠습니다.
Gyan

1
예, 감사합니다. 추가 도구없이 수행하고 싶습니다 (이미 ffmpeg 필요)
phate89

1
@Mulvya 당신에 대해 얘기하고 ,이 권리? 나는 그것을 연결하는 것을 망설였다. 그러나 그것은 지금 오래되었다.
Ely

답변:


15

다음은 현재 버전의 FFmpeg를 사용하는 방법입니다. 첫 번째 파일 다음에 입력의 PTS를 재조정하지 않고 단순히 고정 된 오프셋을 적용하는 연결 디 먹서에 의존합니다. 시간 척도 15360(일반적으로 FFmpeg 출력) 의 30fps 스트림이 있다고 가정 해 보겠습니다 . 즉, 프레임 0에는 PTS가 0있고 프레임 30에는 PTS가 15360있습니다. 23040PTS 값에 영향을주지 않고 타임 스케일을 변경할 수 있다면 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가 xnew와 동일한 값을 갖도록 필요한 시간 스케일을 계산하십시오 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)

나는 이것이 복잡하다고 말했다!


1
매우 영리하고 좋은 대답입니다.
Rowe Morehouse
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.