2016-08-24 5 views
0

ffplay를 사용하여 비디오의 일부 클립을 재생/건너 뛸 수 있습니다. 건너 내 첫 번째 방법은 프레임 (100) (400)에 대답했다 :선택 필터를 사용할 때 비디오/오디오를 동기화하십시오.

ffplay -vf "select='lte(n\,100)+gte(n\,400)'" -i INPUT 

이 원하는 프레임을 생략하지만 또한 스킵 프레임 동안 영상을 정지. 나는 setpts 옵션을 사용하여 비디오 프리젠 테이션 타임 스탬프 (PTS) 수정하여이 문제를 해결하려고 :

ffplay -vf "select='lte(n\,100)+gte(n\,400)',setpts='PREV_OUTPTS'" -i INPUT 

이 작동하는 것 같다을 (스틸은 추측 때문에 버퍼링입니다 조금 동결),하지만 지금은 오디오가있다 동기화. 나는 선택 필터를 적용하고이 일부 오디오 프레임을 건너 뜁니다뿐만 아니라

ffplay -vf "select='lte(n\,100)+gte(n\,400)',setpts='PREV_OUTPTS'" -af "aselect='lte(n\,100)+gte(n\,400)',asetpts='PREV_OUTPTS'" -i INPUT 

오디오의 PTS를 수정,하지만 여전히 동기화 시도했습니다. 비슷한 결과를 가진 aresample = async = 10000 옵션을 시도했습니다. 일부/모든 필터를 출력으로 이동 (-i INPUT 뒤에 배치)해도 작동하지 않습니다.

누군가가 ffplay 사용하여 비디오의 일부를 생략하는 방법을 알고 있나요? 많은 감사

답변

1

오디오 프레임 번호 ! = 비디오 프레임 번호. FFmpeg의 인코더로 생성 된 AAC 오디오는 프레임 당 1024 샘플이므로 48kHz 스트림의 초당 48000/1024 = 46.875 오디오 프레임이 있습니다. 다른 코덱은 다른 속도를 가질 수 있습니다.

n 대신 t을 사용하고 연속적인 일련의 타임 스탬프를 생성하십시오.

ffplay 
-vf "select='lte(t\,4)+gte(t\,16)',setpts=N/FRAME_RATE/TB" 
-af "aselect='lte(t\,4)+gte(t\,16)',asetpts=N/SR/TB" 
-i INPUT 

비디오 프레임 속도를 25fps로 가정합니다. 그에 따라 수정하십시오.

+0

감사합니다. 당신은 절대적인 천재입니다. 이 프레임이 정확한지 또는 가장 가까운 키 프레임을 선택합니까? – arrietaeguren

+0

정확한 프레임. 필터는 완전히 디코딩 된 프레임에서 작동하므로 키 프레임이 없습니다. – Mulvya

관련 문제