Я использую ffmpeg для поворота видео на 90 градусов, поэтому введите этот код

ffmpeg -i in.mp4 -vf "transcode=1" out.mp4

Это так медленно, как перекодирование. Я добавил -c copy, чтобы сделать это быстро, но у меня возникла ошибка, которую две функции не могут использовать одновременно.

ffmpeg -i in.mp4 -c copy -vf "transcode=1" out.mp4

3 ответа3

2

Причина в том, что это медленно, не из-за поворота, а из-за того, что вы перекодируете видео.

Если вы не указываете выходной видеокодек, по умолчанию для mp4 используется предварительно установленный носитель H.264 (libx264), который в зависимости от разрешения и вашего оборудования может быть медленным.

Я вижу, вы пытаетесь обойти это, указав «-c copy», но вы не можете: вращение видео означает его изменение, поэтому нет способа просто скопировать поток H.264. Повторное кодирование не вариант в вашем случае.

Вы можете попробовать один из более быстрых пресетов:

ffmpeg -i in.mp4 -vf "transcode=1" -vcodec libx264 -preset veryfast -acodec copy out.mp4

Но качество / размер файла пострадает.

См. Https://stackoverflow.com/questions/25031557/rotate-mp4-videos-without-re-encoding, есть интересный ответ об изменении метаданных, чтобы игроки могли вращать видео.

1

Я предлагаю rotate вместо transcode .

ffmpeg -i input_video -vf "rotate=PI/2" output_video

Также смотрите здесь и здесь для получения дополнительной информации.

Надеюсь это поможет!

1
ffmpeg -i in.mp4 -c copy -metadata:s:v:0 rotate=90 out.mp4

Это работает для меня, но не работает все видео плеер. Но это так быстро, как другие команды. Это просто изменить флаг поворота. (Обратите внимание, что специальный угол не может работать с этим).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .