Правильне співвідношення сторін без перекодування відеофайлу


18

У мене є відеопотік із такими властивостями:

Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID / 0x44495658), yuv420p, 720x416 [SAR 1:1 DAR 45:26], 1908 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc

Коли я запускаю його у VLC, мені потрібно натиснути "A", щоб змінити співвідношення сторін на "4: 3", щоб зробити показ відео з правильним співвідношенням сторін.

Переглядаючи факти відео, чи є помилка в тому, що: а) фактичне відео було неправильно розтягнуто в даних пікселів, або б) є просто якесь значення метаданих, яке було встановлено неправильно?

Якщо перший, я знаю, що можу перекодувати відео та змінити ширину та висоту. Але якщо останнє, яку команду ffmpeg я запускаю, щоб виправити метадані без перекодування самого відео?

Відповіді:


36

Існує різниця між коефіцієнтом вибірки (SAR) і коефіцієнтом відображення (DAR). Якщо ви хочете змінити відео, яке відображатиметься на рівні 4: 3, вам потрібно буде змінити фактичні пікселі на зображенні (шляхом масштабування пікселів та зміни SAR), або встановивши прапор метаданих, який на рівні контейнера повідомляє зовнішній медіаплеєри, щоб розтягнути зображення на потрібний DAR.

Ви не зможете масштабувати пікселі та змінювати SAR, не застосувавши відеофільтр. Якщо ви виберете цей метод, вам буде потрібно перекодувати файл - оскільки ви не можете "потоково копіювати" відеопотік під час застосування відеофільтру.

Щоб масштабувати зображення та змінити SAR (під час перекодування), спробуйте:

ffmpeg -i <INPUT_FILE> -vf scale=720:540 -c:v <Video_Codec> <OUTPUT_FILE>

З іншого боку, якщо ви просто захочете змінити прапор метаданих та відрегулювати DAR, ви зможете потоково скопіювати відео. Для цього спробуйте:

ffmpeg -i <INPUT_FILE> -aspect 720:540 -c copy [OUTPUT_FILE]

Відмінно! Зміна аспекту спрацювала відразу!
forthrin

2
Ви не можете одночасно використовувати -c copyта масштабувати; однак ви можете використовувати -aspectдля зміни співвідношення сторін на рівні контейнера (але не на рівні потоку).
логіан

@LordNeckbeard, використовуючи функціонує -aspectдля відтворення у ffplay, але не у WMP чи MPC-HC. Він додає додатковий елемент SAR / DAR до Stream #…інформаційної лінії, FFmpeg/probe/playале, здається, не є рішенням для загального відтворення. Розтягування відео вікном здається найпростішим рішенням для відтворення MPC-HC.
Лумі

не працював у мене для MPEG2 без перекодування
Михайло V

Я не знаю, чому це не працювало для мене. Це просто виводить те саме відео!
Тіна J

4

Відповідь Дельгадо правильна, що MP4Box може це зробити, але -parпараметр працює не так, як описано. З -outпараметром (щоб не порушити вихідний файл):

mp4box source.mp4 -out target.mp4 -par stream-number=width:height

Під час використання -par stream-number=width:heightви визначаєте співвідношення сторін пікселя - тобто результат поділу співвідношення сторін пристрою на співвідношення сторін зберігання. (Еквівалентно, ви описуєте співвідношення сторін пікселя джерела.) Наприклад, припустимо, у вас є джерело DVD, яке становить 720 × 480, а правильне співвідношення сторін дисплея - 4: 3. Для цього вам потрібно:

mp4box source.mp4 -out target.mp4 -par 1=8:9

тому що (4/3) / (720/480) = 8/9.

Якщо джерело представляє справжні пікселі SD NTSC (у цьому випадку, лише центральні 704 × 480 пікселів повинні відображатись на екрані 4 × 3, з 8 пікселів за заслоном з обох боків), правильною командою було б:

mp4box source.mp4 -out target.mp4 -par 1=10:11

тому що (4/3) / (704/480) = 10/11 - саме опорне співвідношення сторін пікселів для відео NTSC стандартної чіткості.

Для випадку, наведеного у питанні, якщо це дійсно 4: 3, це дає дуже незвичайне співвідношення пікселів: (4/3) / (720/416) = 104/135. Ширина 720, що говорить про джерело DVD; це відео на 25 кадрів в секунду, що говорить про PAL, але ПАР працює менше ніж на 1, підказуючи NTSC. Можливо, це може бути 4: 5, я думаю (дуже близько до 104: 135), але я не знаю нічого, що створює таке співвідношення пікселів; можливо спробуйте це спочатку, а потім спробуйте 3: 4, якщо він все ще виглядає занадто розтягнутим по горизонталі. Якщо ви впевнені, що це точно 4: 3, звичайно, просто використовуйте 104: 135.


3

ffmpeg не може змінити параметри відеопотоку без перекодування, MP4Box (частина gpac ) та mkvmerge можуть. У випадку одного відеопотоку та реального / правильного співвідношення сторін 4: 3, ви можете спробувати:

MP4Box -par 1=3:4 VideoFile.mp4

    "-par" : PixelAspectRatio (adjusts DAR + SAR with respect to the video resolution)
    "1"=   : stream number
    "3:4"  : aspect ratio (lower number 1st!)
    Changes are directly applied to "VideoFile.mp4", no copy

Щоб перевірити до і після: ffmpeg -i VideoFile.mp4


0

Зміна SAR без перекодування також працює з ffmpegна .mp4використання в h264_metadataякості Gyan вказувало тут :

ffmpeg -i in.mp4 -c copy -bsf:v "h264_metadata=sample_aspect_ratio=4/3" out.mp4

Хоча це теоретично може відповісти на питання, бажано було б сюди включити істотні частини відповіді та надати посилання для довідки.
МММ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.