적어도 FFmpeg 2.8.x에서 (그러나 oldie도 작동해야 함) 옵션 의 인수로 및 필터를 lavfi
사용하여 입력 형식 및 복잡한 필터 그래프로 사용할 수 있습니다.movie
setpts
-i
이 작업을 수행하는 다음 명령은 다음과 같습니다.
ffmpeg -re -f lavfi -i "movie=filename=input.mp4:loop=0, setpts=N/(FRAME_RATE*TB)" output.mp4
loop=
인수가 0 이면 무한 루프를 의미합니다. 0보다 큰 값은 반복 횟수를 설정합니다. setpts
두 번째 및 그 이후의 반복에 대한 PTS 조정에 필요한 필터, 그렇지 않으면 대부분의 출력 멀티플렉서가 비단 조 PTS 증가로 실패합니다. 루프는 PTS를 다시 계산하지 않습니다.
디코딩 / 인코딩없이 바이 패스 프레임을 가정 할 때 필터를 사용하는 것은 불가능합니다. 설계 필터는 디코딩 된 프레임 만 처리합니다.
FFmpeg 2.8.2에서 새로운 입력 옵션이 도입되었습니다 -stream_loop
. 먼저 더 간단하게 작동하고 코드 변환없이 내용을 복사 할 수 있습니다.
ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -y output.mp4
그러나 PTS를 다시 계산하지 않고 출력 파일이 잘못되었습니다. PTS를 수정하기 위해 필터를 추가하는 경우 (참조 setpts
) -c copy
너무 제거해야합니다 . 비트 스트림 필터 만 인코딩 된 패킷을 처리 할 수 있지만 PTS를 수정하기위한 비트 스트림 필터는 없습니다 ( https://ffmpeg.org/ffmpeg-bitstream-filters.html 참조 )
어쨌든 두 번째 패스의 ffmpeg는 오류와 함께 실패합니다.
input.mp4: Resource temporarily unavailable
알려진 해결 방법 : PTS 제한이없는 입력 파일에 컨테이너를 사용하십시오 (스트리밍 컨테이너). 그중 하나는 MPEG-TS입니다. 따라서 MP4 파일을 MPEG-TS로 간단하게 변환 할 수 있습니다.
ffmpeg -i input.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input.ts
그리고 다음 명령을 사용하여 무한대 파일을 작성하십시오.
ffmpeg -re -stream_loop -1 -i input.ts -c copy -strict -2 -bsf:a aac_adtstoasc -y output.mp4
(비트 스트림 필터는 필요한 경우에만 사용해야하며 내 샘플에는 필요합니다)
이 경우 FFmpeg> = 2.8.2가 필요합니다.