Співвідношення розмірів відео, нарізаного з FFmpeg, ненавмисно змінюється


1

Я намагаюся витягти невелику частину з великого відео без зміни кодеків, дозволу або щось інше. Тому я використовую FFmpeg з наступними настройками.

ffmpeg -vcodec copy -acodec copy -ss 01:00:00 -t 00:00:30 -metadata title="Custom title" -metadata artist="Artist Name" -metadata language="English" -i input_file_h264.mp4 output_file.mp4

Я обробляю відео на Ubuntu 10.10. з FFmpeg версії 0.6-4: 0.6-2ubuntu6.2.

Вихідний файл містить ту ж інформацію про кодек, що й вхідний файл. Хоча, це відкривається в VLC та інші медіапрогравачі так, як якщо б роздільна здатність відео змінилася . Джерело вхідного сигналу поставляється з роздільною здатністю 720x576. Використовуваний кодек H264 - MPEG-4 AVC (частина 10) (avc1). Коли вихідне відео відкриває його з'являється ширше (16: 9), хоча параметри відео не змінилися.
Я також не міг знайти нічого подібного неправильного налаштування у VLC.

Чи знаєте ви про проблему з H264 на Ubuntu? Наскільки я розумію, використовується libx264. Але це актуально, коли я просто зрізую відео?


Як запропонував slhck я змінив порядок аргументів.

ffmpeg -ss 01:00:00 -i 28c3-4906-en-lightning_talks_day_3_pecha_kucha_h264.mp4 -vcodec copy -acodec copy -t 00:00:30 output_file_slhck.mp4

1
Я не можу відтворити помилку. Вона працює без проблем для мене. Оновіть FFmpeg 0.9 або новіше пояснюється тут і повторіть спробу. Він повинен працювати.
slhck

Я оновив FFmpeg і використав порядок аргументів, як ви запропонували. Тепер вона відмінно працює! Дякую!
JJD

Рада, що я міг допомогти!
slhck

Відповіді:


2

Ви насправді не копіюєте відеопотік.

Постачання acodec і vcodec опції після i опції. Просто подумайте, як ви їх обробляєте. Спочатку прочитайте файл, потім вирішіть, як кодувати, потім виводити. Якщо ви цього не зробите, параметри будуть розібрані по-різному 1 , що пояснює різницю у вхідних та вихідних даних відповідно до вашого журналу:

Input:  Stream #0.0(und): Video: h264, yuv420p, 720x576 [PAR 64:45 DAR 16:9]
Output: Stream #0.0(und): Video: libx264, yuv420p, 720x576 [PAR 89:44 DAR 445:176]

Зверніть увагу на різницю у співвідношенні пікселів (PAR)? Наразі ви намагаєтеся декодувати відео з copy кодек, який, очевидно, не існує. Розміщення опцій у FFmpeg дуже важливо. 2

Це також те, що в керівництві говорить:

Виберіть кодер (якщо використовується перед вихідним файлом) або декодер (коли використовується перед вхідним файлом) для одного або декількох потоків

Отже, підсумовувати - метадані виключені для читаності:

ffmpeg -ss 01:00:00 -i input_file_h264.mp4 -vcodec copy -acodec copy -t 00:06:00 output_file.mp4

1 - У нових версіях FFmpeg команда не вдалася, оскільки a copy декодера не існує.

2 - Також, розмістіть t після процесу кодування і залишити ss на початку. Введення ss на початку гарантує, що файл зчитується до часу, а потім починається кодування. Якщо б ви були на місці ss після i, який би кодував файл з самого початку, що може тривати довго.


На жаль, не працює. Крім того, імхо, що було б дуже погано, якщо FFmpeg не оптимізує порядок параметрів.
JJD

@JJD Порядок параметрів робить справі. Це просто не дуже очевидно з керівництва. З FFmpeg 0.9, розміщення vcodec або acodec раніше i результатів Unknown decoder 'copy' помилка, оскільки вона намагається декодувати вхідного файлу з цим, не кодувати вихідний файл. Оновіть версію FFmpeg і повторіть спробу!
slhck

Я очікував, що співвідношення сторін не зміниться, оскільки я не налаштував його для цього. Чи не існує способу змусити FFmpeg зберегти співвідношення сторін? - Я не хочу вас ображати, але той факт, що мені доводиться викладати аргументи в певному порядку, дуже недружелюбний.
JJD

1
Я дивлюся на це. У всякому разі, ви повинні помістити їх в іншому порядку, тому що змінюється зміст . Розміщення їх перед тим, що ви хочете, щоб змусити певний декодер для вхідного відео, при розміщенні їх після означає, що ви хочете, щоб змусити певний кодер для вихідного відео. Див -codec опція: & gt; Виберіть кодер (якщо використовується перед вихідним файлом) або декодер (коли використовується перед вхідним файлом) для одного або декількох потоків .
slhck

Що стосується співвідношення сторін: Якщо ви використовуєте vcodec copy у правильному положенні, він повинен залишити відео (і його співвідношення сторін) недоторканим. Якщо у вас все ще є проблеми, додайте вихідні дані нової команди до вашого запитання. Можна вручну налаштувати співвідношення сторін з -aspect (див. посібник для використання).
slhck
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.