Recherche avancée

Médias (1)

Mot : - Tags -/censure

Autres articles (105)

  • HTML5 audio and video support

    13 avril 2011, par

    MediaSPIP uses HTML5 video and audio tags to play multimedia files, taking advantage of the latest W3C innovations supported by modern browsers.
    The MediaSPIP player used has been created specifically for MediaSPIP and can be easily adapted to fit in with a specific theme.
    For older browsers the Flowplayer flash fallback is used.
    MediaSPIP allows for media playback on major mobile platforms with the above (...)

  • Support audio et vidéo HTML5

    10 avril 2011

    MediaSPIP utilise les balises HTML5 video et audio pour la lecture de documents multimedia en profitant des dernières innovations du W3C supportées par les navigateurs modernes.
    Pour les navigateurs plus anciens, le lecteur flash Flowplayer est utilisé.
    Le lecteur HTML5 utilisé a été spécifiquement créé pour MediaSPIP : il est complètement modifiable graphiquement pour correspondre à un thème choisi.
    Ces technologies permettent de distribuer vidéo et son à la fois sur des ordinateurs conventionnels (...)

  • Gestion de la ferme

    2 mars 2010, par

    La ferme est gérée dans son ensemble par des "super admins".
    Certains réglages peuvent être fais afin de réguler les besoins des différents canaux.
    Dans un premier temps il utilise le plugin "Gestion de mutualisation"

Sur d’autres sites (11391)

  • How to set crontab in order to run multiple python and a shell scripts ?

    5 janvier 2021, par Alexander Mitsou

    I need to start three python3 scripts and a shell script using crontab. These scripts should run at the same time without any delay. Each script runs exactly for one minute. For instance I have scheduled crontab to run these scripts every 5 minutes.

    


    My problem is that, if I attempt to run each script individually from terminal it executes with no further errors, but using crontab nothing happens.

    


    DISCLAIMER : If I set up the Python3 scripts individually in crontab, they work fine !

    


    Here's my crontab set up :

    


    */5 * * * * cd /home/user/Desktop/ && /usr/bin/python3 script1.py >> report1.log

*/5 * * * * cd /home/user/Desktop/ && /usr/bin/python3 script2.py >> report2.log

*/5 * * * * cd /home/user/Desktop/ && /usr/bin/python3 script3.py >> report3.log

*/5 * * * * cd /home/user/Desktop/ && /usr/bin/sh script4.sh >> report4.log 


    


    In addition I need to mention that the shell script contains this command (FFMPEG) :

    


    #!/bin/bash

parent_dir=`dirname \`pwd\`` 
folder_name="/Data/Webcam" 
new_path=$parent_dir$folder_name  


if [ -d "$new_path" ]; then
    echo "video_audio folder exists..."
else
    echo "Creating video_audio folder in the current directory..."
    mkdir -p -- "$new_path"
    sudo chmod 777 "$new_path"
    echo "Folder created"
    echo
fi

now=$(date +%F) 
now="$( echo -e "$now" | tr  '-' '_'  )"
sub_dir=$new_path'/'$now 

if [ -d "$sub_dir" ]; then
    echo "Date Sub-directory exists..."
    echo
else
    echo "Error: ${sub_dir} not found..."
    echo "Creating date sub-directory..."
    mkdir -p -- "$sub_dir"
    sudo chmod 777 "$sub_dir"
    echo "Date sub-directory created..."
    echo
fi

fname=$(date +%H_%M_%S)".avi"
video_dir=$sub_dir'/'$fname
ffmpeg -f pulse -ac 1 -i default -f v4l2 -i  /dev/video0 -vcodec libx264 -t 00:01:00 $video_dir 


    


    The log file of that script contain the following :

    


    video_audio folder exists...
Date Sub-directory exists...

Package ffmpeg is already installed...
Package v4l-utils is already installed...

