LINUX.ORG.RU

Разыскивается решение для перекодирования видео в linux


0

1

В общем, есть задача пожать кино для нетбука с атомом вместо процессора. На входе мкв контейнер с сабами и парой звуковых дорожек, на выходе меньшее разрешение, более простой кодек, звук в каком-нить моно мп3 + теже сабы в томже мкв. То же самое если на входе аналогичный ави. Т.е. пожать из всяких разных источников и форматов в более менее однообразные облегченные версии не меняя исходный контейнер(ну или все в мкв складывать для единообразия).

Интересует наличие _готовых_ решений, ибо имхо задача распространенная и наверняка уже есть готовые обертки над менкодером/ффмпег с кучей пресетов, которым можно указать максимум нужный кодек/разрешение/размер и они все сделают.

★★★★

mencoder, ffmpeg

Например, так:

mencoder $1 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2000:autoaspect=1 -oac mp3lame -lameopts br=128 -o $1_.avi

Eddy_Em ☆☆☆☆☆
()

которым можно указать максимум нужный кодек/разрешение/размер и они все сделают

ffmpeg это и так может, зачем обёртка?

dinn ★★★★★
()
Ответ на: комментарий от Eddy_Em

Скорее всего да, даже встречаются такие велосипеды, сам видел :)
ИМХО скриптом проще и быстрее пользоваться будет даже домохозяйке.

v9lij ★★★★★
()
Ответ на: комментарий от Eddy_Em

Мне нужна утилита для автоматического конвертирования по крону без моего участия.

F457 ★★★★
() автор топика
Ответ на: комментарий от Lordwind

По беглому взгляду весьма похоже на то что надо. Спасибо.

F457 ★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

Подозреваю, что ТСу нужно что-нибудь с гуевиной.

Тогда Avidemux.

Pakostnik ★★★
()
Ответ на: комментарий от F457

Тогда ffmpeg. Я просто не помню, умеет ли mplayer в матрешку.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от livedock

Там можно набросать в гуе нужные параметры и получить/скопировать конечную команду, которой оно будет конвертировать?

F457 ★★★★
() автор топика
Ответ на: комментарий от F457

Оно меняет контейнер

А кто мешает перепаковать после?

AnDoR ★★★★★
()
Ответ на: комментарий от F457

Вроде есть подобное в этой проге, + опция прессеты. Мне нравится что в ней одной можно конвертировать видео, звук, док файлы, и там кажись все форматы.

livedock
()

HandBrake уже посоветовали? Тему не читал.

TuxR ★★★★
()

Я для таких же целей писал скрипт. Создаёшь каталоги done и inproc, видео кладёшь в inproc, запускаешь и идёшь пить чай. Через пять литров чая забираешь свои перекодированные файлы из done/

#!/usr/bin/php
<?php

    $inprocdir = 'inproc';
    $new_width = 720;
    $codec = 'libxvid';

    $list = scandir('inproc');

    foreach($list as $element){
        if ('.' == $element) continue;
        if ('..' == $element) continue;
        if ('recoded_' == substr($element, 0, strlen('recoded_'))) continue;
        $ext = substr($element, strrpos($element, '.'));

        if ($ext == '.mp4' || $ext == '.mkv' || $ext == '.avi' || $ext == '.ogv'){
            // ok
        }else{
            // it is not a video file
            continue;
        }

        echo "processing $element \n";
        $outname = 'recoded_'.substr($element, 0, strrpos($element, '.')).".mkv";

        unset($output);
        exec("ffprobe $inprocdir/".escapeshellarg($element)." 2>&1 | grep Video", $output);
        preg_match("|([0-9]+)x([0-9]+)|", $output[0], $match);

        $orig_width = intval($match[1]);
        $orig_height = intval($match[2]);

        $new_height = ($new_width / $orig_width) * $orig_height;
        $new_height = intval($new_height/16)*16;

        echo "converting size: ${orig_width}x${orig_height} -> ${new_width}x{$new_height}\n";

        unset($output);
        exec("ffprobe $inprocdir/".escapeshellarg($element)." 2>&1 | grep -c Audio", $output);
        $audio_streams_count = intval($output[0]);
        unset($output);
        exec("ffprobe $inprocdir/".escapeshellarg($element)." 2>&1 | grep -c Subtitle", $output);
        $subtitle_streams_count = intval($output[0]);
        unset($output);

        echo "$audio_streams_count audio stream(s)\n";
        echo "$subtitle_streams_count subtitle stream(s)\n";

        $ffmpeg_command = "ffmpeg -i $inprocdir/".escapeshellarg($element)." -vcodec $codec ";
        $ffmpeg_command .= ' -y ';
        $ffmpeg_command .= ' -s '.$new_width.'x'.$new_height;
        $ffmpeg_command .= ' -aspect '.$new_width.':'.$new_height;
        $ffmpeg_command .= ' -qscale 3 ';
        $ffmpeg_command .= ' -acodec copy ';
        if ($subtitle_streams_count > 0) 
	    $ffmpeg_command .= ' -scodec copy ';
        $ffmpeg_command .= $inprocdir.'/'.escapeshellarg($outname);


        for ($k = 1; $k < $audio_streams_count; $k ++)
            $ffmpeg_command .= ' -acodec copy -newaudio';
        for ($k = 1; $k < $subtitle_streams_count; $k ++)
            $ffmpeg_command .= ' -scodec copy -newsubtitle';


        echo $ffmpeg_command."\n";

        if (FALSE !== system($ffmpeg_command." 0</dev/null", $returnvar)){
            if ($returnvar == 0){
                system("mv $inprocdir/".escapeshellarg($outname)." done/".escapeshellarg($outname));
                system("mv $inprocdir/".escapeshellarg($element)." done/".escapeshellarg($element));
            }
        }


    }

    echo "\n";
i-rinat ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.