Как мне использовать трубопровод с ffmpeg? - PullRequest
15 голосов
/ 29 декабря 2010

Моя цель - использовать 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 на лету?

Ответы [ 4 ]

15 голосов
/ 21 августа 2011

Я не проверял это, но должно быть так или очень близко.

wget [URL] | ffmpeg -i pipe:0 -vcodec mpeg4 -s qcif -f m4v -y output.flv
3 голосов
/ 03 января 2011

Частично проблема, с которой вы столкнетесь, заключается в том, что некоторые форматы файлов содержат важную информацию о контейнере файла в конце файла.Таким образом, передача вызова wget напрямую в ffmpeg - это потенциальный прерыватель файла, так как ffmpeg может задохнуться до полной загрузки файла.

Вам лучше взглянуть на серию команд: wget'ing файл, а затем запускffmpeg на это.Он игнорирует возможности конвейера, но это проблема, с которой вы сталкиваетесь при работе с определенными файлами.

Кроме того, я хотел бы взглянуть на этот ответ на часто задаваемые вопросы с сайта FFMPEG, касающийся одного набора методов при передаче видео с использованием mkfifo и объединения FLV: http://www.ffmpeg.org/faq.html#TOC27

2 голосов
/ 26 января 2016

Потенциально лучшим вариантом передачи по трубопроводу из отдельного HTTP-клиента является использование встроенного в ffmpeg.По крайней мере, более новые версии могут принимать URL в качестве аргумента входного файла.Таким образом, FFmpeg может извлекать файл сам по себе, а для форматов, в которых контейнерные данные располагаются ближе к концу файла, он может (если сервер поддерживает это) сначала захватывать эту часть файла, в отличие от передачи из curl или wget, которая выбираетфайл последовательно.Смотри http://ffmpeg.org/ffmpeg-all.html#http

2 голосов
/ 31 декабря 2010

"ffmpeg может выполнять передачу только по необработанному видео" <- Это не так. </p>

Вы можете передавать / выводить любой формат, поддерживаемый ffmpeg.

И в вашем примере командной строки вы извлекаете необработанное видео из FLV и кодируете в MP3. Это никогда не может быть сделано так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...