В качестве продолжения этого вопроса я сейчас борюсь с синхронным редактированием видео и аудио.
Я все еще пытаюсь разрезать видео по кадрам. В то время как получающиеся метки времени кажутся правильными на видео, звук далеко не синхронизирован. Это даже не помогает добавлять постоянное время в asetpts
. Кажется, он меняется с каждым другим диапазоном кадров, который я использую.
Вот что у меня есть (это просто соответствующие части более длинного скрипта):
SET SELECT=select='gte(n\,%4)*lte(n\,%5)'
SET ASELECT=aselect='gte(n\,%4)*lte(n\,%5)'
SET SETPTS=setpts='PTS-STARTPTS'
SET ASETPTS=asetpts='PTS-STARTPTS'
SET SCALE=scale='1280:-1'
SET CROP=%3
:
ffmpeg -y -i %1 -af %ASELECT%,%ASETPTS% -vf %SELECT%,%SETPTS%,%SCALE%,%CROP% ^
-ab 128k -crf 18 -pix_fmt yuv420p "%1 converted.mp4"
Короче
- он принимает кадрированный материал и начальный / конечный кадры в качестве параметров
- исходный файл начинается с ~ 1 секунды аудио до начала синхронизированного видео
- если я не использую
setpts/asetpts
и неselect/aselect
, результирующее видео начинается с одной секунды замороженного кадра со звуком, а затем видео воспроизводится синхронно с аудио - если я не использую
setpts/asetpts
, результирующее видео начинается со стоп- кадра, затем идет звук, а затем начинается пропущенный стартовый кадр, в котором видео воспроизводится синхронно с аудио - если я не использую
select/aselect
, полученное видео будет отключено примерно на одну секунду как для видео, так и для аудио - если я использую все, полученное видео будет иметь как видео, так и аудио, начиная с начального кадра, и звук будет отключен примерно на одну секунду
Я думаю, что select/aselect
работает нормально, но setpts/asetpts
вызывает проблемы. Работа только с видеофильтрами или аудиофильтрами только ухудшает ситуацию.
Очевидно, я делаю что-то не так здесь. Поэтому, может кто-нибудь помочь мне здесь? Может быть, можно даже объяснить, как setpts
и asetpts
работают вместе?
РЕДАКТИРОВАТЬ:
Другие попытки:
ffmpeg -y -i %1 ^
-filter_complex %ASELECT%,%ASETPTS%;%SELECT%,%SETPTS%,%SCALE%,%CROP% ^
-ab 128k -crf 18 -pix_fmt yuv420p "%1 converted.mp4"
с двумя входами (это очень медленно):
ffmpeg -y -i %1 -i %1 ^
-filter_complex [1:1]%ASELECT%,%ASETPTS%[aud];[0:0]%SELECT%,%SETPTS%,%SCALE%,%CROP%[vid] ^
-map [vid] -map [aud] ^
-ab 128k -crf 18 -pix_fmt yuv420p "%1 converted.mp4"