Як я можу обрізати mp4 відео, використовуючи лише точку з'єднання кодування ffmpeg


1

Я обрізаю mp4 відео, використовуючи такий ffmpeg.

$ ffmpeg -i in.mp4 -ss 00:01:00 -t 00:01:00 -c copy out.mp4

Але я отримую фільм, у якому перше 10-секундне відео не існує. (лише звук) Я хотів перекодувати фільм за допомогою HandBrake, але він не розпізнається належним чином із наступним повідомленням про помилку.

Ваше джерело може бути захищено від копіювання, погано засвоєно або у форматі, який HandBrake не підтримує. Будь ласка, зверніться до Документації та поширених запитань (див. Меню довідки).

Я думаю, що це відбувається через базовий кадр або щось подібне.

Чи є варіанти зробити ffmepg повторним кодуванням першого 10-секундного відео та об'єднатись із не повторним кодом, який залишився 50 секунди?


Це не реально, оскільки бітові потоки повинні мати абсолютно однакові налаштування, щоб мати можливість об'єднати їх. Якщо перші 10 секунд не існує, ви спробували просто перекодувати (якщо це все-таки хотілося зробити?)
slhck

Я не розумію, чому я не можу використовувати ті самі налаштування протягом перших 10 секунд бітових потоків? Неможливо дізнатися значення параметрів із закодованого відео? Або не можна використовувати моє останнє налаштування для кодування?
ironsand

Ох. ​​Якщо ви створили in.mp4і знаєте точні настройки, тоді ви можете спробувати перекодувати перші десять секунд і сформулювати їх з рештою.
slhck

Я сказав 10 секунд, але це не зовсім 10 секунд. Точний час залежить від базової рами. Як я можу правильно знайти довжину видаленого відео? І наскільки я знаю, якщо я об'єднаю два mp4 відео, перші за секунди останнього відео мають деякі перепони, чи не так? Я кілька разів намагався з ffmpeg та MP4Box, але трамплини бувають завжди.
ironsand

Відповіді:


1

Але я отримую фільм, у якому перше 10-секундне відео не існує. (лише звук)

Об’єднання може призвести до похмурого відео. Я особисто уникав різання бітовими копіями, коли тільки можу. Я не думаю, що ти зможеш точно дізнатися, де вона відріжеться, але це точно на якомусь ключовому кадрі.

В основному, якщо ви використовуєте -ssпісля -i, ffmpeg буде шукати часової позначки, незалежно від того, ключовий кадр це чи ні. Потім він запише вихідний потік звідти, але програвач може починати лише з наступного зображення IDR *, тож саме тому ви відчуваєте чорне відео, поки декодер не почне щось показувати.

Ви можете спробувати вказати -ssраніше -i, що змусить ffmpeg шукати лише ключові кадри, і таким чином виробляти вихідний бітовий потік, який повинен відображати відео відразу.

* Зображення IDR (миттєве оновлення оновлення) в H.264 - це зображення, яке складається лише з внутрішньо кодованих фрагментів і не вимагає розшифровки інших зображень. Декодер може розпочати декодування лише після отримання зображення IDR. Грубо кажучи, ви можете назвати це ключовим кадром, хоча технічно це не те саме.

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