1

У меня есть видео с телефона, которое воспроизводится без проблем на телевизоре Thomson (через USB). Детали видео следующие:

> avprobe 20170904_065655.mp4
avprobe version 11.3-6:11.3-1~trusty, Copyright (c) 2007-2014 the Libav developers
  built on Apr 13 2015 22:25:55 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '20170904_065655.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2017-09-04 04:58:01
  Duration: 00:01:05.34, start: 0.000000, bitrate: 17094 kb/s
    Stream #0.0(eng): Video: h264 (High), yuv420p, 1920x1080, 17017 kb/s, 30 fps, 90k tbn (default)
    Metadata:
      creation_time   : 2017-09-04 04:58:01
    Side data:
      displaymatrix: rotation of -90.00 degrees
    Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      creation_time   : 2017-09-04 04:58:01
# avprobe output

Видео вращается на 90 против часовой стрелки. Поэтому, как указано здесь, я пытаюсь использовать следующую командную строку для поворота видео на 90 градусов по часовой стрелке:

ffmpeg -i 20170904_065655.mp4 -vf "transpose=1" test.mp4

который, к сожалению, поворачивает видео на 180 градусов. Что-то не так с этой командой, чтобы повернуть видео?

В любом случае мне удалось повернуть видео с помощью avidemux , но сохраненный новый видеофайл (rotated.mp4) не воспроизводился на телевизоре («Формат видео не поддерживается»). Я пытался преобразовать файл в разные форматы, используя такие команды, как

avconv -i rotated.mp4 -c:v h264 -q:v 3 -c:a libmp3lame out.avi
avconv -i rotated.mp4 -c:v mpeg1video -q:v 3 -c:a libmp3lame out.avi
avconv -i rotated.mp4 -r 25 -vb 20M  -crf 20  output.avi
avconv -i rotated.mp4  -vcodec libx264 -acodec aac -strict -2 -b:a 384k  output.mp4

Но ничего из этого не сработало. Что мне не хватает? Или есть способ повернуть видео в командной строке без изменения фактического формата / кодировки?

avprobe rotated.mp4 есть

avprobe version 11.3-6:11.3-1~trusty, Copyright (c) 2007-2014 the Libav developers
  built on Apr 13 2015 22:25:55 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, avi, from 'rotated.mp4':
  Duration: 00:00:30.77, start: 0.000000, bitrate: 6728 kb/s
    Stream #0.0: Video: h264 (High), yuv420p, 1080x1920 [PAR 1:1 DAR 9:16], 30 fps, 30.02 tbn, 60.04 tbc
    Stream #0.1: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s

Используя ffmpeg отсюда, вывод avprobe следующий, после того как я применил метод из 'LordNeckbeard' к rotated.mp4:

avprobe version 11.3-6:11.3-1~trusty, Copyright (c) 2007-2014 the Libav developers
  built on Apr 13 2015 22:25:55 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.82.104
  Duration: 00:00:30.86, start: 0.000000, bitrate: 10397 kb/s
    Stream #0.0(und): Video: h264 (Constrained Baseline), yuv420p, 1080x1920 [PAR 1:1 DAR 9:16], 8860 kb/s, 30 fps, 15360 tbn, 60 tbc (default)
    Stream #0.1(und): Audio: [1][0][0][0] / 0x0001, 48000 Hz, 2 channels (default)
Unsupported codec with id 0 for input stream 1
# avprobe output

и ни аудио, ни видео сейчас не поддерживаются ...

2 ответа2

1

Возможно, что повернутое видео превосходит возможности вашего телевизора.

Поворот изменил разрешение с 1920х1080 до 1080х1920.

Если ваш телевизор 1080p (Full HD), он поддерживает 1,920x1,080, а если только 720p, то 1280x720.

В обоих случаях высота видео больше максимальной. Вам понадобится телевизор 2K или 4K для такого видео.

1
ffmpeg -i input.mp4 -vf "scale=-2:1080,format=yuv420p" -c:a copy output.mp4
  • Поскольку телевизор, кажется, игнорирует поворот боковых данных, вам придется перекодировать видео, чтобы повернуть его. ffmpeg сделает это автоматически, поэтому вам не нужно делать ничего особенного.

  • Если это все еще не работает, добавьте -profile:v baseline для дополнительной совместимости. Я также рекомендую попробовать -profile:v main и пропустить -profile:v . Если вам это удастся, избегайте -profile:v , следующий лучший вариант - основной , наименее оптимальный - базовый , но он не имеет большого значения для воспроизведения на местном телевидении: все, что работает лучше.

  • Масштабный фильтр будет уменьшать видео до высоты 1080, иначе он не будет воспроизводить видео размером 1080x1920.

  • Использование фильтра формата обеспечит совместимый формат пикселей. Ваш ввод уже YUV 4: 2: 0 планарный, но это просто страховка для других типов ввода.

  • -c:a copy была добавлена в потоковое копирование (повторное мультиплексирование) аудио, чтобы избежать ненужного перекодирования. Для входов, которые содержат аудио, отличное от AAC, используйте -c:a aac вместо -c:a copy .

  • Телевизоры могут быть разборчивы, поэтому это может потребовать дальнейших экспериментов. Чтобы быстро протестировать короткий 60-секундный сегмент, вы можете добавить -t 60 .

  • Поскольку использовался тег я предположил, что вы допустите, что он является приемлемой альтернативой avconv . Ничто из этого не может относиться к avconv как я им не пользуюсь, и я не знаком с ним. Убедитесь, что вы используете последнюю версию ffmpeg . Для Linux вы можете скачать последнюю версию ffmpeg адресу https://www.johnvansickle.com/ffmpeg/

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