Package: ffmpeg
Status: install ok installed
Priority: optional
Section: video
Installed-Size: 2010
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Multi-Arch: foreign
Version: 7:4.2.4-1ubuntu0.1
Replaces: libav-tools (<< 6:12~~), qt-faststart (<< 7:2.7.1-3~)
Depends: libavcodec58 (= 7:4.2.4-1ubuntu0.1), libavdevice58 (= 7:4.2.4-1ubuntu0.1), libavfilter7 (= 7:4.2.4-1ubuntu0.1), libavformat58 (= 7:4.2.4-1ubuntu0.1), libavresample4 (= 7:4.2.4-1ubuntu0.1), libavutil56 (= 7:4.2.4-1ubuntu0.1), libc6 (>= 2.29), libpostproc55 (= 7:4.2.4-1ubuntu0.1), libsdl2-2.0-0 (>= 2.0.10), libswresample3 (= 7:4.2.4-1ubuntu0.1), libswscale5 (= 7:4.2.4-1ubuntu0.1)
Suggests: ffmpeg-doc
Breaks: libav-tools (<< 6:12~~), qt-faststart (<< 7:2.7.1-3~), winff (<< 1.5.5-5~)
Description: Tools for transcoding, streaming and playing of multimedia files
 FFmpeg is the leading multimedia framework, able to decode, encode, transcode,
 mux, demux, stream, filter and play pretty much anything that humans and
 machines have created. It supports the most obscure ancient formats up to the
 cutting edge.
 .
 This package contains:
  * ffmpeg: a command line tool to convert multimedia files between formats
  * ffplay: a simple media player based on SDL and the FFmpeg libraries
  * ffprobe: a simple multimedia stream analyzer
  * qt-faststart: a utility to rearrange Quicktime files
Homepage: https://ffmpeg.org/
Original-Maintainer: Debian Multimedia Maintainers <debian-multimedia@lists.debian.org>
Package: v4l-utils
Status: install ok installed
Priority: optional
Section: utils
Installed-Size: 2104
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Version: 1.18.0-2build1
Replaces: ivtv-utils (<< 1.4.1-2), media-ctl
Depends: libv4l-0 (= 1.18.0-2build1), libv4l2rds0 (= 1.18.0-2build1), libc6 (>= 2.17), libgcc-s1 (>= 3.0), libstdc++6 (>= 5.2), libudev1 (>= 183)
Breaks: ivtv-utils (<< 1.4.1-2), media-ctl
Description: Collection of command line video4linux utilities
 v4l-utils contains the following video4linux command line utilities:
 .
  decode_tm6000: decodes tm6000 proprietary format streams
  rds-ctl: tool to receive and decode Radio Data System (RDS) streams
  v4l2-compliance: tool to test v4l2 API compliance of drivers
  v4l2-ctl, cx18-ctl, ivtv-ctl: tools to control v4l2 controls from the cmdline
  v4l2-dbg: tool to directly get and set registers of v4l2 devices
  v4l2-sysfs-path: sysfs helper tool
Original-Maintainer: Gregor Jasny <gjasny@googlemail.com>
Homepage: https://linuxtv.org/downloads/v4l-utils/


    


    Due to the reason that the python files are of the same structure I'm uploading a sample file here :

    


    # -*- coding: utf-8 -*-
from threading import Timer
from pynput.mouse import Listener
import logging
import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(
    os.path.realpath(__file__)), "../"))

from Functions import utils as ut

