FFmpeg concat mp4 повреждение

646
Ethan SK

Когда я бегу

ffmpeg -f concat -i resizedvideolist.txt -c copy concatenated_time.mp4 2>&1 

он объединяет все видео в текстовом формате, но есть примерно одно видео на полпути, которое сбивается. Звук просто не воспроизводится для этого видео, но затем начинается воспроизведение следующего видео, поэтому оно было отложено. Затем где-то аудио удалось догнать и вернуться в синхронизацию. Похоже, здесь происходит какая-то серьезная коррупция.

Я не знаю, как это исправить, так как кодек такой же, как и все другие видео, H.264, это mp4, как и другие. Отдельный видеофайл работает нормально, как есть, и он уже находится в том же масштабе времени, потому что перед этой командой ffmpeg я запустил

ffmpeg -i ./tempDownloadedMemes/$videoFileName -filter_complex 'scale=1080:-1,pad=1080:1080:(ow-iw)/2:(oh-ih)/2:0x2F2F2F' -video_track_timescale 15360 ./resizedVideos/resized_videoFileName 2>&1 

Честно говоря, я даже не знаю, что такое временные рамки, но я читал, что для того, чтобы они работали, они должны быть одинаковыми. Я удалил видео из списка, попробовал эту же команду, и проблема исчезла одновременно с видео, которое появилось бы. Кажется, это как-то связано с этим одним файлом. Любые известные проблемы / обходные пути для ошибок concat? Это очень важно для меня. Благодарю.

2
Вам нужно показать информацию о каждом входе. `ffmpeg -i input0 -i input1 -i input2` LordNeckbeard 7 лет назад 1
Только что нашел этот [ответ на SO] (https://stackoverflow.com/a/42820847/3703716). Проблема может заключаться в вызове `shell_exec`, который не позволяет ffmpeg очистить память и, таким образом, повредить видеофайл. mab 5 лет назад 0

1 ответ на вопрос

1
Ethan SK

я нашел действительно хакерский обходной путь, используя другой метод concat.

$resizedVideoList = file('resizedVideoList.txt', FILE_IGNORE_NEW_LINES); $inputStringForConcat = ""; $concatString = ""; $concateNvalue = 0; foreach ($resizedVideoList as $key => $value) { //$limiter++; //if ($limiter > 2)break; $inputStringForConcat .= " -i ".$value; $concatString .= "[$key:0][$key:1]"; $concateNvalue++; } $concatString .= " concat=n=$concateNvalue:v=1:a=1[v][a]"; echo ("<pre>"); print_r($inputStringForConcat); print_r($concatString);   echo shell_exec("./ffmpeg $inputStringForConcat -filter_complex '$concatString' -map '[v]' -map '[a]' concatenated_time.mp4 2>&1"); 

Похожие вопросы