Ответ 1
Я не тестировал это, но должен быть таким или очень близким.
wget [URL] | ffmpeg -i pipe:0 -vcodec mpeg4 -s qcif -f m4v -y output.flv
Моя цель - использовать wget для загрузки FLV файла и передать вывод в ffmpeg, чтобы преобразовать его в MP3. Таким образом, пользователь может загрузить MP3, не дожидаясь загрузки FLV на мой сервер. Я играл с ним, и кажется, что ffmpeg может делать только каналы на необработанном видео. Поэтому я работал с чем-то вроде этого:
wget -O - 'videoinput.flv' | ffmpeg -y -i - -vcodec rawvideo -f yuv4mpegpipe - | ffmpeg -y -i - -ab 128k audiooutput.mp3
У кого-нибудь есть опыт работы с этим типом процесса кодирования ffmpeg на лету?
Я не тестировал это, но должен быть таким или очень близким.
wget [URL] | ffmpeg -i pipe:0 -vcodec mpeg4 -s qcif -f m4v -y output.flv
"ffmpeg может выполнять только каналы на необработанном видео" < - Это не так.
Вы можете вставлять/выводить любые поддерживаемые форматы ffmpeg.
И в примере с командной строкой вы извлекаете необработанное видео из FLV и кодируете в MP3. Это никогда не может быть сделано так.
Часть проблемы, с которой вы столкнетесь, заключается в том, что некоторые форматы файлов содержат важную информацию о контейнере в конце файла. Таким образом, вызов wget напрямую в ffmpeg является потенциальным прерывателем файла, так как ffmpeg может задохнуться, прежде чем файл будет полностью загружен.
Вам лучше посмотреть на ряд команд: wget'ing файл, а затем запустить ffmpeg на нем. Он игнорирует возможности канала, но проблема связана с некоторыми файлами.
Кроме того, я хотел бы взглянуть на этот ответ на часто задаваемый вопрос с сайта FFMPEG относительно одного набора методов при использовании видеороликов с использованием mkfifo и конкатенации FLV: http://www.ffmpeg.org/faq.html#TOC27
Потенциально лучший вариант для конвейера от отдельного HTTP-клиента - использовать встроенный ffmpeg. По крайней мере, более новые версии могут принимать URL-адрес в качестве аргумента входного файла. Таким образом, FFmpeg может вытащить файл сам по себе, а для форматов, имеющих данные контейнера, в конце файла, он может (если сервер поддерживает его) сначала захватить эту часть файла, в отличие от трубопровода от curl или wget, который извлекает файл последовательно. См. http://ffmpeg.org/ffmpeg-all.html#http