1 (2020.11.18 20:17:23 отредактировано andrewbeats)

Тема: ffprobe

Всем привет!
Помогите с кодом

<?php

$ffprobe = 'путь к ffprobe';
$videoFile = 'http://cdn.streambox.in/pd/kinopub/aWQ9ODIxMzUwOzE2MDU2MDE2ODE7NzQ0MzA4MjsxNjA1NzE2MTI4Jmg9S1NRYjkwTFdXbnRUSTBpYTFBbXd0dyZlPTE2MDU4MDI1Mjg/c/62/HipmvwdnSbMfvnrnV.mp4';
$cmd = shell_exec($ffprobe .' -v quiet -show_format -show_streams -show_programs -show_chapters -show_private_data -print_format json  "'.$videoFile.'"');
$parsed = json_decode($cmd, true);
// print_r($parsed);

// Получаем кодек
echo "Кодек: ";
$codec = $parsed[streams][0][codec_name];
$codec = str_replace("h264", "H.264", $codec);
$codec = str_replace("hevc", "H.265 / HEVC", $codec);
$codec = str_replace("h265", "H.265 / HEVC", $codec);
print_r($codec);

// Получаем HDR

$hdr = $parsed[streams][0][profile];
$hdr = str_replace("Main 10", ' /<span style="color: #159ff6"> HDR</span>', $hdr);
$hdr = str_replace("High", "", $hdr);

print_r($hdr);
echo '<br />';

// Получаем Разрешение видео
echo "Разрешение видео: ";
print_r($parsed[streams][0][width]);
echo "x";
print_r($parsed[streams][0][height]);
echo '<br />';

// Получаем Размер файла
function get_size( $bytes )
{
if ( $bytes < 1000 * 1024 ) {
    return number_format( $bytes / 1024, 2 ) . " KB";
}
    elseif ( $bytes < 1000 * 1048576 ) {
        return number_format( $bytes / 1048576, 2 ) . " MB";
}
 elseif ( $bytes < 1000 * 1073741824 ) {
  return number_format( $bytes / 1073741824, 2 ) . " GB";
  }
 else {
  return number_format( $bytes / 1099511627776, 2 ) . " TB";
  }
 }
echo "Размер: ";
echo get_size( $parsed[format][size] );
echo '<br />';


// Получаем Битрейт файла
function get_bitrate( $bitrate )
{
if ( $bitrate < 1000 * 1024 ) {
    return number_format( $bitrate / 1024, 2 ) . " mb/s";
}
    elseif ( $bitrate < 1000 * 1048576 ) {
        return number_format( $bitrate / 1048576, 2 ) . " mb/s";
}
 elseif ( $bitrate < 1000 * 1073741824 ) {
  return number_format( $bitrate / 1073741824, 2 ) . " mb/s";
  }
 else {
  return number_format( $bitrate / 1099511627776, 2 ) . " mb/s";
  }
 }
echo "Битрейт: ";
echo get_bitrate( $parsed[format][bit_rate] );
echo '<br />';


// Получаем Длительность видео
$time = $parsed[format][duration];
echo "Продолжительность: ";
echo $hours = floor($time/3600);
echo ":";
echo floor($minutes = ($time/3600 - $hours)*60);
echo ":";
echo $seconds = ceil(($minutes - floor($minutes))*60);


// Получаем звуковые дорожки
foreach ($parsed as $key) {
    // Кбираем первый элемент из массива
    unset($key[0]);

    foreach ($key as $key2) {
        echo "<pre>";

        print_r($key2[index]);
        echo ". ";
        print_r($key2[streams][title]);
        echo " ";
        print_r($key2[codec_name]);
        echo " ";
        print_r($key2[channel_layout]);
        echo " ";
        print_r($key2[tags][language]);
        echo "</pre>";
    }

}


// echo "<pre>";
// print_r($parsed);
// echo "</pre>";

Вот что выводится

Кодек: H.264
Разрешение видео: 3840x1600
Размер: 23.31 GB
Битрейт: 23.57 mb/s
Продолжительность: 2:15:4
1.  aac 5.1 rus
2.  aac 5.1 rus
3.  aac 5.1 rus
4.  aac 5.1 rus
5.  aac 5.1 rus
6.  aac 5.1 rus
7.  aac stereo ukr
8.  aac stereo ukr
9.  aac stereo ukr
10.  aac 5.1 eng
11.  ac3 5.1(side) rus
h. h h h h
.    
.    
m. m m m m
Q. Q Q Q Q
0. 0 0 0 0
8. 8 8 8 8
2. 2 2 2 2
2. 2 2 2 2
.    
.    

Нужно чтобы отображались только звуковые дорожки
То есть после

11.  ac3 5.1(side) rus

все удалить

2

Re: ffprobe

andrewbeats пишет:

Всем привет!
Помогите с кодом

<?php

$ffprobe = 'путь к ffprobe';
$videoFile = 'http://cdn.streambox.in/pd/kinopub/aWQ9ODIxMzUwOzE2MDU2MDE2ODE7NzQ0MzA4MjsxNjA1NzE2MTI4Jmg9S1NRYjkwTFdXbnRUSTBpYTFBbXd0dyZlPTE2MDU4MDI1Mjg/c/62/HipmvwdnSbMfvnrnV.mp4';
$cmd = shell_exec($ffprobe .' -v quiet -show_format -show_streams -show_programs -show_chapters -show_private_data -print_format json  "'.$videoFile.'"');
$parsed = json_decode($cmd, true);
// print_r($parsed);

// Получаем кодек
echo "Кодек: ";
$codec = $parsed[streams][0][codec_name];
$codec = str_replace("h264", "H.264", $codec);
$codec = str_replace("hevc", "H.265 / HEVC", $codec);
$codec = str_replace("h265", "H.265 / HEVC", $codec);
print_r($codec);

