를 사용하여 생성된 오디오 파일을 sox
이미지 파일과 결합하여 200개의 비디오 파일을 생성합니다. 대부분의 클립은 1초보다 짧고 6초보다 긴 클립은 없습니다. 그런 다음 이 파일들을 연결하면 최종 결과에서 전체적으로 약 2초의 지연이 발생합니다.
나는 이것이 오디오와 비디오 트랙이 독립적으로 연결되어 있기 때문일 수 있다고 생각합니다.
ffprobe를 사용하여 비디오 및 오디오 트랙(스트림)의 정확한 지속 시간을 확인할 수 있습니다. 짧은 파일 중 하나에서만 지속 시간이 다른 것을 볼 수 있습니다.
ffprobe file001.webm
Input #0, matroska,webm, from 'file001.webm':
Metadata:
ENCODER : Lavf58.20.100
Duration: 00:00:00.92, start: 0.000000, bitrate: 211 kb/s
Stream #0:0: Video: vp8, yuv420p, 1100x140, SAR 1:1 DAR 55:7, 25 fps, 25 tbr, 1k tbn, 1k tbc (default)
Metadata:
ENCODER : Lavc58.35.100 libvpx
DURATION : 00:00:00.923000000
Stream #0:1: Audio: vorbis, 48000 Hz, stereo, fltp (default)
Metadata:
ENCODER : Lavc58.35.100 libvorbis
DURATION : 00:00:00.908000000
하나의 비디오 파일에 있는 비디오와 오디오 트랙의 지속 시간이 완전히 동일하도록 하려면 어떻게 해야 합니까?
나는 vpx/vorbix/webm을 사용하고 있지만(mpeg2ts 문제의 원인을 이해할 수 없는 후) 이를 완료하기 위해 어떤 형식이든 사용할 것입니다.
오디오에 묵음 패딩을 추가하여 지속 시간을 일치시킬 수도 있습니다.
답변1
기본적으로 노력할 가치가 없습니다. 오디오 프레임은 코덱 및 샘플링 속도에 따라 고정된 지속 시간을 갖습니다. 예를 들어 aac는 1024/샘플 속도입니다. 예: 1024/48000 ~ 21.333ms. 따라서 비디오를 완벽한 배수로 리샘플링하면 이론적으로 정확합니다. 컨테이너가 컨테이너를 전혀 수정하지 않는다고 가정합니다. 그렇지 않으면 오디오 인코더를 수정하여 사용되는 프라이밍 샘플 수를 제어할 수 있습니다. 그러면 부분적인 첫 번째 오디오 프레임을 얻을 수 있습니다. 그러나 다시 모든 코덱이 다릅니다. 그렇지 않으면 VFR을 사용하고 컨테이너가 지원하는 경우 최종 프레임 기간을 수동으로 설정할 수 있습니다. 마지막으로 mp4에서 편집 목록을 변경하고 지원을 보장할 수 있는 플레이어를 사용할 수 있습니다.
이런 일을 할 수 있는 도구가 기성품인지 모르겠습니다.