Передача Java в FFMPEG не работает и не выдает ошибкуJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Передача Java в FFMPEG не работает и не выдает ошибку

Сообщение Anonymous »

Я пишу загрузчик подкастов, в котором хочу иметь возможность загружать один или несколько подкастов, а затем запускать их через FFMPEG.
Он запускается, когда Я запускаю программу в Windows.

Она не запускается, когда я запускаю программу в Linux. Это означает, что FFMPEG мог быть вызван, а мог и не быть вызван. У меня нет возможности узнать. Я получаю -1 в ответ от процесса.waitfor(), но в моих журналах Java нет ошибок и вообще нет записей в файле ffmpeg.log. И в каталоге обработанных файлов нет файла, который мог бы создать FFMPEG.

Он запускается в Linux, если я запускаю ту же команду, которая завершается с ошибкой в ​​Java, из командной строки. .
FFMPEG имеет разрешения: rwxr-xr-x , поэтому не похоже, что это ошибка разрешения. Код Java выглядит так:

Код: Выделить всё

    ProcessBuilder processBuilder = new ProcessBuilder( commands );
processBuilder.redirectErrorStream( true );
//  Added the next line to see if I could log an error from ffmpeg
processBuilder.redirectOutput( ProcessBuilder.Redirect.appendTo( new File( "./ffmpeg.log" ) ) );

Process process = processBuilder.start();
BufferedReader bufferedOutputReader = new BufferedReader( new InputStreamReader( process.getInputStream() ) );
do {
outputString = bufferedOutputReader.readLine();
if ( outputString != null ) {
LOGGER.trace( outputString );
}
} while ( outputString != null );
results = process.waitFor();
LOGGER.debug( "Exit value: " + results );
Команды:

Код: Выделить всё

2023-10-25 16:21:52,452 224257 [pool-1-thread-4] DEBUG org.sperbolink.utils.CodecUtils - command string: /bin/ffmpeg
2023-10-25 16:21:52,452 224257 [pool-1-thread-4] DEBUG org.sperbolink.utils.CodecUtils - command string: -y
2023-10-25 16:21:52,452 224257 [pool-1-thread-4] DEBUG org.sperbolink.utils.CodecUtils - command string: -i
2023-10-25 16:21:52,452 224257 [pool-1-thread-4] DEBUG org.sperbolink.utils.CodecUtils - command string: "/home/todd/aggregator/incoming/Downrange Radio/Downrange_Radio_2023-02-15_The_Avidity_PD-10_Delivers_.mp3"
2023-10-25 16:21:52,452 224257 [pool-1-thread-4] DEBUG org.sperbolink.utils.CodecUtils - command string: -ac
2023-10-25 16:21:52,452 224257 [pool-1-thread-4] DEBUG org.sperbolink.utils.CodecUtils - command string: 1
2023-10-25 16:21:52,452 224257 [pool-1-thread-4] DEBUG org.sperbolink.utils.CodecUtils - command string: -af
2023-10-25 16:21:52,452 224257 [pool-1-thread-4] DEBUG org.sperbolink.utils.CodecUtils - command string: "atempo=1.4,volume=1.4"
2023-10-25 16:21:52,452 224257 [pool-1-thread-4] DEBUG org.sperbolink.utils.CodecUtils - command string: "/home/todd/aggregator/processed/Downrange Radio/Downrange_Radio_2023-02-15_The_Avidity_PD-10_Delivers_.mp3"
И созданная и запущенная вручную командная строка, которая ДЕЙСТВИТЕЛЬНО работает:

Код: Выделить всё

/bin/ffmpeg -y -i "/home/todd/aggregator/incoming/Downrange Radio/Downrange_Radio_2023-02-15_The_Avidity_PD-10_Delivers_.mp3" -ac 1 -af "atempo=1.4,volume=1.4" "/home/todd/aggregator/processed/Downrange Radio/Downrange_Radio_2023-02-15_The_Avidity_PD-10_Delivers_.mp3"
Файл ffmpeg.log пуст, поэтому я сомневаюсь, что FFMPEG когда-либо будет достигнут.
Что я делаю не так?
Файл ffmpeg.log пуст, поэтому я сомневаюсь, что FFMPEG когда-либо будет достигнут.
Что я делаю не так?
Файл ffmpeg.log пуст, поэтому я сомневаюсь, что FFMPEG когда-либо будет достигнут.
Что я делаю не так?
Файл ffmpeg.log пуст, поэтому я сомневаюсь, что FFMPEG когда-либо будет достигнут.
Что я делаю неправильно?
Файл ffmpeg.log пуст, поэтому я сомневаюсь, что FFMPEG когда-либо будет достигнут.
Что я делаю неправильно?
Файл ffmpeg.log пуст, поэтому я сомневаюсь, что FFMPEG когда-либо будет достигнут.
Что я делаю неправильно? p>
РЕДАКТИРОВАТЬ:
Я изменил команды на

Код: Выделить всё

"/bin/ffmpeg 2> foo.txt"
и код выполнения:

Код: Выделить всё

    ProcessBuilder processBuilder = new ProcessBuilder( commands );
//        processBuilder.redirectErrorStream( true );
//  Added the next line to see if I could log an error from ffmpeg
//        processBuilder.redirectOutput( ProcessBuilder.Redirect.appendTo( new File( "./ffmpeg.log" ) ) );
Process process = processBuilder.start();
results = process.waitFor();
При запуске этой команды из командной строки отображается список команд MMPEG, которые можно запустить в файле foo.txt. При запуске из приложения Java файл foo.txt оказывается пустым, поэтому не похоже, что FFMPEG когда-либо будет достигнут. Но я понятия не имею, почему бы и нет.
РЕДАКТИРОВАНИЕ 2:
Я преобразовал путь /bin/ffmpeg в верхний регистр, чтобы посмотреть, вернется ли он ошибка, и это произошло.

Код: Выделить всё

ERROR org.mrpc.utilities.ShellUtils - Cannot run program "/BIN/FFMPEG": error=2, No such file or directory
Похоже, это подтверждает, что объект Java Process может успешно найти ffmpeg, если он правильно оформлен (т. е. мой исходный код), поскольку я не вижу сообщения об ошибке, если регистр неверен. До сих пор не знаю, почему ничего не происходит при его вызове.
РЕДАКТИРОВАТЬ 3:
Я говорил об этом год назад, но недавно пришлось вернуться к нему. На этот раз я нашел ответ. Это потому, что я заключил некоторые параметры команды в двойные кавычки. Из-за этого файлы не были найдены. В этой ссылке указано, что класс Process обрабатывает встроенные пробелы без какого-либо вашего вмешательства: ProcessBuilder добавляет дополнительные кавычки в командную строку

Подробнее здесь: https://stackoverflow.com/questions/773 ... ving-error
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»