오버레이 기간 동안 오디오 및 비디오를 일시 중지할 수 있습니까? 오디오가 일시 중지되면 해당 간격 동안에만 새 오디오 트랙을 추가할 수 있습니까? 원본 오디오를 재생해야 하는 남은 시간입니다.
예를 들어,
아래 언급된 명령을 사용하여 비디오에 여러 이미지를 오버레이하기 위해 ffmpeg를 사용하고 있습니다.
ffmpeg -i 2.mp4 -i 장갑.png -i 양말.png -filter_complex "[1:v]scale=320:240 [ovrl]; [0:v][ovrl]overlay=y=Hh:enable=' between(t,3,8)'[v1];[2:v]scale=320:240 [ovrl1];[v1][ovrl1]overlay=y=Hh:enable='between(t,15,20) '[v2]" -map "[v2]" -map 0:a -c:a outputVideo.mp4 복사
이제 3~8초 사이에 비디오와 오디오를 일시 중지하고 3~8초 동안만 새 오디오를 재생하고 남은 시간 동안 이전 오디오를 계속해야 합니다.
친절하게 도와주세요.
답변1
오디오 및 비디오를 일시 중지하려면 loop
스트림을 사용하거나 PTS를 오프셋하면 됩니다.
루핑 스트림
loop=loop={len_frames}:size=1:start={pos_frames},setpts=N/FRAME_RATE/TB
여기서 는 {len_frames}
프레임 단위의 루프 길이이고 는 {pos_frames}
프레임 단위의 일시 중지 위치입니다. 비디오의 프레임 속도를 얻고 여기에 선택한 길이 및 타임스탬프(초)를 곱하여 이러한 숫자를 계산할 수 있습니다.
aloop
각각 및 를 사용해야 하는 오디오 부분 asetpts
과 샘플링 속도(Hz)도 마찬가지입니다. 또한 를 설정하여 오디오를 음소거해야 합니다 volume=0
.
반복되는 비디오 및 오디오 스트림은 원본보다 길어지므로 해당 스트림에 오버레이를 표시할 수 있습니다.
이러한 명령은 함께 사용하기가 다소 복잡하므로 다음과 같이 작성했습니다.파이썬 프로그램비디오와 오디오가 일시 정지된 동안 "버퍼링" 표시기를 삽입합니다. 루프 명령이 어떻게 생성되는지 확인할 수 있습니다.여기.
PTS에 대한 오프셋
Gyan을 참조하세요여기에 대답하세요, 기본적으로 다음을 수행합니다.
setpts='PTS+gte(T\,{start_time})*({shift}/TB)'
와 결합됩니다 -vsync vfr
. 여기서 {start_time}
는 프레임이 오프셋되는 시간이고 {shift}
는 적용된 이동입니다.
오디오 이동
특정 시간 간격 동안 오디오를 재생하는 경우 다음을 수행할 수 있습니다.-itsoffset
입력 옵션을 사용하세요시작을 상쇄합니다.
또는 필터를 사용하여 고정된 양으로 오디오 스트림의 PTS를 상쇄합니다 asetpts
.