Ffmpeg — Проблема синхронизации звука после вырезания видео (сервер Debian)

#video #ffmpeg #video-processing

Вопрос:

У меня возникли (по-видимому, случайные) проблемы с ffmpeg при вырезании и подключении некоторых видеоклипов на нашем сервере Debian. Аудио видео, которое мы создаем, соединяя разные клипы, несинхронизировано, хотя ни оригинал, ни сгенерированные клипы не синхронизированы. Это происходит с ffmpeg версии 3.2.15-0 deb9u4.

Нам интересно, может ли проблема быть связана с неправильной комбинацией вырезания / установки ключевого кадра, но мы не можем идти дальше.

Здесь код, используемый для вырезания и присоединения к видео:

 create clip

ffmpeg -y -ss ' . $ss . ' -i ' . $i . ' -t ' . $t . ' -c copy ' . $tempfile . ' 2>amp;1'));// read duration$duration = floatval(shell_exec('ffprobe -i ' . $tempfile . ' -show_entries format=duration -v quiet -of csv="p=0" 2>amp;1'));// set key frameecho nl2br(shell_exec('ffmpeg -y -i ' . $tempfile . ' -r 5 -force_key_frames ' . $ss . ' -copyts ' . $o . ' 2>amp;1'

create clip from image

self::getNiceOption() . 'ffmpeg -y -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -loop 1 -i ' . $imagePath . ' -c:v libx264 -r 5 -t ' . $duration . ' -pix_fmt yuv420p -vf scale=' . $res_x . ':' . $res_y . ' ' . $o . ' 2>amp;1'

join clips

// scale each clip to same resolution
self::getNiceOption() . 'ffmpeg -y -i ' . $path . ' -vf "scale=' . $res_x . ':' . $res_y . ':force_original_aspect_ratio=decrease,pad=' . $res_x . ':' . $res_y . ':(ow-iw)/2:(oh-ih)/2" ' . $scaledVideoPath . ' 2>amp;1'

// concat the clips
self::getNiceOption() . 'ffmpeg -y -safe 0 -f concat -i ' . $text_file_path . ' ' . $o . ' 2>amp;1'
 

Вот в чем проблема, я думаю:

[mp4 @ 0x55fcd555c720] Немонотонные DT в выходном потоке 0:1; предыдущий: 16116000, текущий: 14824181; изменение на 16116001. Это может привести к неправильным меткам времени в выходном файле.

Спасибо!

Комментарии:

1. Все клипы, которые будут объединены, должны иметь одинаковые атрибуты. Ваш сценарий скрывает ваши фактические команды ffmpeg, и вы не предоставили полные журналы каждой команды, поэтому мы не можем предоставить конкретный ответ.

2. [mp4 @ 0x55fcd555c720] Немонотонные DT в выходном потоке 0:1; предыдущий: 16116000, текущий: 14824181; изменение на 16116001. Это может привести к неправильным меткам времени в выходном файле.

3. Нужно: 1) видеть каждую команду, написанную без каких-либо переменных. 2) Полный журнал выполнения каждой команды.