// Получаем HDR

$hdr = $parsed[streams][0][profile];
$hdr = str_replace("Main 10", ' /<span style="color: #159ff6"> HDR</span>', $hdr);
$hdr = str_replace("High", "", $hdr);

print_r($hdr);
echo '<br />';

// Получаем Разрешение видео
echo "Разрешение видео: ";
print_r($parsed[streams][0][width]);
echo "x";
print_r($parsed[streams][0][height]);
echo '<br />';

// Получаем Размер файла
function get_size( $bytes )
{
if ( $bytes < 1000 * 1024 ) {
    return number_format( $bytes / 1024, 2 ) . " KB";
}
    elseif ( $bytes < 1000 * 1048576 ) {
        return number_format( $bytes / 1048576, 2 ) . " MB";
}
 elseif ( $bytes < 1000 * 1073741824 ) {
  return number_format( $bytes / 1073741824, 2 ) . " GB";
  }
 else {
  return number_format( $bytes / 1099511627776, 2 ) . " TB";
  }
 }
echo "Размер: ";
echo get_size( $parsed[format][size] );
echo '<br />';


// Получаем Битрейт файла
function get_bitrate( $bitrate )
{
if ( $bitrate < 1000 * 1024 ) {
    return number_format( $bitrate / 1024, 2 ) . " mb/s";
}
    elseif ( $bitrate < 1000 * 1048576 ) {
        return number_format( $bitrate / 1048576, 2 ) . " mb/s";
}
 elseif ( $bitrate < 1000 * 1073741824 ) {
  return number_format( $bitrate / 1073741824, 2 ) . " mb/s";
  }
 else {
  return number_format( $bitrate / 1099511627776, 2 ) . " mb/s";
  }
 }
echo "Битрейт: ";
echo get_bitrate( $parsed[format][bit_rate] );
echo '<br />';


// Получаем Длительность видео
$time = $parsed[format][duration];
echo "Продолжительность: ";
echo $hours = floor($time/3600);
echo ":";
echo floor($minutes = ($time/3600 - $hours)*60);
echo ":";
echo $seconds = ceil(($minutes - floor($minutes))*60);


// Получаем звуковые дорожки
foreach ($parsed as $key) {
    // Кбираем первый элемент из массива
    unset($key[0]);

    foreach ($key as $key2) {
        echo "<pre>";

        print_r($key2[index]);
        echo ". ";
        print_r($key2[streams][title]);
        echo " ";
        print_r($key2[codec_name]);
        echo " ";
        print_r($key2[channel_layout]);
        echo " ";
        print_r($key2[tags][language]);
        echo "</pre>";
    }

}


// echo "<pre>";
// print_r($parsed);
// echo "</pre>";

Вот что выводится

Кодек: H.264
Разрешение видео: 3840x1600
Размер: 23.31 GB
Битрейт: 23.57 mb/s
Продолжительность: 2:15:4
1.  aac 5.1 rus
2.  aac 5.1 rus
3.  aac 5.1 rus
4.  aac 5.1 rus
5.  aac 5.1 rus
6.  aac 5.1 rus
7.  aac stereo ukr
8.  aac stereo ukr
9.  aac stereo ukr
10.  aac 5.1 eng
11.  ac3 5.1(side) rus
h. h h h h
.    
.    
m. m m m m
Q. Q Q Q Q
0. 0 0 0 0
8. 8 8 8 8
2. 2 2 2 2
2. 2 2 2 2
.    
.    

Нужно чтобы отображались только звуковые дорожки
То есть после

11.  ac3 5.1(side) rus

все удалить

Ну если данный момент (ac3 5.1(side) rus) во всех случаях появляется  то можно попробовать так
в данном месте

 foreach ($key as $key2) { 

сразу после этого кода foreach ($key as $key2) {
ставим

$key2[tags][language] = preg_replace('#ac3\s*5\.1\(side\)\s*rus.*#','',$key2[tags][language]);

3 (2020.11.21 01:25:35 отредактировано andrewbeats)

Re: ffprobe

na-socke.tk пишет:

все удалить

Ну если данный момент (ac3 5.1(side) rus) во всех случаях появляется  то можно попробовать так
в данном месте

 foreach ($key as $key2) { 

сразу после этого кода foreach ($key as $key2) {
ставим

$key2[tags][language] = preg_replace('#ac3\s*5\.1\(side\)\s*rus.*#','',$key2[tags][language]);

Не во всех. Может быть одна звуковая дорожка

4

Re: ffprobe

Или может есть у кого скрипт на php для вытягивания подобной инфы:
HDR,
Кодек,
Разрешение видео,
Размер,
Битрейт,
Продолжительность

5 (2020.11.25 16:05:35 отредактировано na-socke.tk)

Re: ffprobe

andrewbeats пишет:

Или может есть у кого скрипт на php для вытягивания подобной инфы:
HDR,
Кодек,
Разрешение видео,
Размер,
Битрейт,
Продолжительность

Можете попробовать данную бибилиотеку, https://github.com/JamesHeinrich/getID3
скачиваете её.

Далее для вывода всей информации о видео-файле используете примерно такой код

<?php 
require_once('getid3/getid3.php');# Путь к библиотеке

$filename='test.mp4';# Путь к Вашему видео-файле
$getID3 = new getID3; 
$file = $getID3->analyze($filename); 
print_r($file);

?>

По дальнейшему выводу на экран можно отыскать нужные места и вставить их в код, к примеру за время будет отвечать данный момент

echo $file['playtime_string'];

За битрейт данный момент

echo $file['bitrate'];

Ну и так далее.

p/s данный метод работает с файлами сохраненными на Пк.