it-swarm-ko.com

ffmpeg를 사용하여 프레임 속도 변경

비디오 클립 (MP4, yuv420p)을 30fps에서 24fps로 변환하려고합니다. 프레임 수가 정확하므로 출력이 30fps에서 20 분에서 24fps로 25 분으로 변경되어야합니다. 다른 모든 것들은 그대로 유지되어야합니다.

Ffmpeg로 시도하는 모든 것이 프레임 속도를 변환하지만 프레임 수를 변경하지 않고 동일한 지속 시간을 유지하도록 프레임 수를 변경하거나 지속 시간을 변경하십시오.

그래서 나는 일반적으로 다음과 같은 일을 시도해 왔습니다.

ffmpeg -y -r 30 -i seeing_noaudio.mp4 -r 24 seeing.mp4

(저는 Windows 에서이 작업을 수행하지만 일반적으로 Linux에서 수행됩니다). 그러면 프레임 속도가 변환되지만 프레임이 삭제되므로 총 지속 시간이 변경되지 않습니다.

또는 나는 시도했다

ffmpeg -y -i seeing_noaudio.mp4 -filter:v "setpts=1.25*PTS" seeing.mp4

지속 시간을 변경하지만 프레임 속도는 변경하지 않습니다.

확실히 재인 코딩하거나 일부 사람들이 원래의 원시 프레임으로 돌아가라고 제안하지 않고도 단일 ffmpeg 명령 으로이 작업을 수행 할 수 있어야합니다.

도와주세요

29
J Brand

재 인코딩으로 :

ffmpeg -y -i seeing_noaudio.mp4 -vf "setpts=1.25*PTS" -r 24 seeing.mp4

다시 인코딩하지 않은 경우 :

첫 번째 단계-원시 비트 스트림으로 비디오 추출

ffmpeg -y -i seeing_noaudio.mp4 -c copy -f h264 seeing_noaudio.h264

새로운 프레임 속도의 Remux

ffmpeg -y -r 24 -i seeing_noaudio.h264 -c copy seeing.mp4
34
Gyan

입력 파일 앞에 "-r"옵션으로 원하는 프레임 속도를 지정하십시오.

ffmpeg -y -r 24 -i seeing_noaudio.mp4 seeing.mp4

옵션은 다음 파일에 영향을줍니다. 입력 파일 앞의 "-r"은 비디오가 지정된 프레임 속도로 인코딩 된 것처럼 해당 헤더를 강제로 다시 해석합니다. 재 압축이 필요하지 않습니다. 프레임 속도를 변경하기 위해 avi 파일 헤더를 직접 패치하는 작은 유틸리티 avifrate.exe가 있습니다. 위의 ffmpeg 명령은 기본적으로 동일하지만 전체 파일을 복사해야합니다.

7
MKaama

내가 아는 한, 다시 인코딩하지 않고 ffmpeg로이 작업을 수행 할 수 없습니다. 25fps에서 24fps 파일을 사용하여 작업중인 다른 재료와 일치 시켰습니다. 나는 webm, matroska 입력과 완벽하게 작동하고 인코더를 사용하여 h264, matroska 출력을 생성하는 ffmpeg -i inputfile -r 25 outputfile 명령을 사용했습니다 : Lavc56.60.100

6fps에서 동일한 작업을 수행 할 수 있지만 지속 시간은 변경되지 않습니다 (대부분의 경우 오디오 동기화를 잃을 수있는 좋은 방법 임). 이것이 귀하의 요구 사항에 맞지 않으면 this answer 을 시도하는 것이 좋습니다. 내 경험에 따르면 여전히 출력 파일을 다시 인코딩합니다.

최상의 프레임 정확도를 위해 이전에 제안한대로 원시 스트림으로 디코딩하는 것이 좋습니다. 아래에 재현 된대로이 스크립트를 사용합니다.

#!/bin/bash
#This script will decompress all files in the current directory, video to huffyuv and audio to PCM
#unsigned 8-bit and place the output #in an avi container to ease frame accurate editing.
for f in *
do
ffmpeg -i "$f" -c:v huffyuv -c:a pcm_u8 "$f".avi
done

분명히이 스크립트는 현재 디렉토리의 모든 파일이 미디어 파일 일 것으로 예상하지만 선택한 특정 확장명으로 처리를 제한하도록 쉽게 변경할 수 있습니다. 원시 스트림으로 압축을 풀 때 파일 크기가 다소 크게 증가합니다.

2
Elder Geek

fps 필터 사용을 고려할 수 있습니다. 비디오 재생 속도는 변경되지 않습니다.

ffmpeg -i <input> -filter:v fps=fps=30 <output>

Fps를 59.6에서 30으로 줄이는 데 좋았습니다.

1
kelin

이 명령을 사용할 수 있으며 비디오 지속 시간은 변경되지 않습니다.

ffmpeg -i input.mp4 -r 24 output.mp4
0
Tim Le