Как повернуть конкретный часть видеофайла?

У меня есть большой видеофайл (2,2 ГБ), и одна часть видео ориентирована неправильно: первая часть в порядке, а вторая часть повернута на 180 градусов (480 * 1066 пикселей). Для решения проблемы я использовал FFmpeg.

  1. Я использовал эту команду, чтобы разделить видеофайл на две части

    ffmpeg -i input.mp4 -t 00:14:36 ​​-c copy 1.mp4 -ss 00:14:36 ​​-c copy 2.mp4

  2. Я изменил метаданные второго видеофайла так, чтобы он соответствовал ориентации первого при чтении:

    ffmpeg -i 2.mp4 metadata: v: s: 0 "rotate = 180" -c copy 20 .mp4

  3. Я объединил 2 файла с помощью этой команды:

    ffmpeg -f concat -i merge.txt -c copy OUTPUT-MERGED.mkv

Где merge.txt перечисляет два файла: 1.mp4 и 20.mp4 .

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

Есть ли способ сделать то, что я хочу, без кодирования одного из двух файлов?

Входной файл содержит следующую информацию:

Metadata:
  rotate          : 90
  creation_time   : 2021-05-07T09:26:43.000000Z
  handler_name    : VideoHandle
Side data:
  displaymatrix: rotation of -90.00 degrees

И два отдельных файла содержат эту информацию:

1.mp4

Metadata:
  rotate          : 90
  handler_name    : VideoHandle
Side data:
  displaymatrix: rotation of -90.00 degrees

20.mp4

Metadata:
      rotate          : 180
      handler_name    : VideoHandle
    Side data:
      displaymatrix: rotation of -180.00 degrees
0
задан 17 May 2021 в 13:03

2 ответа

Это не способ поворачивать часть файла. Метаданные применяются ко всему файлу. Если вы разделите файл, а затем измените метаданные второй части, эти метаданные будут потеряны, если вы снова объедините эту часть с первой частью.

Для поворота части видео ваш единственный вариант - перекодировать эту часть.Вам нужно будет повернуть изображение, а затем подогнать его под размер кадра первой части, вставив черные полосы или обрезав повернутое изображение. Результат необходимо перекодировать с использованием того же кодекса, что и в первой части, в новый видеофайл. Затем этот новый видеофайл можно добавить к первой части.

1
ответ дан 28 July 2021 в 11:39

Вы можете сделать это с помощью проигрывателя, такого как ffplay или mpv:

ffplay -vf "rotate=180*PI/180:enable='between(t,3,6)'" input.mp4
  • Поскольку он просто вращается при воспроизведении, он поворачивает видео без перекодирования. Выходной файл не производится.

  • Единица измерения находится в радианах. Измените первый экземпляр 180 на любую нуженную степень вращения. Для 180 градусов вы можете просто использовать rotate=PI.

  • Для получения дополнительной информации см. документацию о параметрах rotate filter и enable.

0
ответ дан 28 July 2021 в 11:39

Другие вопросы по тегам:

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