Раньше для того, чтобы вырезать видео я использовал графическую оболочку Avidemux, но сейчас он у меня как то странно стал работать — не уменьшается размер окна, поэтому не видны некоторые элементы управления, да и не хотелось мучительно вспоминать как же именно там выделять отрезок, потом не удалить лишнее, а потом еще и делать экспорт. В общем, решил поискать способы сделать это через командную строку. Первый попавшийся способ был такой:
ffmpeg -i input.mkv -vcodec copy -acodec copy -ss 00:59:03 -t 00:01:45 output.avi
Но он почему-то не сработал, а именно наблюдалась сильная рассинхронизация звука и видео, возможно потому, что исходное видео находилось в контейнере mkv и для правильного перекодирования в avi нужно было в явном виде указывать параметры перекодирования. Не получилось перекодировать на в mpg ни в mp4. К счастью, нашлась заготовка с настройками правильного перекодирования в mp4:
- ffmpeg -i input.mkv -c:v libx264 -preset slow -crf 22 -c:a copy output.mp4
Я добавил параметры, указывающие с какого момента времени нужно вырезать видео: -ss 00:59:13, а так же длительность отрезка: -t 00:03:47 и клип получился как надо.
- ffmpeg -ss 00:59:13 -i input.mkv -c:v libx264 -preset slow -crf 22 -c:a copy -t 00:03:47 output.mp4
Кстати, обратите внимание, что параметр -ss 00:59:13 указан перед флагом -i. В этом случае, ffmpeg не декодирует видео до нужного участка, а просто перематывает, поэтому в этом случае вся операция занимает гораздо меньше времени. Однако, при этом могут возникнуть ошибки с позиционированием и в этом случае можно попробовать поставить параметр -ss после -i, например вот так:
- ffmpeg -i input.mkv -c:v libx264 -preset slow -crf 22 -c:a copy -ss 00:59:13 -t 00:03:47 output.mp4
Однако в моем случае это делать не понадобилось. Неудобно только, что нельзя сразу указать момент времени окончания отрезка и приходится вручную подсчитывать длительность.
http://ubuntu-forward.blogspot.com/2013/12/kak-vyrezat-otryvok-iz-video-v-ubuntu.html