정확하지 않은 것으로 보이는 매개 변수 를 사용 -ss
하고 -to
찾는 대신 지정된 프레임 번호에 대해 비디오를자를 수 있습니까? 예를 들어;
ffmpeg -i video.webm -startingframe 80 -endingframe 560 output.webm
[80 번째 프레임과 560 번째 프레임 포함. 따라서 전체적으로 (560-80 +1) 프레임을 만듭니다.]
답변과 약간의 검색 후, 나는 몇 가지 명령을 시도했습니다. 그러나 지금까지 나는 수용 가능한 방법을 찾지 못했습니다.
누군가가 250 ~ 750 번째 프레임 사이에서 비디오 스트림을 잘라내려면이 방법을 사용하십시오. 501 프레임을 출력으로 제공합니다.
참고 : movie.mp4는 25fps이며 오디오 샘플 속도는 48k입니다.
ffmpeg -i movie.mp4 -an -vf "select=between(n\,250\,750),setpts=PTS-STARTPTS" v_stream.webm
예상대로 출력은 정확히 20 초입니다.
오디오에 동일한 방법을 사용합니다.
ffmpeg -i movie.mp4 -vn -af "aselect=between(n\,480\,1440),setpts=PTS-STARTPTS" a_stream.webm
예기치 않게이 정확도는 매우 떨어집니다. 그것은 20 초 오디오와 같은 960001 (960k + 1) 샘플을 제공해야합니다. 그러나 대신 출력은 20.505 초이고 984240 개의 샘플이 있습니다. 또한 지속 시간을 늘리면 오류도 증가합니다.
그런 다음 오디오 스트림을 절단하기 위해 -ss -to 매개 변수를 사용하려고했습니다.
ffmpeg -i movie.mp4 -vn -ss 10.000 -to 30.000 a_stream.webm
오래된 고전적인 방식이 훨씬 잘 작동합니다. 출력 길이는 20.003 초이며 샘플은 960144입니다. 또한 지속 시간을 늘리면 오류가 증가하지 않으며 오류는 일정하며 해당 입력 파일에는 항상 144 개의 샘플 잉여가 있습니다.
요약 :
select
필터는 대부분 잘 작동하지만 선택은 그렇지 않습니다. 클래식 -ss
매개 변수는 오디오에는 더 효과적이지만 샘플 정확도는 아닙니다. 또한 오디오와 비디오 스트림 모두에 영향을 미치지 만 오디오에만 영향을 미치기 때문에 -vf select
와 -ss
매개 변수를 함께 사용할 수 없습니다 -ss
.
따라서 미디어 파일을 정확하게 잘라내려면 다음 3 단계를 수행해야합니다.
ffmpeg -i movie.mp4 -an -vf "select=between(n\,250\,750),setpts=PTS-STARTPTS" v_stream.webm
ffmpeg -i movie.mp4 -vn -ss 10.000 -to 30.000 a_stream.webm
ffmpeg -i v_stream.webm -i a_stream.webm -c:v copy -c:a copy movie-between_10th_and 20th_seconds.webm
가장 정확한 결과를 제공합니다. 비디오 길이는 20.000 초이고 프레임 정확한 오디오 길이는 20.003 초이며 샘플은 960144입니다. 비디오 스트림과 정확히 일치하지는 않지만 괜찮습니다. 144 개의 샘플 잉여가 있습니다. 가장 큰 단점은 파일을자를 때마다 간단한 작업을 위해 3 개의 명령을 보내야하며 a_stream.webm 및 v_stream.webm이라는 두 개의 불필요한 파일을 생성한다는 것입니다. 그리고 select
시도한 일부 입력 파일 에서 필터가 작동하지 않습니다. 작업을 성공적으로 수행하지만 (?) 인코딩 프로세스를 중지하지 않으므로 매번 명령 프롬프트를 닫아야합니다.
select
와 aselect
비디오 및 오디오 스트림에 대한 필터링합니다. Select
동영상의 프레임 정확도는 정확하지만 aselect
샘플 정확도는 아닙니다. 실제로는 정확하지 않습니다. 간단한 -ss
-to
매개 변수를 사용하는 것보다 훨씬 더 나쁜 결과를 제공합니다 . 그로 인해 현재로서는 가장 정확한 절삭을 달성하기 위해 select
필터와 -ss
-to
매개 변수 조합을 사용 합니다. 그러나 그렇게하는 것은 지저분한 방법입니다. 내가 어떤 commandlines과 그 결과를 추가 한 내 첫 번째 게시물 제발 봐