Проблема возникает из-за различного значения -ss в зависимости от того, где она находится в командной строке. Это переносится с тех пор, когда avconv все еще был частью проекта ffmpeg, и я считаю, что он исправлен в более новых версиях.
В старые времена, если вы сказали что-то вроде [ ! d1]
ffmpeg -ss 5 -i input
То, что вы имели в виду, это «пропустить 5-секундную метку в файле и начать читать там».
Но если вы сказали
ffmpeg -i input -ss 5
[d4 ] Вы имели в виду «открыть входной файл и пропустить все данные до пяти секундной метки». Как вы понимаете, первый подход будет часто терпеть неудачу довольно часто, потому что вы пропускаете в файле, не читая его , Он работает хорошо только на файлах, в которых есть временные метки, позволяющие вам читать фрейм и знать, слишком ли вы зашли слишком далеко.
В основном, как это работает в ffmpeg: «Угадайте, битрейт на первую секунду, а затем предположим, что все остальные секунды одинаковы ». Но, конечно, не все секунды одинаковы, и если мы говорим о 52-часовом «дрифте», ошибка может быть довольно большой.
Итак, если вы используете ранний пост-разделенный версии avconv, вы всегда должны ставить -ss после файла, который читается. Но в более новых версиях (насколько мне известно) эта ошибка была исправлена.