Здравствуйте, cppguard, Вы писали:
S>>Или же что исходное условие было сформулировано так, что трактуется неоднозначно.
C>Нет, всё не так. Для примера выше должно быть три выходных файла. Разные отрезки логически между собой никак не связаны.
Так а как тогда должно интерпретироваться вот это условие:
Временной отрезок может включать конец одного исходного видео и начало другого. Программа должна корректно это обрабатывать.
?
Типа конец файла A.mp4 объединять с началом файла B.mp4 в один клип если это необходимо?
Или если достигнут конец файла A.mp4, то текущий клип нужно завершать, а начало файла B.mp4 сбрасывать уже в следующий клип?
Здравствуйте, so5team, Вы писали:
S>Типа конец файла A.mp4 объединять с началом файла B.mp4 в один клип если это необходимо?
Именно так. А как ещё можно понять это требование? Есть регистратор, он непрерывно пишет порциями по N минут, нам интересно вытащить клип в на отрезке времени [a, b]. Очевидно, что этот отрезок может попадать на стык двух порций.
S>>Тем не менее, выбранная вами для работы moviepy делает именно это -- запускает бинарник ffmpeg и читает бинарные данные с его стандартного вывода (формирование командной строки, запуск, чтение). C>Отлично, это непринципиально. Главное, что идёт правильное декодирование видео, а не просто вырезается кусок данных.
Еще как принципиально. Этот "нюанс" все меняет в корне дела. Более того, вы сами с упорством всем тут доказывали, что так как вы в итоге сделали — делать ни в коем случае нельзя. А потом: фиииии, вот дурачки, можно же было простым образом за два часа сделать. Ну так вам и предлагали с самого начала такое решение.
Здравствуйте, DiPaolo, Вы писали:
DP>Еще как принципиально. Этот "нюанс" все меняет в корне дела. Более того, вы сами с упорством всем тут доказывали, что так как вы в итоге сделали — делать ни в коем случае нельзя. А потом: фиииии, вот дурачки, можно же было простым образом за два часа сделать. Ну так вам и предлагали с самого начала такое решение.
В ffmpeg есть ключик "-s" (кажется, лень проверять), который тупо копирует кусок видео по заданному временному отрезку. Не декодирует, а именно копирует. Я не знаю, зачем этот режим вообще добавили, но минус такого решения — если временной отрезок попадает между двух ключевых кадров, то кусок видео до ключевого кадра от начала вырезанного клипа будет "жёванным". И именно это решение находится на первой странице поиска гугла. Поэтому я предположил, что потенциальные исполнители перед тем, как сделать отклик, загуглять "ffmpeg extract segment", увидят вот этот хромой способ и подумают, что это лёгкие деньги. И хотел как-то донести, что меня этот способ не устраивает. Вероятно, правильно было бы таки расписать подробно, что такой ключ в программе есть, но пользоваться им нельзя. Так что да — с вашей стороны выглядит, словно я поменял ТЗ на ходу, с моей стороны — способ уберечься от проходимцев.
C>В ffmpeg есть ключик "-s" (кажется, лень проверять), который тупо копирует кусок видео по заданному временному отрезку. Не декодирует, а именно копирует. Я не знаю, зачем этот режим вообще добавили, но минус такого решения — если временной отрезок попадает между двух ключевых кадров, то кусок видео до ключевого кадра от начала вырезанного клипа будет "жёванным". И именно это решение находится на первой странице поиска гугла. Поэтому я предположил, что потенциальные исполнители перед тем, как сделать отклик, загуглять "ffmpeg extract segment", увидят вот этот хромой способ и подумают, что это лёгкие деньги. И хотел как-то донести, что меня этот способ не устраивает. Вероятно, правильно было бы таки расписать подробно, что такой ключ в программе есть, но пользоваться им нельзя. Так что да — с вашей стороны выглядит, словно я поменял ТЗ на ходу, с моей стороны — способ уберечься от проходимцев.
Все попереврали.
— параметр -ss все вырезает как надо:
The input will be parsed using keyframes, which is very fast. As of FFmpeg 2.1, when transcoding with ffmpeg (i.e. not stream copying), -ss is now also "frame-accurate" even when used as an input option.
...
This approach uses keyframes to seek until 00:22:30, and then seeks frame-by-frame until it reaches 00:23:00 (00:22:30 + 00:00:30)
Вы же за фидбэком сюда пришли. Вам уже несколько человек сказали, как ваше задание и поведение выглядит со стороны для других людей. Может уже стоит признать, что ваше задание было непонтяным для других, а не зарываться все глубже в отмазки? Выглядит смешно и непрофессионально.
Чтобы подобных казусов не было, рекомендую вам просто писать ЧТО вы хотите, а не КАК вам надо сделать. Ну просто не выежываться, а написать как клиент. А если уж сами все понимаете — ну так делайте сами и мозги никому не грейте.
– Степан, у гостя карета сломалась…
– Вижу, барин. Ось полетела, да спицы менять надо.
– Починить сможешь?
– За день сделаю.
– А за два? Степан глянул на барина, перевел взгляд на карету:
– Можно и за два.
– А за пять?. Степан задумчиво почесал в затылке:
– Трудновато, барин. Но ежели постараться, можно и за пять…
– А за десять дней? Степан аж крякнул:
– Ну, барин, тут тогда самому не справиться. Помощник нужен. Хомо сапиенс!
Здравствуйте, cppguard, Вы писали:
S>>Типа конец файла A.mp4 объединять с началом файла B.mp4 в один клип если это необходимо?
C>Именно так. А как ещё можно понять это требование?
Вам тут уже озвучили три интерпретации ваших слов:
— если под "конец одного исходного видео и начало другого" понимаются именно исходные файлы с регистратора, то:
a) корректным может быть обрезание клипа при окончании файла A.mp4 и начало нового клипа, куда будут записываться данные из начала B.mp4;
b) корректным может быть включение в клип окончания файла A.mp4 и начало файла B.mp4.
Некорректной же обработкой будет, например, продолжение клипа при окончании файла A.mp4, но "добивание" его пустотой (т.е. черный фон для видео и тишина для аудио).
— если под "конец одного исходного видео и начало другого" понимаются результирующие файлы-клипы (а так тоже можно воспринять ваши слова), то при наличии пересечений в отрезках формировать меньше клипов, объединяя пересекающиеся отрезки в один клип. Или даже делать больше клипов формируя их так, чтобы пересечений не было вообще.
C>Есть регистратор, он непрерывно пишет порциями по N минут, нам интересно вытащить клип в на отрезке времени [a, b]. Очевидно, что этот отрезок может попадать на стык двух порций.
Вы, походу, не в курсе одного из главных постулатов коммуникации между людьми: все, что может быть воспринято неправильно, будет воспринято неправильно.
Это и при очном общении, когда задача выдается устно и видна реакция исполнителя, проявляется.
А уж в письменном-то виде, так вообще сплошь и рядом.
И для меня загадка почему вместо фразы:
Временной отрезок может включать конец одного исходного видео и начало другого. Программа должна корректно это обрабатывать.
вы не написали что-то вроде:
Во временной отрезок может попадать конец одного исходного видео-файла и начало следующего видео-файла. В этом случае должен быть сформирован клип, содержащий видео фрагменты из обоих файлов.
Причем тут еще бы нужно озвучить поведение при:
— попадании такой ситуации на границу суток (нужно ли брать следующий файл из каталога с видео записями следующего дня);
— отсутствия следующего файла;
— ситуации, когда в следующем файле параметры видео/аудио не совпадают с текущим файлом (например, текущий файл был видео HD-качества и аудио 16bit/44.1kHz, следующий файл оказался с видео FullHD и аудио 24bit/48kHz). Скорее всего такого быть не должно, но автору нужно понимать граничные условия.
Здравствуйте, DiPaolo, Вы писали:
DP>Все попереврали.
stream copying <- вот об этом я говорил. Это мне НЕ нужно было.
DP>Вы же за фидбэком сюда пришли. Вам уже несколько человек сказали, как ваше задание и поведение выглядит со стороны для других людей. Может уже стоит признать, что ваше задание было непонтяным для других, а не зарываться все глубже в отмазки? Выглядит смешно и непрофессионально.
Возможно. Но я не вижу, что я где-то отмазываюсь? От чего вообще тут можно отмазываться? Я никого не обвиняю, меня никто не обвиняет (кроме тупых набросов). Я задался целью выяснить, почему я с полпинка не могу найти фрилансеров. Считаю, что примерно выяснил, почему.
DP>Чтобы подобных казусов не было, рекомендую вам просто писать ЧТО вы хотите, а не КАК вам надо сделать. Ну просто не выежываться, а написать как клиент. А если уж сами все понимаете — ну так делайте сами и мозги никому не грейте.
Здравствуйте, IID, Вы писали:
IID>Озвучьте же это знание!
В 2012-ом, когда я впервые вышел на фриланс, рынок был другим. Я сам выяснял, что нужно заказчику, и предлагал возможные варианты решений. Сейчас, чтобы не вылететь в трубу и не платить сотни тысяч, за простенький скрипт, заказчику требуется основательно подойти к описанию ТЗ. Но это только догадки. Вероятно, что на международном рынке фриланса всё так же можно за недорого найти исполнителя, который сам по словесному описанию составит ТЗ и быстро всё сделает, но для этого нужно мутить с виртуальной валютной картой. Пока что ChatGPT является приемлемой альтернативой.
Здравствуйте, cppguard, Вы писали:
C>В 2012-ом, когда я впервые вышел на фриланс, рынок был другим. Я сам выяснял, что нужно заказчику, и предлагал возможные варианты решений. Сейчас, чтобы не вылететь в трубу и не платить сотни тысяч, за простенький скрипт, заказчику требуется основательно подойти к описанию ТЗ. Но это только догадки. Вероятно, что на международном рынке фриланса всё так же можно за недорого найти исполнителя, который сам по словесному описанию составит ТЗ и быстро всё сделает, но для этого нужно мутить с виртуальной валютной картой. Пока что ChatGPT является приемлемой альтернативой.
Ничего ты так и не понял...