Обрезка видео без потерь за миллисекунды с использованием FFMPEG - PullRequest
0 голосов
/ 09 мая 2019

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

Я пробовал так много вариантов команды, причем для большинства из них было больше половины секунды.Это для копирования и перекодирования.С этим я попробовал -ss до и после, а также в обеих позициях, но я не вижу никакой разницы.Эти две команды, которые работали лучше всего, все еще недостаточно близки:

//copy
"-ss $startTime -t $endTime -i $input -f segment -c copy $output"

//encode
"-i $input -ss $startTime -c:v libx264 -crf 12 -preset ultrafast -t $endTime $output"

Кто-нибудь использовал команду или даже другую библиотеку, которая дала более точные результаты?

1 Ответ

0 голосов
/ 22 мая 2019

После поиска дней, наиболее близких к миллисекундам точного кадрирования в FFMPEG, я получил с помощью следующей команды:

"-ss $startCutTime -i $inputFilePath -ss 0 -c copy -to $endCutTime -avoid_negative_ts make_zero $outputFilePath"

Эта команда с точностью до 20 миллисекунды с клипом 30 кадров в секунду, новсе это будет зависеть от частоты кадров вашего видео.Я надеюсь, что это поможет другим.Вот объяснение того, что делает каждый компонент:

/**
     * FFMPEG Cmd Structure
     * -i: Input file
     * -ss: If this is placed before the input file it seeks to this position in the input file. If it's after the input it will split from that exact position.
     * -to: The position of where the command is going to cut to.
     * -c copy: This copies the video and audio codecs as they are for speed.
     * -avoid_negative_ts make_zero: Sets the first timestamp as 0
     * The times are passed in parsed eg 00:00:10.456
     * The output file is the last part of the command
     */
...