ffmpeg를 사용하여 정확한 프레임을 자르는 방법?


22

ffmpeg를 사용하여 정확한 시간에 비디오 파일을 자르려고합니다. ffmpeg 도움말에는 시작 프레임을 지정하기위한 -timecode_frame_start 옵션이 표시되지만이 명령이 작동하지 않습니다. 결과 비디오는 항상 원본 비디오의 시작 부분에서 시작됩니다. 다음은 내가 실행중인 명령의 예입니다.

ffmpeg -i input.mpg -acodec copy -vcodec copy -timecode_frame_start 200 -vframes 210 -n ouput.mpg

결과가 변경되지 않고 다른 옵션 전후에 timecode_frame_start 옵션을 이동했습니다. 지정해야 할 추가 옵션이 있습니까? 다양한 파일 형식, mkv, avi, mp4를 시도했지만 코덱 관련 문제가 나타나지 않습니다. 내가 시도한 파일은 다음과 같습니다.

http://www.seaotter.com/marine/movies/hermit-long-01.mpg

뭔가 빠졌습니까?


이것은 메일 링리스트에서 응답 한 것으로 보입니다 (그리고 -vcodec 복사를 사용하면 i- 프레임에서만 재 동기화 할 수 있기 때문에 프레임별로 자르지 못할 수 있습니다
rogerdpack

@ user39364 메일 링리스트에서 요청했는데이 옵션이 OP가 원하는 것을 수행하지 않는 것으로 나타났습니다. 나도 새로운 것을 배웠다 :)
slhck

그냥 내가 사용 정확한 프레임의 속도로 절단하는 방법을 찾을 수 있습니다 싶었 melt참조 슈퍼 사용자 - 명령 줄에서 정확하게 절단 비디오 파일을
sdaau

답변:


46

방금 timecode_frame_start이것처럼 작동하지 않는다는 것을 알게되었습니다 . 특정 프레임에서 시작하는 유일한 방법은 여러 프레임을 ss.ms구문 으로 변환하는 것 hh:mm:ss.ms입니다. 따라서 비디오가 25fps이고 133 프레임에서 시작하려면 다음이 필요합니다.

133/25 = 5.32

그래서 실행

ffmpeg -ss 5.32 -i input.mp4 -c:v libx264 -c:a aac out.mp4

비트 스트림 복사 ( -c:v copy)를 사용하여 정확한 프레임을자를 수는 없습니다. 모든 프레임이 인트라 코딩되지 않고 자체적으로 세워질 수는 없기 때문입니다.

-ss 항상 정확한 프레임입니다.

특정 수의 프레임을 인코딩하려면 예를 들어을 사용하십시오 -frames:v.

ffmpeg -ss 5.32 -i input.mp4 -c:v libx264 -c:a aac -frames:v 60 out.mp4

비디오 필터사용할 수도 있지만 오디오 지원이 정확하지 않을 수 있습니다. 프레임을 찾는 것은 여전히 ​​기능이 아닙니다. 자세한 정보는 이 FFmpeg-users 메일 링리스트 스레드 를 따라갈 수 있습니다 .

-vf select정확한 프레임 선택에 사용할 수 있습니다 ( -vf 'select=gte(n\,100)'100 개의 첫 번째 프레임을 건너 뛰는 것과 같은 것 )


3
드롭 프레임 (예 : 29.97fps)이 10 분 이상인 비디오의 경우; 특정 프레임의 시간을 정확하게 계산하는 방법은 무엇입니까?
GFoley83

select=gte(n\,100)방법은 효과가 있지만 추구는 성능을 떨어 뜨리고 있습니다. 한 번에 30 프레임 만 인코딩하여 테스트하면 비디오를 시작할수록 탐색으로 인해 ffmpeg를 완료하는 데 시간이 더 걸립니다.
Adam Grant

6

옵션

-vf select =“(n \, start_frame_num \, end_frame_num ), setpts = PTS-STARTPTS "사이
예를 들어

-vf select=“between(n\,200\,300),setpts=PTS-STARTPTS"

200 번째부터 300 번째 프레임까지 비디오를 잘라 내고, 시퀀스 카운트는 0부터 시작합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.