Я запускаю следующую команду, чтобы обрезать файл MP4
-i "C:\FFMPEG\Temp\S3\2ad239d1-f4b9-4854-afe4-7e28157893daHighRes.mp4" -q:v 0 -y -ss 00:00:01.000 -to 00:00:29.834 -vf "fade=t=out:st=29.334:d=0.500, scale=iw*min(1080/iw\,720/ih):ih*min(1080/iw\,720/ih),pad=1080:720:(1080-iw)/2:(720-ih)/2" "C:\FFMPEG\Temp\Crops\5ae9806e32ab040978d97013_0.ts"
Как видите, я хочу обрезать видео длительностью ровно 28834 миллисекунды. Однако длина созданного файла при его проверке с помощью ffprobe составляет 28873 миллисекунды. Почему это?
Потому что у вас не 1000 кадров в секунду.
Видео не кодируют миллисекунды, они кодируют кадры. Они могут кодировать только целое количество кадров. Если запрошенная продолжительность не делится равномерно с продолжительностью кадров, то продолжительность вывода будет немного больше.
Для продолжительности 28834 мс возможными частотами кадров являются 1000
, 500
, 1000/13 ≈ 76.9
, 500/13 ≈ 38.5
, 1000/1109
, 500/1109
, 1000/14417
и 500/14417
.