Как повернуть видео и воспроизвести его на телевизоре?

866
Alex

У меня есть видео с телефона, которое воспроизводится без проблем на телевизоре 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 

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

1
@ Алекс 1. Вам особенно нужно, чтобы это выполнялось с помощью avconf или ffmpeg через командную строку, или другое программное обеспечение libre будет в порядке? 2. о какой модели телевизора идет речь? 3. Имеет ли значение, если формат меняется до тех пор, пока сохраняется качество? wizzwizz2 6 лет назад 0
[Это] (http://www.thomsontv.eu/faq) одновременно несколько полезно и совершенно бесполезно: «Это часто встречающаяся проблема с файлами в форматах .AVI и .DIVX и зависит от кодека используется при создании файла. Если файл нечитаемый, это означает, что его кодек не совместим с телевизором. " wizzwizz2 6 лет назад 0
Что такое информация avprobe для rotated.mp4? harrymc 6 лет назад 0
@harrymc: добавлен вывод к вопросу Alex 6 лет назад 0
Я использовал последнюю версию, и теперь ни аудио, ни видео не поддерживаются. Возможно я поищу способ записи видео с экрана компьютера .... Alex 6 лет назад 0
Команда, данная LordNeckbeard, должна выполняться не на `rotated.mp4`, а на` input.mp4` (ваш исходный файл). В вашем `rotated.mp4` аудио кодируется в формате PCM, что отличается от исходного AAC. В принципе, вы можете просто скопировать оригинальное аудио поверх (`-c: копия`), и ваш телевизор должен прочитать его. Воспроизводится ли видео, если вы используете `ffmpeg -i input.mp4 -c: v mpeg4 -qscale: v 2 -an output.mp4`, т.е. с кодеком MPEG-4 и без звука? Или в качестве альтернативы с помощью `ffmpeg -i input.mp4 -c: v mpeg4 -qscale: v 2 -c: выход libmp3lame.mp4`? slhck 6 лет назад 0
Я использовал 64-битный johnvansickle `ffmpeg` для следующих двух экспериментов. 1. Преобразование в соответствии с предложением LordNeckbeard: «Формат видео не поддерживается». 2. С помощью предложенной вами команды я получил ожидаемый «Аудиоформат не поддерживается», но видео не воспроизводится, оно выглядит как поврежденное неподвижное изображение. На этот раз не было ошибки «видеоформат не поддерживается». Alex 6 лет назад 0
@slhck: Ваша вторая командная строка: розоватое неподвижное изображение со звуком. Так же, как (2.), но с аудио. Может быть, я спрашиваю о невозможном ...? Alex 6 лет назад 0

2 ответа на вопрос

1
LordNeckbeard
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был добавлен поток, чтобы скопировать (re-mux) аудио, чтобы избежать ненужного перекодирования. Для входов, которые содержат звук, отличный от AAC, используйте -c:a aacвместо -c:a copy.

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

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

Спасибо за предложение, но оно не работает. Телевизор снова говорит: «Формат видео не поддерживается». Alex 6 лет назад 0
@ Алекс Показать информацию о видео, которое работает. LordNeckbeard 6 лет назад 0
Это в начале вопроса. Или вы хотите увидеть информацию из другого видео? Alex 6 лет назад 0
@ Алекс Нет, прости. Я пропустил, что это и работает, и не работает. Пусть начнется игра в догадки: попробуйте добавить `-brand mp42`. LordNeckbeard 6 лет назад 0
Спасибо за этот совет, но все равно я получаю сообщение об ошибке «Формат видео не поддерживается». Звук, однако, работает как прежде ... Alex 6 лет назад 0
@Alex Можете ли вы подтвердить, что вы использовали последнюю версию ffmpeg по ссылке, указанной в ответе, вместо ffmpeg или avconv из репозитория? LordNeckbeard 6 лет назад 0
Я использовал последнюю версию `ffmpeg` и при этом ни аудио, ни видео не поддерживается !! Alex 6 лет назад 0
Итак, теперь я думаю, что окончательный ответ на мой оригинальный вопрос - это смесь обоих ответов здесь ... Alex 6 лет назад 0
@ Алекс Работает ли он теперь после применения команд, приведенных выше, плюс повторное масштабирование? slhck 6 лет назад 0
Да, это работает сейчас! Alex 6 лет назад 0
1
harrymc

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

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

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

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

Может быть, есть способ уменьшить разрешение видео? Это было бы проще ... Alex 6 лет назад 0
@ Алекс Чтобы масштабировать до высоты 1080 пикселей, добавьте `-filter: v" scale = -2: 1080 "` к команде ffmpeg (перед указанием кодека и т. Д.). slhck 6 лет назад 0
@slhck: Итак, теперь я думаю, что окончательный ответ на мой оригинальный вопрос представляет собой смесь обоих ответов здесь ... Alex 6 лет назад 0
Вам придется решить, какой ответ был более важен для окончательного решения. harrymc 6 лет назад 0
@ Алекс Вы можете принять один ответ и передать вознаграждение другому, или наоборот. Там нет правил для таких случаев. slhck 6 лет назад 0
Алекс: Делай то, что считаешь правильным. Разделение акцепта и щедрости является возможным решением вашей дилеммы. harrymc 6 лет назад 0
@Alex Основная проблема, по-видимому, заключалась в неподдерживаемом размере выходного файла 1080x1920, на что указал harrymc, и я не учел в своем первоначальном ответе. Я обновил свой ответ новой командой для удобства, но все, что вы решите сделать, хорошо для нас. LordNeckbeard 6 лет назад 0

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