Чи можу я прискорити потік VLC для швидшого створення файлів?


1

Я хочу розділити довгий 50-хвилинний відеофайл на дві 25-хвилинні частини. Я нарешті дізнався, як потік одного відео файлу в інший відео файл через командний рядок завдяки http://www.videolan.org/doc/streaming-howto/en/ch03.html і http://www.videolan.org/doc/streaming-howto/en/ch04.html docs.

Ось термінальна команда, яку я використав для досягнення цієї мети:

vlc original_video.mp4 --start-time 0 --stop-time 1500 --sout "#standard{access=file,mux=ts,dst=/home/max/Desktop/video_A.mp4}"

Єдина проблема в тому, що здається, що VLC просто сидить там, де потоково original_video.mp4 в video-A.mp4. Я зупинив його через 5 хвилин і побачив це video_A.mp4 тривало лише 5 хвилин.

Чи є спосіб прискорити цей процес?


Ви відкриті для інших варіантів, крім VLC? Я знаю, що ffmpeg може робити те, що ви намагаєтеся зробити (тому що я це зробив сам), і він повинен бути навіть без втрат.
evilsoup

Звичайно, я відкритий до нього. Я тільки що встановив ffmpeg на Ubuntu, хоча, коли я намагаюся використовувати його в терміналі, він каже мені використовувати avconv замість цього. Чи можете ви сказати мені, як розділити мій великий відео файл?
max

Відповіді:


0

Я б використав ffmpeg 's сегмент мультиплікатора (прокрутіть униз за цим посиланням для деяких прикладів). В основному:

ffmpeg -i input.mp4 -c copy -f segment -segment_times 1500 output%02d.mp4

Це дозволить створити два файли, "output01.mp4" і "output02.mp4". Якщо ви будете використовувати output%03d.mp4, замість цього ви отримаєте 'output001.mp4' і 'output002.mp4'.

-segment_times закликає до списку розділених комами списку точок, виміряних у секундах. Оскільки ви хочете розділити тільки один раз, через 25 хвилин, просто використовуйте 1500 (= 25 * 60). Зверніть увагу на це -segment_time (без 's') це повністю окрема опція - ви повинні використовувати це, якщо ви хочете розділити файл кожні п'ять секунд (наприклад), не вкладаючи великий список кожного конкретного часу.

Ви можете виявити, що потрібно використовувати -reset_timestamps 1 для правильного відтворення файлів:

ffmpeg -i input.mp4 -c copy -f segment -segment_times 1500 -reset_timestamps 1 output%02d.mp4

На сторінці документації є багато інших варіантів. Це має бути досить швидким і без втрат (таким чином ви отримаєте ідентичне відео без додаткових відео артефактів). Однак це не буде на 100% точним, оскільки ffmpeg потрібно розділити на ключовий кадр , які не можуть бути гарантовані без повторного кодування.

Якщо Вам потрібна точна розбивка, в документації рекомендується повторне кодування і використання -force_key_frames і -segment_time_delta Варіанти для забезпечення того, що буде I-кадри на час, коли сегмент мультиплікатора спробує розділити на (див. також libx264 і AAC довідники кодування на ffmpeg wiki ):

ffmpeg -i input.mp4 -c:v libx264 -crf 22 -preset veryfast -c:a libfdk_aac -vbr 3 \
-force_key_frames 1500 -f segment -segment_times 1500 -segment_time_delta 0.05 output%02d.mp4

Версія ffmpeg у більшості репозиторіїв Linux буде досить старою, а у випадку Debian та Ubuntu та ін. Ситуація ще гірша: вони не надають ffmpeg, а радше avconv, з команди libav (Дивіться також Відповідь LordNeckbeard тут ). AVconv - це прекрасний інструмент самостійно, але я не можу гарантувати, що синтаксис ffmpeg буде працювати з ним 100% часу, особливо з "розширеними" матеріалами, як це.

Я б також порекомендував захоплення статичної збірки з сторінки завантажень ffmpeg або самостійно компілювати . Основною перевагою самого компіляції є те, що ви можете отримати доступ до нього libfdk_aac, найкращий аудіокодер AAC, який може використовувати ffmpeg - який не може бути легально розповсюджений у скомпільованому двійковому файлі ffmpeg, через конфлікти ліцензування (fdk_aac використовує спеціальну ліцензію на copyleft, яка не зовсім сумісна з GPL ffmpeg).


Хм, спасибі, але я отримую помилку Unrecognized option 'segment_times' коли я намагаюся ffmpeg -i file.mp4 -c copy -f segment -segment_times 1500 output%02d.mp4 і коли я зміню його -segment_time Я отримую цю помилку Output file #0 does not contain any stream
max
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.