if __name__=='__main__':

    ut.initialize_dirs()
    rec_file = ''.join(('mouse_',ut.get_date(),'.txt'))
    raw_data = ut.get_name('Mouse')
    rec_file = os.path.join(raw_data,rec_file)
    logging.basicConfig(filename=rec_file,level=logging.DEBUG,format="%(asctime)s    %(message)s")

    try:
        with Listener(on_move=ut.on_move, on_click=ut.on_click,on_scroll=ut.on_scroll) as listener:
            Timer(60, listener.stop).start()
            listener.join()
    except KeyboardInterrupt as err:
        print(err)
        sys.exit(0)

    print('Exiting logger...')



    


    I'm also uploading the functions that I use :

    


    # -*- coding: utf-8 -*-&#xA;from serial import Serial&#xA;from datetime import datetime, timedelta&#xA;import pandas as pd&#xA;import collections&#xA;import logging&#xA;import shutil&#xA;import serial&#xA;import time&#xA;import sys&#xA;import os&#xA;&#xA;click_held = False&#xA;button = None&#xA;&#xA;&#xA;def on_move(x,y):&#xA;    """The callback to call when mouse move events occur&#xA;&#xA;    Args:&#xA;        x (float): The new pointer position&#xA;        y (float): The new pointer poisition&#xA;    """&#xA;    if click_held:&#xA;        logging.info("MV    {0:>8}  {1:>8}  {2:>8}:".format(x,y,str(None)))&#xA;    else:&#xA;        logging.info("MV    {0:>8}  {1:>8}  {2:>8}:".format(x,y,str(None)))&#xA;&#xA;&#xA;def on_click(x,y,button,pressed):&#xA;    """The callback to call when a mouse button is clicked&#xA;&#xA;    Args:&#xA;        x (float): Mouse coordinates on screen&#xA;        y (float): Mouse coordinates on screen&#xA;        button (str): one of the Button values&#xA;        pressed (bool): Pressed is whether the button was pressed&#xA;    """&#xA;    global click_held&#xA;    if pressed:&#xA;        click_held = True&#xA;        logging.info("CLK    {0:>7}    {1:>6}    {2:>13}".format(x,y,button))&#xA;    else:&#xA;        click_held = False&#xA;        logging.info("RLS    {0:>7}    {1:>6}    {2:>13}".format(x,y,button))&#xA;&#xA;&#xA;def on_scroll(x,y,dx,dy):&#xA;    """The callback to call when mouse scroll events occur&#xA;&#xA;    Args:&#xA;        x (float): The new pointer position on screen&#xA;        y (float): The new pointer position on screen&#xA;        dx (int): The horizontal scroll. The units of scrolling is undefined&#xA;        dy (int): The vertical scroll. The units of scrolling is undefined&#xA;    """&#xA;    if dy == -1:&#xA;        logging.info("SCRD    {0:>6}    {1:>6}    {2:>6}".format(x,y,str(None)))&#xA;    elif dy == 1:&#xA;        logging.info("SCRU    {0:>6}    {1:>6}    {2:>6}".format(x,y,str(None)))&#xA;    else:&#xA;        pass&#xA;&#xA;&#xA;def on_press_keys(key):&#xA;    """The callback to call when a button is pressed.&#xA;&#xA;    Args:&#xA;        key (str): A KeyCode,a Key or None if the key is unknown&#xA;    """&#xA;    subkeys = [&#xA;    &#x27;Key.alt&#x27;,&#x27;Key.alt_gr&#x27;,&#x27;Key.alt_r&#x27;,&#x27;Key.backspace&#x27;,&#xA;    &#x27;Key.space&#x27;,&#x27;Key.ctrl&#x27;,&#x27;Key.ctrl_r&#x27;,&#x27;Key.down&#x27;,&#xA;    &#x27;Key.up&#x27;,&#x27;Key.left&#x27;,&#x27;Key.right&#x27;,&#x27;Key.page_down&#x27;,&#xA;    &#x27;Key.page_up&#x27;,&#x27;Key.enter&#x27;,&#x27;Key.shift&#x27;,&#x27;Key.shift_r&#x27;&#xA;    ]&#xA;&#xA;    key = str(key).strip(&#x27;\&#x27;&#x27;)&#xA;    if(key in subkeys):&#xA;        #print(key)&#xA;        logging.info(key)&#xA;    else:&#xA;        pass&#xA;&#xA;&#xA;def record_chair(output_file):&#xA;    """Read the data stream coming from the serial monitor&#xA;       in order to get the sensor readings&#xA;&#xA;    Args:&#xA;        output_file (str): The file name, where the data stream will be stored&#xA;    """&#xA;    serial_port = "/dev/ttyACM0"&#xA;    baud_rate = 9600&#xA;    ser = serial.Serial(serial_port,baud_rate)&#xA;    logging.basicConfig(filename=output_file,level=logging.DEBUG,format="%(asctime)s    %(message)s")&#xA;    flag = False&#xA;    start = time.time()&#xA;    while time.time() - start &lt; 60.0:&#xA;        try:&#xA;            serial_data = str(ser.readline().decode().strip(&#x27;\r\n&#x27;))&#xA;            time.sleep(0.2)&#xA;            tmp = serial_data.split(&#x27;  &#x27;)[0] #Getting Sensor Id&#xA;            if(tmp == &#x27;A0&#x27;):&#xA;                flag = True&#xA;            if (flag and tmp != &#x27;A4&#x27;):&#xA;                #print(serial_data)&#xA;                logging.info(serial_data)&#xA;            if(flag and tmp == &#x27;A4&#x27;):&#xA;                flag = False&#xA;                #print(serial_data)&#xA;                logging.info(serial_data)&#xA;        except (UnicodeDecodeError, KeyboardInterrupt) as err:&#xA;            print(err)&#xA;            print(err.args)&#xA;            sys.exit(0)&#xA;&#xA;&#xA;def initialize_dirs():&#xA;    """Create the appropriate directories in order to save&#xA;       and process the collected data&#xA;    """&#xA;    current_path = os.path.abspath(os.getcwd())&#xA;    os.chdir(&#x27;..&#x27;)&#xA;    current_path = (os.path.abspath(os.curdir)) #/Multodal_User_Monitoring&#xA;    current_path = os.path.join(current_path,&#x27;Data&#x27;)&#xA;    create_subdirs([current_path])&#xA;&#xA;    #Create mouse log folder&#xA;    mouse = os.path.join(current_path,&#x27;Mouse&#x27;)&#xA;    create_subdirs([mouse])&#xA;    #Create mouse subfolders&#xA;    names = concat_names(mouse)&#xA;    create_subdirs(names)&#xA;&#xA;    #Create keyboard log  folder&#xA;    keyboard = os.path.join(current_path,&#x27;Keyboard&#x27;)&#xA;    create_subdirs([keyboard])&#xA;    #Create keyboard subfolders&#xA;    names = concat_names(keyboard)&#xA;    create_subdirs(names)&#xA;&#xA;    #Create the chair log folder&#xA;    chair = os.path.join(current_path,&#x27;Chair&#x27;)&#xA;    create_subdirs([chair])&#xA;    #Create chair subfolders&#xA;    names = concat_names(chair)&#xA;    create_subdirs(names)&#xA;&#xA;    #Create webcam log folder&#xA;    webcam = os.path.join(current_path,&#x27;Webcam&#x27;)&#xA;    create_subdirs([webcam])&#xA;&#xA;def concat_names(dir) -> str:&#xA;    """Concatenate the given folder names&#xA;       with the appropriate path&#xA;&#xA;    Args:&#xA;        dir (str): The directory to create the subfolders&#xA;&#xA;    Returns:&#xA;        list: The new absolute paths&#xA;    """&#xA;    raw_data = os.path.join(dir,&#x27;Raw&#x27;)&#xA;    edited_data = os.path.join(dir,&#x27;Edited_logs&#x27;)&#xA;    csv_data = os.path.join(dir,&#x27;CSV&#x27;)&#xA;    features = os.path.join(dir,&#x27;Features&#x27;)&#xA;    dirs = [raw_data,edited_data,csv_data,features]&#xA;    return dirs&#xA;&#xA;&#xA;def create_subdirs(paths):&#xA;    """Create sub directories given some absolute paths&#xA;&#xA;    Args:&#xA;        paths (list): A list containing the paths to be created&#xA;    """&#xA;    for index,path in enumerate(paths):&#xA;        if(os.path.isdir(paths[index])):&#xA;            pass&#xA;        else:&#xA;            os.mkdir(paths[index])&#xA;&#xA;&#xA;def round_down(num,divisor) -> int:&#xA;    """Round the number of lines contained into the recording file,&#xA;       down to the nearest multiple of the given divisor&#xA;&#xA;    Args:&#xA;        num (int): The number of lines contained into the given log file&#xA;        divisor (int): The divisor in order to get tuples of divisor&#xA;&#xA;    Returns:&#xA;        int: The nearest multiple of five&#xA;    """&#xA;    return num-(num%divisor)&#xA;&#xA;&#xA;def get_date() -> str:&#xA;    """Get the current date in order to properly name&#xA;       the recored log files&#xA;    Returns:&#xA;        str: The current date in: YY_MM_DD format&#xA;    """&#xA;    return datetime.now().strftime(&#x27;%Y_%m_%d&#x27;)&#xA;&#xA;&#xA;def get_name(modality) -> str:&#xA;    """Save the recorded log into /Data//Raw&#xA;&#xA;    Args:&#xA;        modality (str): The log data source&#xA;&#xA;    Returns:&#xA;        str: The absolute path where each recording is saved&#xA;    """&#xA;    current_path = os.path.abspath(os.getcwd())&#xA;    current_path = os.path.join(current_path,&#x27;Data&#x27;)&#xA;&#xA;    if modality == &#x27;Chair&#x27;:&#xA;        chair_path = os.path.join(current_path,modality,&#x27;Raw&#x27;)&#xA;        return chair_path&#xA;&#xA;    elif modality == &#x27;Mouse&#x27;:&#xA;        mouse_path = os.path.join(current_path,modality,&#x27;Raw&#x27;)&#xA;        return mouse_path&#xA;&#xA;    elif modality == &#x27;Keyboard&#x27;:&#xA;        keyboard_path = os.path.join(current_path,modality,&#x27;Raw&#x27;)&#xA;        return keyboard_path&#xA;&#xA;&#xA;def crawl_dir(target,folder) -> str:&#xA;    """Enumerate all the given files in a directory&#xA;       based on the given file extension&#xA;&#xA;    Args:&#xA;        target (str): The file to search for&#xA;        folder (str): The folder to search&#xA;&#xA;    Returns:&#xA;        [type]: A list containing the file names&#xA;    """&#xA;    current_path = os.path.abspath(os.getcwd())&#xA;    path = os.path.join(current_path,folder)&#xA;    file_names =[]&#xA;    for f in os.listdir(path):&#xA;        if(f.endswith(target)):&#xA;            fname=os.path.join(path,f)&#xA;            file_names.append(fname)&#xA;    return file_names&#xA;&#xA;&#xA;def convert_keys2_csv(input_file,output_file):&#xA;    """Convert the data stream file(keylogger recording) from .txt to .csv format&#xA;&#xA;    Args:&#xA;        input_file (str): The data stream file in .txt format&#xA;        output_file (str): The csv extension file name&#xA;    """&#xA;    df = pd.read_fwf(input_file)&#xA;    col_names = [&#x27;Date&#x27;,&#x27;Time&#x27;,&#x27;Key&#x27;]&#xA;    df.to_csv(output_file,header=col_names,encoding=&#x27;utf-8&#x27;,index=False)&#xA;&#xA;&#xA;def convert_mouse2_csv(input_file,output_file):&#xA;    """Convert the data stream file(mouselogger recording) from .txt to .csv format&#xA;&#xA;    Args:&#xA;        input_file (str): The data stream file in .txt format&#xA;        output_file (str): The csv extension file name&#xA;    """&#xA;    df = pd.read_fwf(input_file)&#xA;    col_names = [&#x27;Date&#x27;,&#x27;Time&#x27;,&#x27;Action&#x27;,&#x27;PosX&#x27;,&#x27;PosY&#x27;,&#x27;Button&#x27;]&#xA;    df.to_csv(output_file,header=col_names,encoding=&#x27;utf-8&#x27;,index=False)&#xA;&#xA;&#xA;def convert_chair_2_csv(input_file,output_file):&#xA;    """Convert the data stream file(chair recording)&#xA;       from .txt to .csv format&#xA;&#xA;    Args:&#xA;        input_file (str): The data stream file in .txt format&#xA;        output_file (str): The csv extension file name&#xA;    """&#xA;    if(os.path.isfile(input_file)):&#xA;        pass&#xA;    else:&#xA;        print(&#x27;Invalid working directory...&#x27;)&#xA;        print(&#x27;Aborting...&#x27;)&#xA;        sys.exit(0)&#xA;&#xA;    tmp0,tmp1,tmp2,tmp3,tmp4 = 0,1,2,3,4&#xA;&#xA;    line_number = 0&#xA;    for line in open(input_file).readlines():&#xA;        line_number &#x2B;= 1&#xA;&#xA;    rounded_line = round_down(line_number,5)&#xA;    d = collections.defaultdict(list)&#xA;&#xA;    with open(input_file,&#x27;r&#x27;) as f1:&#xA;        lines = f1.readlines()&#xA;        for i in range(rounded_line // 5):&#xA;            #Sensor:Analog input 0 values&#xA;            Sid0 = lines[i&#x2B;tmp0]&#xA;            temp = Sid0.split()&#xA;            d[&#x27;Sid0&#x27;].append([temp[0],temp[1],temp[2],temp[3]])&#xA;            #Sensor:Analog input 1 values&#xA;            Sid1 = lines[i&#x2B;tmp1]&#xA;            temp = Sid1.split()&#xA;            d[&#x27;Sid1&#x27;].append([temp[0],temp[1],temp[2],temp[3]])&#xA;            #Sensor:Analog input 2 values&#xA;            Sid2 = lines[i&#x2B;tmp2]&#xA;            temp = Sid2.split()&#xA;            d[&#x27;Sid2&#x27;].append([temp[0],temp[1],temp[2],temp[3]])&#xA;            #Sensor:Analog input 3 values&#xA;            Sid3 = lines[i&#x2B;tmp3]&#xA;            temp = Sid3.split()&#xA;            d[&#x27;Sid3&#x27;].append([temp[0],temp[1],temp[2],temp[3]])&#xA;            #Sensor:Analog input 4 values&#xA;            Sid4 = lines[i&#x2B;tmp4]&#xA;            temp = Sid4.split()&#xA;            d[&#x27;Sid4&#x27;].append([temp[0],temp[1],temp[2],temp[3]])&#xA;&#xA;            tmp0 &#x2B;= 4&#xA;            tmp1 &#x2B;= 4&#xA;            tmp2 &#x2B;= 4&#xA;            tmp3 &#x2B;= 4&#xA;            tmp4 &#x2B;= 4&#xA;&#xA;    l = []&#xA;    for i in range(rounded_line // 5):&#xA;        date = d[&#x27;Sid0&#x27;][i][0]&#xA;        time = d[&#x27;Sid0&#x27;][i][1]&#xA;        A0_val = d[&#x27;Sid0&#x27;][i][3]&#xA;        A1_val = d[&#x27;Sid1&#x27;][i][3]&#xA;        A2_val = d[&#x27;Sid2&#x27;][i][3]&#xA;        A3_val = d[&#x27;Sid3&#x27;][i][3]&#xA;        A4_val = d[&#x27;Sid4&#x27;][i][3]&#xA;        l.append([date,time,A0_val,A1_val,A2_val,A3_val,A4_val])&#xA;&#xA;    sensor_readings_df = pd.DataFrame.from_records(l)&#xA;    sensor_readings_df.columns = [&#x27;Date&#x27;,&#x27;Time&#x27;,&#x27;A0&#x27;,&#x27;A1&#x27;,&#x27;A2&#x27;,&#x27;A3&#x27;,&#x27;A4&#x27;]&#xA;    sensor_readings_df.to_csv(output_file, encoding=&#x27;utf-8&#x27;, index=False)&#xA;    del l&#xA;&#xA;&#xA;def parse_raw_data(modality):&#xA;    """Convert each modality&#x27;s raw data into csv format and move&#xA;       the edited raw data into the appropriate Edited_logs folder&#xA;&#xA;    Args:&#xA;        modality (str): The data source&#xA;    """&#xA;    #Change directories&#xA;    current_path = os.path.abspath(os.getcwd()) #/Functions&#xA;    os.chdir(&#x27;..&#x27;)&#xA;    current_path = (os.path.abspath(os.curdir)) #/Multimodal_User_Monitoring&#xA;    os.chdir(&#x27;./Data&#x27;)#/Multimodal_User_Monitoring/Data&#xA;    current_path = (os.path.abspath(os.curdir)) #/Multimodal_User_Monitoring/Data&#xA;    current_path = os.path.join(current_path,modality) #example: /Multimodal_User_Monitoring/Data/<modality>&#xA;    raw_data_path = os.path.join(current_path,&#x27;Raw&#x27;)&#xA;    csv_data_path = os.path.join(current_path,&#x27;CSV&#x27;)&#xA;    edited_logs_path = os.path.join(current_path,&#x27;Edited_logs&#x27;)&#xA;&#xA;    txt_names = crawl_dir(&#x27;.txt&#x27;,raw_data_path)&#xA;    csv_names = []&#xA;    for elem in txt_names:&#xA;        name = elem.split(&#x27;/&#x27;)[-1].split(&#x27;.&#x27;)[0]&#xA;        csv_name = name&#x2B;&#x27;.csv&#x27;&#xA;        tmp = os.path.join(csv_data_path,csv_name)&#xA;        csv_names.append(tmp)&#xA;&#xA;    if modality == &#x27;Mouse&#x27;:&#xA;        if len(txt_names) == len(csv_names):&#xA;            for i, elem in enumerate(txt_names):&#xA;            #for i in range(len(txt_names)):&#xA;                convert_mouse2_csv(txt_names[i],csv_names[i])&#xA;                shutil.move(txt_names[i],edited_logs_path)&#xA;&#xA;    elif modality == &#x27;Keyboard&#x27;:&#xA;        if len(txt_names) == len(csv_names):&#xA;            for i, elem in enumerate(txt_names):&#xA;            #for i in range(len(txt_names)):&#xA;                convert_keys2_csv(txt_names[i],csv_names[i])&#xA;                shutil.move(txt_names[i],edited_logs_path)&#xA;&#xA;    elif modality == &#x27;Chair&#x27;:&#xA;        if len(txt_names) == len(csv_names):&#xA;            for i, elem in enumerate(txt_names):&#xA;            #for i in range(len(txt_names)):&#xA;                convert_chair_2_csv(txt_names[i],csv_names[i])&#xA;                shutil.move(txt_names[i],edited_logs_path)&#xA;&#xA;</modality>

    &#xA;

    I need to mention that the logs of the python3 scripts are empty

    &#xA;

  • RTMP to HLS : Segmentation fault

    25 mai 2013, par Wildan Muhlis

    I have tried convert RTMP to HLS with ffmpeg. The segments created without -segment_format mpegts parameter, but it resulting corrupted .m3u8 file, If I add the parameter, segments couldn't created due to below error message.

    Anyone know how to solve it ?

    ffmpeg encoding profile :

    ffmpeg -y -i ${input}" live=1 swfVfy=1" \
    -ar 48000 \
    -ab 64k \
    -s ${WIDTH}x${HEIGHT} \
    -vcodec libx264 \
    -b:v ${BR} \
    -partitions +parti4x4+partp8x8+partb8x8 \
    -subq 7 \
    -trellis 0 \
    -refs 0 \
    -coder 0 \
    -me_range 16 \
    -keyint_min 25 \
    -sc_threshold 40 \
    -i_qfactor 0.71 \
    -bt 200k \
    -maxrate ${BR} \
    -bufsize ${BR} \
    -rc_eq &#39;blurCplx^(1-qComp)&#39; \
    -qcomp 0.6 \
    -qmin 30 \
    -qmax 51 \
    -qdiff 4 \
    -level 30 \
    -aspect ${WIDTH}:${HEIGHT} \
    -g 30 \
    -async 2 \
    -flags -global_header -map 0 \
    -f segment \
    -flags +loop \
    -segment_time 10 \
    -segment_list ${SEGMENT_LIST} \
    -segment_format mpegts\
    -segment_list_flags +live \
    ${OUTPUT}

    Error log :

    ffmpeg version N-53211-g5918b7a Copyright (c) 2000-2013 the FFmpeg developers
     built on May 18 2013 09:16:55 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-3)
     configuration: --as=yasm --enable-gpl --enable-pthreads --disable-ffserver --disable-shared --enable-static --enable-gpl --enable-libfdk_aac --enable-libmp3lame --enable-libtheora --enable-libvpx --enable-libx264 --enable-librtmp --enable-nonfree
     libavutil      52. 33.100 / 52. 33.100
     libavcodec     55. 10.100 / 55. 10.100
     libavformat    55.  7.100 / 55.  7.100
     libavdevice    55.  0.100 / 55.  0.100
     libavfilter     3. 68.101 /  3. 68.101
     libswscale      2.  3.100 /  2.  3.100
     libswresample   0. 17.102 /  0. 17.102
     libpostproc    52.  3.100 / 52.  3.100
    rtmp server sent error
    Metadata:
     audiocodecid          .mp3
     videokeyframe_frequency5.00
     avclevel              30.00
     videodevice           ASUS USB2.0 Webcam
     audiosamplerate       44100.00
     audiochannels         2.00
     width                 320.00
     videodatarate         200.00
     presetname            Custom
     audioinputvolume      75.00
     creationdate          Sat May 25 20:02:26 2013
     videocodecid          avc1
     audiodevice           Microphone (Realtek High Defini
     avcprofile            66.00
     audiodatarate         96.00
     height                240.00
     framerate             30.00
    [flv @ 0x2df2960] max_analyze_duration 5000000 reached at 5018000 microseconds
    [flv @ 0x2df2960] decoding for stream 0 failed
    Input #0, flv, from &#39;rtmp://122.22.117.60:1935/oflaDemo/livestream live=1 swfVfy=1&#39;:
     Metadata:
       videokeyframe_frequency: 5
       avclevel        : 30
       videodevice     : ASUS USB2.0 Webcam
       keywords        :
       audiochannels   : 2
       presetname      : Custom
       copyright       :
       audioinputvolume: 75
       creationdate    : Sat May 25 20:02:26 2013
                       :
       author          :
       audiodevice     : Microphone (Realtek High Defini
       avcprofile      : 66
       title           :
       description     :
       rating          :
     Duration: N/A, start: 0.000000, bitrate: 303 kb/s
       Stream #0:0: Video: h264 (Baseline), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 204 kb/s, 30 tbr, 1k tbn, 60 tbc
       Stream #0:1: Audio: mp3, 44100 Hz, stereo, s16p, 98 kb/s
    Segmentation fault
  • Convert MPEG4 to MPEGTS on Android with FFmpeg

    3 juin 2013, par Ardoramor

    Ok, so obviously I know very little to none about ffmpeg API when I made the original post... it is quite overwhelming when one starts learning about digital media and conversion details. After reading quite a bit more and going through ffmpeg source, I was able to get a working output from mp4 to mpegts. The concept is similar to executing :

    ffmpeg -i in.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb out.ts

    But as I mentioned before, I need to implement it with ffmpeg API in C.

    So, although I am able to generate a playable .ts file, its video and audio streams are not synced. That is, playing them back on Android tablet plays the video very slowly while audio is playing at normal speed and then (once audio stream ends) video plays at normal speed to the end. Playing the same generated .ts file in VLC produces a very condensed audio (as though fast-forwarded) and plays video fine.

    There are still many aspects of media conversion that I am not familiar with. I am sure that some of them prevent me from successful conversion.

    Here is some information (via ffprobe) about the files :
    - in.mp4 - file generated via Android recording - MPEG4 (H.264 + AAC)
    - ffmpeg.ts - file generated via ffmpeg conversion - MPEG2TS (H.264 + AAC)
    - out.ts - file generated via my code - MPEGTS (H.264 + AAC)

    in.mp4

    filename=in.mp4
    nb_streams=2
    format_name=mov,mp4,m4a,3gp,3g2,mj2
    format_long_name=QuickTime/MPEG-4/Motion JPEG 2000 format
    start_time=0:00:00.000000
    duration=0:00:09.961383
    size=4.730 Mibyte
    bit_rate=3.983 Mbit/s
    TAG:major_brand=isom
    TAG:minor_version=0
    TAG:compatible_brands=isom3gp4
    TAG:creation_time=2013-05-28 17:06:57

    ffmpeg.ts

    filename=ffmpeg.ts
    nb_streams=2
    format_name=mpegts
    format_long_name=MPEG-2 transport stream format
    start_time=0:00:01.400000
    duration=0:00:09.741267
    size=5.132 Mibyte
    bit_rate=4.419 Mbit/s

    out.ts

    filename=out.ts
    nb_streams=2
    format_name=mpegts
    format_long_name=MPEG-2 transport stream format
    start_time=0:00:00.000000
    duration=0:00:09.741267
    size=5.166 Mibyte
    bit_rate=4.449 Mbit/s

    Firstly, I was unable to affect my output file's start_time. Next, upon examining the -show_packets output of probe, I saw the following :

    ffmpeg.ts

    [PACKET]
    codec_type=video
    stream_index=0
    pts=N/A
    pts_time=N/A
    dts=N/A
    dts_time=N/A
    duration=0
    duration_time=0:00:00.000000
    size=20.506 Kibyte
    pos=564
    flags=K
    [/PACKET]
    [PACKET]
    codec_type=video
    stream_index=0
    pts=N/A
    pts_time=N/A
    dts=N/A
    dts_time=N/A
    duration=0
    duration_time=0:00:00.000000
    size=11.727 Kibyte
    pos=22936
    flags=_
    [/PACKET]
    ...
    [PACKET]
    codec_type=audio
    stream_index=1
    pts=126000
    pts_time=0:00:01.400000
    dts=126000
    dts_time=0:00:01.400000
    duration=2089
    duration_time=0:00:00.023211
    size=285.000 byte
    pos=109416
    flags=K
    [/PACKET]
    [PACKET]
    codec_type=audio
    stream_index=1
    pts=128089
    pts_time=0:00:01.423211
    dts=128089
    dts_time=0:00:01.423211
    duration=2089
    duration_time=0:00:00.023211
    size=374.000 byte
    pos=-1
    flags=K
    [/PACKET]
    ...
    [PACKET]
    codec_type=video
    stream_index=0
    pts=N/A
    pts_time=N/A
    dts=N/A
    dts_time=N/A
    duration=0
    duration_time=0:00:00.000000
    size=20.000 Kibyte
    pos=87232
    flags=_
    [/PACKET]
    [PACKET]
    codec_type=video
    stream_index=0
    pts=N/A
    pts_time=N/A
    dts=N/A
    dts_time=N/A
    duration=0
    duration_time=0:00:00.000000
    size=16.852 Kibyte
    pos=112800
    flags=_
    [/PACKET]

    out.ts

    [PACKET]
    codec_type=audio
    stream_index=1
    pts=0
    pts_time=0:00:00.000000
    dts=0
    dts_time=0:00:00.000000
    duration=2089
    duration_time=0:00:00.023211
    size=285.000 byte
    pos=22936
    flags=K
    [/PACKET]
    [PACKET]
    codec_type=audio
    stream_index=1
    pts=1024
    pts_time=0:00:00.011378
    dts=1024
    dts_time=0:00:00.011378
    duration=2089
    duration_time=0:00:00.023211
    size=374.000 byte
    pos=23312
    flags=K
    [/PACKET]
    ...

    [PACKET]
    codec_type=video
    stream_index=0
    pts=N/A
    pts_time=N/A
    dts=N/A
    dts_time=N/A
    duration=0
    duration_time=0:00:00.000000
    size=11.727 Kibyte
    pos=25004
    flags=_
    [/PACKET]
    [PACKET]
    codec_type=audio
    stream_index=1
    pts=7168
    pts_time=0:00:00.079644
    dts=7168
    dts_time=0:00:00.079644
    duration=2089
    duration_time=0:00:00.023211
    size=299.000 byte
    pos=55460
    flags=K
    [/PACKET]

    As you can see, ffmpeg.ts starts out with video packets that do not have pts/dts. The audio packets that follow contain pts/dts. This repeats until the end. All video packets do not have pts/dts according to ffprobe output.

    However, out.ts starts with audio packets and alternate with video packets. Here, video packets also do not have pts/dts. The difference is that here there is one video packet between a series of audio packets. What happened to the rest of the video packets (ffmpeg.ts has 5 audio followed by 5 video).

    Obviously, I'm still learning and don't know way too much yet... Does anything jump out as obvious a problem to anyone ? I will greatly appreciate any info / suggestions but will continue to grind at it !!