You are not logged in.

#1 2018-01-16 01:21:45

sistematico
Member
From: Campo Grande / MS / Brasil
Registered: 2008-07-26
Posts: 97
Website

[SOLVED] ffmpeg low quality or damaged on android

I have this script:

#!/bin/sh
#
# Script para criar screencasts(vídeos da captura de tela) usando o ffmpeg.
#
# Desenvolvido por Lucas Saliés Brum <lucas@archlinux.com.br>
#
# Criado em: 09/06/2017
# Última Atualização: 10/06/2017 09:36:56
#

lixeira="${HOME}/.local/share/Trash"
icone="/usr/share/icons/Arc/devices/24@2x/video-display.png"

if [ -f ~/.config/user-dirs.dirs ]; then 
    source ~/.config/user-dirs.dirs
    caminho="${XDG_VIDEOS_DIR}/screencast/"
else
    caminho="${HOME}/video/screencast/"
fi

if [ "$1" == "start" ]; then

    preset="slow" # ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow,placebo
    data=$(date +%Y-%m-%d_%H-%M-%S)
    arquivo="${caminho}/screencast-${data}.mp4"
    resolucao=$(xrandr | grep '*' | awk 'NR==1{print $1}')
    audio=$(pacmd list-sinks | grep -A 1 'index: 1' | awk 'NR==2{print $2}' | awk '{print substr($0,2,length($0)-2)}') # list-sources, list-sinks

    [ ! -d $caminho ] && mkdir -p $caminho

fi

if pgrep -x "ffmpeg" > /dev/null
then
    echo "%{F#d08770}%{F-}"
    if [ "$1" == "start" ]; then
        killall ffmpeg
        notify-send -i $icone "ScreenCast" "O vídeo <b>$arquivo</b> foi terminado."
        exit 0
    fi
else
    echo ""
    if [ "$1" == "start" ]; then
        notify-send -i $icone "ScreenCast" "O vídeo <b>$arquivo</b> foi iniciado..."
        #ffmpeg -f x11grab -r 25 -s $resolucao -i :0.0 -f pulse -i default -preset $preset -crf 0 -threads 0 -probesize 10M $arquivo
        #ffmpeg -f x11grab -r 25 -s $resolucao -i :0.0 -f pulse -i default -preset $preset -c:v libx264 -c:a aac -b:a 128k -probesize 50M $arquivo
        #ffmpeg -f x11grab -r 25 -s $resolucao -i :0.0 -f pulse -i default -preset $preset -c:v libx264 -c:a aac -b:a 128k -probesize 50M $arquivo
        #ffmpeg -thread_queue_size 512 -f x11grab -r 30 -s $resolucao -i :0.0 -f pulse -i default -preset $preset -c:v libx264 -c:a aac -b:a 128k $arquivo -probesize 50M
        #ffmpeg -thread_queue_size 512 -f x11grab -r 30 -s $resolucao -i :0.0 -f pulse -ac 2 -i default -preset $preset -c:v libx264 -c:a aac -b:a 128k $arquivo -probesize 50M
        #ffmpeg -thread_queue_size 512 -f x11grab -r 30 -s $resolucao -i :0.0 -f pulse -ac 2 -i default -preset $preset -c:v h264_nvenc -qp 0 -c:a aac -b:a 128k $arquivo -probesize 50M
    	#ffmpeg -f alsa -i pulse -f x11grab -r 25 -s $resolucao -i :0 -c:a aac -c:v libx264 -threads 0 $arquivo -probesize 50M
        #ffmpeg -f x11grab -r 25 -s $resolucao -i :0 -f pulse -ac 2 -i default -preset $preset -c:v libx264 -c:a aac -b:a 128k $arquivo -probesize 50M
        #ffmpeg -f x11grab -r 25 -s $resolucao -i :0 -f pulse -ac 2 -i default -preset $preset -c:v libx264 -c:a aac -b:a 128k $arquivo
        #ffmpeg -y -i screencast-2018-01-15_06-09-22.mp4 -c:v mpeg4 -b:v 600k -c:a libmp3lame output.avi
        #ffmpeg -y -f x11grab -r 25 -s $resolucao -i :0 -f pulse -ac 2 -i default -preset $preset -c:v mpeg4 -b:v 800k -c:a libmp3lame $arquivo
        #ffmpeg -y -f x11grab -s $resolucao -i :0 -f pulse -ac 2 -i default -preset $preset -c:v libx264 -c:a libmp3lame $arquivo
        #ffmpeg -f x11grab -s $resolucao -i :0 -f pulse -ac 2 -i default -preset $preset -c:v libx264 -pix_fmt yuv444p -c:a libmp3lame $arquivo
        ffmpeg -f x11grab -s $resolucao -i :0 -f pulse -ac 2 -i default -preset $preset -c:v mpeg4 -c:a libmp3lame $arquivo
    elif [ "$1" == "clear" ]; then        
        icone="/usr/share/icons/Arc/places/24@2x/user-trash.png"
        listagem=(${caminho}*)
        if [ ${#listagem[@]} -gt 1 ]; then 
            mv ${caminho}* ${lixeira}/files/
            notify-send -i $icone "ScreenCast" "Pasta de screencasts limpa!"
        else
            notify-send -i $icone "ScreenCast" "Pasta de screencasts já está limpa!"
        fi        
    fi       
fi

# Re-encode
# #ffmpeg -y -i screencast-2018-01-15_06-09-22.mp4 -c:v mpeg4 -b:v 600k -c:a libmp3lame output.avi

When i use mpeg4 the video play on Android, but the quality is very poor.
When i use libx264 video not play on Android, but the quality is fine.

How to create HQ Videos and play on Android devices?

Last edited by sistematico (2018-01-18 02:35:26)


Lucas Saliés Brum
blog | medium | vk | twitter | github | .share
Forgive the spelling and grammar, English is not my native language.

Offline

#2 2018-01-16 10:55:39

seth
Member
From: Won't reply 2 private help req
Registered: 2012-09-03
Posts: 78,863

Offline

#3 2018-01-17 04:21:27

sistematico
Member
From: Campo Grande / MS / Brasil
Registered: 2008-07-26
Posts: 97
Website

Re: [SOLVED] ffmpeg low quality or damaged on android

Thank you very much!
Solved: https://superuser.com/a/859075

~/.local/bin/screencast:

#!/bin/sh
#
# Script para criar screencasts(vídeos da captura de tela) usando o ffmpeg.
#
# Desenvolvido por Lucas Saliés Brum <lucas@archlinux.com.br>
#
# Criado em: 09/06/2017 23:26:41
# Última Atualização: 16/01/2018 01:20:47

lixeira="${HOME}/.local/share/Trash"
icone="/usr/share/icons/Arc/devices/24@2x/video-display.png"

if [ -f ~/.config/user-dirs.dirs ]; then 
    source ~/.config/user-dirs.dirs
    caminho="${XDG_VIDEOS_DIR}/screencast/"
else
    caminho="${HOME}/video/screencast/"
fi

if [ ! $1 ]; then
    preset="slow" # ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow,placebo
    data=$(date +%Y-%m-%d_%H-%M-%S)
    arquivo="${caminho}/screencast-${data}.mp4"
    resolucao=$(xrandr | grep '*' | awk 'NR==1{print $1}')
    audio=$(pacmd list-sinks | grep -A 1 'index: 1' | awk 'NR==2{print $2}' | awk '{print substr($0,2,length($0)-2)}') # list-sources, list-sinks
    [ ! -d $caminho ] && mkdir -p $caminho
fi

if pgrep -x "ffmpeg" > /dev/null
then
    [ "$(pgrep -x polybar)" ] && echo "%{F#d08770}%{F-}"
    if [ ! $1 ]; then
        killall ffmpeg
        notify-send -i $icone "ScreenCast" "O vídeo <b>$arquivo</b> foi terminado."
        exit 0
    fi
else
    [ "$(pgrep -x polybar)" ] && echo ""
    if [ ! "$1" ]; then
        notify-send -i $icone "ScreenCast" "O vídeo <b>$arquivo</b> foi iniciado..."
        #ffmpeg -f x11grab -r 25 -s $resolucao -i :0.0 -f pulse -i default -preset $preset -crf 0 -threads 0 -probesize 10M $arquivo
        #ffmpeg -f x11grab -r 25 -s $resolucao -i :0.0 -f pulse -i default -preset $preset -c:v libx264 -c:a aac -b:a 128k -probesize 50M $arquivo
        #ffmpeg -f x11grab -r 25 -s $resolucao -i :0.0 -f pulse -i default -preset $preset -c:v libx264 -c:a aac -b:a 128k -probesize 50M $arquivo
        #ffmpeg -thread_queue_size 512 -f x11grab -r 30 -s $resolucao -i :0.0 -f pulse -i default -preset $preset -c:v libx264 -c:a aac -b:a 128k $arquivo -probesize 50M
        #ffmpeg -thread_queue_size 512 -f x11grab -r 30 -s $resolucao -i :0.0 -f pulse -ac 2 -i default -preset $preset -c:v libx264 -c:a aac -b:a 128k $arquivo -probesize 50M
        #ffmpeg -thread_queue_size 512 -f x11grab -r 30 -s $resolucao -i :0.0 -f pulse -ac 2 -i default -preset $preset -c:v h264_nvenc -qp 0 -c:a aac -b:a 128k $arquivo -probesize 50M
    	#ffmpeg -f alsa -i pulse -f x11grab -r 25 -s $resolucao -i :0 -c:a aac -c:v libx264 -threads 0 $arquivo -probesize 50M
        #ffmpeg -f x11grab -r 25 -s $resolucao -i :0 -f pulse -ac 2 -i default -preset $preset -c:v libx264 -c:a aac -b:a 128k $arquivo -probesize 50M
        #ffmpeg -f x11grab -r 25 -s $resolucao -i :0 -f pulse -ac 2 -i default -preset $preset -c:v libx264 -c:a aac -b:a 128k $arquivo
        #ffmpeg -y -i screencast-2018-01-15_06-09-22.mp4 -c:v mpeg4 -b:v 600k -c:a libmp3lame output.avi
        #ffmpeg -y -f x11grab -r 25 -s $resolucao -i :0 -f pulse -ac 2 -i default -preset $preset -c:v mpeg4 -b:v 800k -c:a libmp3lame $arquivo
        #ffmpeg -y -f x11grab -s $resolucao -i :0 -f pulse -ac 2 -i default -preset $preset -c:v libx264 -c:a libmp3lame $arquivo
        #ffmpeg -f x11grab -s $resolucao -i :0 -f pulse -ac 2 -i default -preset $preset -c:v libx264 -pix_fmt yuv444p -c:a libmp3lame $arquivo
        #ffmpeg -f x11grab -s $resolucao -i :0 -f pulse -ac 2 -i default -preset $preset -c:v mpeg4 -c:a libmp3lame $arquivo

		#ffmpeg -f x11grab -s $resolucao -i :0 -c:v libx264 -crf 23 -profile:v baseline -level 3.0 -pix_fmt yuv420p -c:a aac -ac 2 -strict experimental -b:a 128k -movflags faststart $arquivo
   
        ffmpeg -f x11grab -s $resolucao -i :0 -f pulse -ac 2 -i default -c:v libx264 -crf 23 -profile:v baseline -level 3.0 -pix_fmt yuv420p -c:a aac -ac 2 -strict experimental -b:a 128k -movflags faststart $arquivo        
        
    elif [ "$1" == "clear" ]; then        
        icone="/usr/share/icons/Arc/places/24@2x/user-trash.png"
        listagem=(${caminho}*)
        if [ ${#listagem[@]} -gt 1 ]; then 
            mv ${caminho}* ${lixeira}/files/
            notify-send -i $icone "ScreenCast" "Pasta de screencasts limpa!"
        else
            notify-send -i $icone "ScreenCast" "Pasta de screencasts já está limpa!"
        fi        
    fi       
fi

Lucas Saliés Brum
blog | medium | vk | twitter | github | .share
Forgive the spelling and grammar, English is not my native language.

Offline

#4 2018-01-17 05:03:28

seth
Member
From: Won't reply 2 private help req
Registered: 2012-09-03
Posts: 78,863

Re: [SOLVED] ffmpeg low quality or damaged on android

Cool. Please always remember to mark resolved threads by editing your first posts subject. Thanks.

Offline

Board footer

Powered by FluxBB